为什么此脚本在输出中打印出无关的“无”

时间:2012-11-10 19:44:08

标签: python python-2.7

我写了一个简单的脚本来帮助我更好地理解使用类。它为游戏生成随机字符。我定义了该对象,然后在该对象上调用一个函数来打印出生成的字符。在印刷块的末尾,有一个无关的“无”,我不确定它的来源以及为什么要打印。这是示例输出:

ted
Strength  : 20
Dexterity : 17
Hit Points: 100
Aura      : 100
Weapon    :  
Spell     :  
Item      :  
Element   :  
--------------------
None

在我的代码中,player.stats()的最后一行是print "-" * 20,显示在“无”上方。这是定义对象的代码:

class Player(object):

def __init__(self, name):
    self.name = name
    self.strength = randint(15, 20)
    self.dexterity = randint(15, 20)
    self.hit_points = 100
    self.aura = 100
    self.weapon = " "
    self.spell = " "
    self.item = " "
    self.element = " "

def stats(self):
    print "\n"
    print self.name
    print "Strength  : %d" % self.strength
    print "Dexterity : %d" % self.dexterity
    print "Hit Points: %d" % self.hit_points
    print "Aura      : %d" % self.aura
    print "Weapon    : %s" % self.weapon
    print "Spell      : %s" % self.spell
    print "Item      : %s" % self.item
    print "Element   : %s" % self.element
    print "-" * 20

然后使用以下对象进行实例化:

name = raw_input("Name your character: ")

player = Player(name)
print player.stats()

如有必要,可以阅读完整的代码here at Pastebin

3 个答案:

答案 0 :(得分:5)

print player.stats()

是罪魁祸首。 player.stats() == None

你只想:

player.stats()

您最好为自己的职能player.printStats()命名。


另一种选择是让它返回一个字符串:

def stats(self):
    return '\n'.join([
        self.name
        "Strength  : %d" % self.strength,
        "Dexterity : %d" % self.dexterity,
        "Hit Points: %d" % self.hit_points,
        "Aura      : %d" % self.aura,
        "Weapon    : %s" % self.weapon,
        "Spell     : %s" % self.spell,
        "Item      : %s" % self.item,
        "Element   : %s" % self.element,
        "-" * 20
    ])

然后print player.stats()会按预期行事

答案 1 :(得分:3)

stats()方法不会返回任何内容。不返回任何内容的函数的计算结果为None。这就是你打印的内容。

因此,不要打印函数的返回值。打电话吧。现在,您应该将函数重命名为printStats()以明确其功能。然后就这样称呼它:

def printStats(self):
    ....

player = Player(name)
player.printStats()

命名是编程中非常重要的一部分。一个稍微差一点的名字选择经常会导致这样的混乱。

答案 2 :(得分:2)

您打印player.stats()的返回值:

print player.stats()

.stats()方法没有return语句。如果没有给出return语句,python中任何函数或方法的默认返回值是None

>>> def foo():
...     pass
...
>>> print foo()
None

在方法调用之前删除print,或让stats()返回要打印的字符串,而不是在方法中执行所有打印。