代码之家  ›  专栏  ›  技术社区  ›  crazy da gamer

如何不打印“无”[重复]

  •  -1
  • crazy da gamer  · 技术社区  · 7 年前

    出于某种原因,我不明白为什么我的代码在打印出类中的内容后会打印“None”,或者如何删除它。这是我的代码:

    class armour:
        def __init__(self, name, defence):
            self.name = name
            self.defence = defence
    
        def block(self):
            print("your " + self.name + " blocked " + str(self.defence) + "\n")
    
    class weapon:
        def __init__(self, name, attack):
            self.name = name
            self.attack = attack
    
        def attacks(self):
            print("your " + self.name + " blocked " + str(self.attack) + "\n")
    
    loot = {
        "id1" : armour("test 1", 10),
        "id2" : weapon("test 2", 10),
    }
    
    equipment = {
        "armour" : loot["id" + str(1)],
        "weapon" : loot["id" + str(2)],
    }
    
    
    print(equipment["armour"].name)
    print(equipment["armour"].block())
    print(equipment["weapon"].name)
    print(equipment["weapon"].attacks())
    

    如果有人能解释为什么会这样,我们将不胜感激。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Rahul    7 年前

    在python中,每个函数都返回一个值。如果不指定,它将返回None。如果在上面打印函数调用,它将不打印任何函数调用。

    def none_func():
        pass
    
    print(none_func())
    None
    

    在您的代码中,您基本上也是这样做的。

    print(equipment["armour"].block())
    

    这里您正在打印block()方法的调用。

        2
  •  0
  •   Axeon Thra    7 年前

    它不打印任何内容,因为print语句中的函数调用不返回任何内容。只需进行函数调用并删除它们的打印。或返回字符串。例如:

    print(equipment["armour"].name)
    equipment["armour"].block()
    print(equipment["weapon"].name)
    equipment["weapon"].attacks()
    
        3
  •  0
  •   mypetlion    7 年前

    你的 weapon.attacks 方法没有显式返回值,因此它返回 None 。当你打电话的时候 print(equipment["weapon"].attacks()) 您正在打印返回值 没有一个 。更改方法以返回 "your " + self.name + " blocked " + str(self.attack) + "\n" 字符串,然后打印它,或者只调用该方法并让它进行打印,而不打印返回值。

    基本上将最后一行改为:

    #print(equipment["weapon"].attacks())
    equipment["weapon"].attacks()