如何不打印“无”

时间:2018-03-13 17:40:47

标签: python nonetype

由于某种原因,我无法弄清楚为什么我的代码在打印出类或者如何删除之后打印“无”。这是我的代码:

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 个答案:

答案 0 :(得分:1)

在python中,每个函数都返回一个值。如果未指定,则返回None。如果打印函数调用,它将打印无。

def none_func():
    pass

print(none_func())
None

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

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

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

答案 1 :(得分:0)

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

print(equipment["armour"].name)
equipment["armour"].block()
print(equipment["weapon"].name)
equipment["weapon"].attacks()

答案 2 :(得分:0)

您的weapon.attacks方法没有明确的返回值,因此返回None。当您致电print(equipment["weapon"].attacks())时,您打印出的返回值为None。更改方法以返回"your " + self.name + " blocked " + str(self.attack) + "\n"字符串,然后打印它,或者只是调用方法并让它进行打印,而不打印返回值。

基本上将最后一行更改为:

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