【问题标题】:How to not print "None" [duplicate]如何不打印“无”[重复]
【发布时间】:2018-03-13 17:40:46
【问题描述】:

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

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())

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

【问题讨论】:

  • 攻击和阻止不返回任何内容,因此打印他们的调用 print none。

标签: python nonetype


【解决方案1】:

在 python 中,每个函数都会返回一个值。如果您不指定,它将返回 None。如果您在其上打印函数调用,它将打印无。

def none_func():
    pass

print(none_func())
None

在您的代码中,您基本上是在做同样的事情。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 然而,这是每个方法应该返回一个值而不是打印一个值本身的原因。调用者总是可以决定是否打印返回值;调用者不能“取消打印”一个值。
    【解决方案3】:

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

    基本上把你的最后一行改成这样:

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

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多