我最近开始使用Python 3.7学习Python语言。 我正在使用文本rpg的基础来学习Python的知识,因为这是我感兴趣的东西。我指定了该类,并将其设置为打印“ Stats”类,以便可以更改值稍后通过用户输入。控制台正在打印我想要的统计信息,但在数字后添加了“无”。有人可以解释为什么会这样,我应该如何解决?如果您只是要在没有解释的情况下发布代码,请不要...我毕竟是在努力学习:)
class Stats:
def __init__(self, strength=0, dexterity=0, wisdom=0, intelligence=0):
self.strength = strength
self.dexterity = dexterity
self.wisdom = wisdom
self.intelligence = intelligence
def getStats(self):
print(self.strength, self.dexterity, self.wisdom, self.intelligence)
def statinput(self, value1, value2, value3, value4):
self.value1 = strength_input
self.value2 = dexterity_input
self.value3 = wisdom_input
self.value4 = intelligence_input
if strength_input:
self.strength = self.strength + value1
if dexterity_input:
self.dexterity = self.dexterity + value2
if wisdom_input:
self.wisdom = self.wisdom + value3
if intelligence_input:
self.intelligence = self.intelligence + value4
player = Stats(1, 1, 1, 1)
print(player.getStats())
strength_input = int(input('Enter a value for strength.'))
dexterity_input = int(input('Enter a value for dexterity.'))
wisdom_input = int(input('Enter a value for wisdom.'))
intelligence_input = int(input('Enter a value for intelligence.'))
player_stat_choice = player.statinput(strength_input, dexterity_input,
wisdom_input, intelligence_input,)
print(player.getStats())
所有上述代码功能,但正在向控制台输出以下内容:
1 1 1 1
None
Enter a value for strength.2
Enter a value for dexterity.2
Enter a value for wisdom.2
Enter a value for intelligence.2
3 3 3 3
None
我不确定扩展此位后,“ None”部分是否会在以后影响任何事情,所以我现在想处理:)谢谢您的时间。 / p>
答案 0 :(得分:4)
为什么getStats
打印统计信息而不是返回统计信息?该方法不返回任何内容,因此它隐式返回None
,这正是print(player.getStats())
打印的内容
最好将类定义更改为:
def getStats(self):
return (self.strength, self.dexterity, self.wisdom, self.intelligence)
答案 1 :(得分:1)
player.getStats()
打印该值并返回无。如果您将其命名为print(player.getStats())
,则getStats方法将输出值,并显示返回值(无)。我认为您希望使用player.getStets()
而不是print(player.getStats())
。
答案 2 :(得分:1)
def getStats(self):
print(self.strength, self.dexterity, self.wisdom, self.intelligence)
在类方法中使用print()打印类值是一个坏主意。 有两种更好的方法: 1)
def get_stats(self):
return f"{self.strength}, {self.dexterity}, {self.wisdom}, {self.intelligence}"
然后您可以像这样打印玩家统计信息:
print(player.get_stats())
但是请看看Python PEP8 code style。并正确命名函数和方法。
2)
def __str__(self):
return f"{self.strength}, {self.dexterity}, {self.wisdom}, {self.intelligence}"
替换过时的方法getStats()并使用dunder方法 str () 然后,您可以像这样轻松地打印玩家统计信息
print(player)
答案 3 :(得分:1)
这是因为Stats.getStats
会打印值,而不返回它们。如果函数没有返回值,它将隐式返回None
,因此您在打印它们时将返回None
。
您应该只致电getStats
player.getStats()
#instead of print(player.getStats())
或者返回统计信息而不是打印它们:
def getStats(self):
return self.strength, self.dexterity, self.wisdom, self.intelligence
然后这样称呼它:
print(*player.getStats())
答案 4 :(得分:0)
print(player.getStats())
打印方法getStats
返回的内容,该值是None
的值,因为没有return语句(默认情况下始终返回None
)。
在方法内部打印统计信息,可以将其视为调用getStats
方法的“副作用”。
您应该:
修改方法,使其返回那些值:
def getStats(self):
return self.strength, self.dexterity, self.wisdom, self.intelligence
# later down the code...
print(*player.getStats())
如果希望将print语句保留在其中,则只需调用getStats
方法:
def getStats(self):
print(self.strength, self.dexterity, self.wisdom, self.intelligence)
# later down the code...
player.getStats()
我会选择第一个选项-否则,您有一个名为 get stats 的方法,该方法实际上不会获取stats -它只是打印出来。