Python 为什么这个脚本会打印一个无关的';无';在输出中

Python 为什么这个脚本会打印一个无关的';无';在输出中,python,python-2.7,Python,Python 2.7,我已经编写了一个简单的脚本来帮助我更好地理解类的使用。它为游戏生成一个随机角色。我定义了这个对象,然后调用该对象上的一个函数来打印生成的字符。在印刷版的末尾,有一个无关的“无”,我不知道它来自哪里,也不知道它为什么被印刷。以下是示例输出: ted Strength : 20 Dexterity : 17 Hit Points: 100 Aura : 100 Weapon : Spell : Item : Element : --------

我已经编写了一个简单的脚本来帮助我更好地理解类的使用。它为游戏生成一个随机角色。我定义了这个对象,然后调用该对象上的一个函数来打印生成的字符。在印刷版的末尾,有一个无关的“无”,我不知道它来自哪里,也不知道它为什么被印刷。以下是示例输出:

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()
如有必要,可以阅读完整的代码

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

是罪魁祸首
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()
将按预期运行

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

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

def printStats(self):
    ....

player = Player(name)
player.printStats()
命名是编程中非常重要的一部分。稍差的名称选择通常会导致类似的混乱。

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

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

def printStats(self):
    ....

player = Player(name)
player.printStats()

命名是编程中非常重要的一部分。稍差的名称选择通常会导致类似的混淆。

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

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

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

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

打印
player.stats()的返回值。

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

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

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

这很有启发性,并向我展示了知识中的漏洞。谢谢。这很有启发性,让我看到了我知识上的漏洞。谢谢。啊,我明白了。这将是一个更好的函数名称。我不熟悉
join
,因为培训中还没有提到这一点。使用它有什么好处?
join
是将一组字符串连接在一起的更有效的方法。使用一堆
+
s会导致二次运行时--
join
不会这样做。@VinBreau:
glue.join([a,b,c])
a+glue+b+glue+c
一样,这在我正在从事的项目中非常有用。@sammusmann这并不是主要问题。
join
的最大好处是可读性和清晰性。啊,我明白了。这将是一个更好的函数名称。我不熟悉
join
,因为培训中还没有提到这一点。使用它有什么好处?
join
是将一组字符串连接在一起的更有效的方法。使用一堆
+
s会导致二次运行时--
join
不会这样做。@VinBreau:
glue.join([a,b,c])
a+glue+b+glue+c
一样,这在我正在从事的项目中非常有用。@sammusmann这并不是主要问题。
join
的最大好处是可读性和清晰性。我明白了,因为在调用该函数时,打印是由函数的定义执行的。如果我是从对象内部打印变量,例如在
打印玩家统计数据.武器中,我只需要
打印
。是的,没错。这正是你在函数体中所做的。我明白了,因为在调用该函数时,打印是由函数的定义执行的。如果我是从对象内部打印变量,例如在
打印玩家统计数据.武器中,我只需要
打印
。是的,没错。这正是你在函数体中所做的。