打印类结果在python中返回“ none”

时间:2019-09-30 16:07:42

标签: python

我最近开始使用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>

5 个答案:

答案 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 -它只是打印出来。