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
的最大好处是可读性和清晰性。我明白了,因为在调用该函数时,打印是由函数的定义执行的。如果我是从对象内部打印变量,例如在打印玩家统计数据.武器中,我只需要打印
。是的,没错。这正是你在函数体中所做的。我明白了,因为在调用该函数时,打印是由函数的定义执行的。如果我是从对象内部打印变量,例如在打印玩家统计数据.武器中,我只需要打印
。是的,没错。这正是你在函数体中所做的。