如何更新使用其他变量定义的变量?

2024-05-14 00:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个游戏,我有两个变量:

strength = 10
hp = 50 + (strength * 5)

我能够构建一个允许我更新strength变量以及其他属性的系统,但我假设hp会在我更新strength时更新,但事实并非如此

strength += skilladdnum
print("you now have", strength, "strength!")

strength更新时hp有什么方法更新吗


Tags: 方法you游戏属性系统havenowstrength
3条回答

在语言层面上,没有办法以某种方式将两个T变量“绑定”在一起,这样当另一个变量被更新时,其中一个变量就会自动更新,如果你这么想的话

正确的方法是指定一个“setter”函数,您可以调用该函数来更新强度,它还可以更新hp。 所以你可以吃点类似的东西

def set_strength(new_strength):
    return new_strength, 50 + (new_strength * 5)

strength, hp = set_strength(strength + skilladdnum)

但这有点难看,感觉不习惯。 一旦你进入了classesobject oriented programming,你就会有一个类Character,它会有字段(变量)hpstrength,在这个类的外部,你只会使用像set_strength这样的函数,在类Character内部,你会注意在所有地方正确地更新它们

如果我理解正确,您希望hp在更新strength时,通过hp = 50 + (strength * 5)公式进行更改

但是,当您第一次在hp = 50 + (strength * 5)行中赋值hp时,您正在初始化变量hp,使其成为给定状态下所述公式的结果hp在赋值后不会以任何方式与strength绑定

因此,您应该在每次更新strength时更新hp

您可以通过一个函数以“Pythonic”的方式完成这项工作,该函数同时更新这两个函数,使其成为主代码中的一行,并且更干净。这也可以用lambda或property以更高级的方式完成

HP将进入一个函数,您可以随时调用它的值:

strength = 50

def hp():
    return 50 + (strength * 5)

如果这在类中使用,则可以使用属性装饰器从字符中获取值:即character.strength、character.hp。这看起来很相似:

class Hero:

    def __init__(self, strength):
        self.strength = strength
    
    @property
    def hp(self):
        return 50 + (self.strength * 5)

相关问题 更多 >