如何更新使用另一个变量定义的变量?



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

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

我能够构建一个允许我更新strength变量以及其他属性的系统,但我假设hp会在我更新strength时更新,这不是情况。

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

strength更新时,hp是否有办法更新?

在语言层面上,没有办法以某种方式自然地"联系在一起";两个变量,如果你想的话,其中一个会在每次更新时自动更新。

正确的方法是指定一个"setter"函数,你会调用它来更新强度它也会更新hp。比如你可以输入

def set_strength(new_strength):
return new_strength, 50 + (new_strength * 5)
strength, hp = set_strength(strength + skilladdnum)

,但这有点难看,感觉不习惯。一旦你进入类和面向对象编程,那么你将有例如类Character,它将有字段(变量)hpstrength,从这样的类的外部,你将只使用像set_strengthCharacter类内部的函数,你会注意在所有地方正确地更新它们。

HP将放在一个函数中,您可以在需要它的值时调用它:

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

如果在类中使用,你可以使用属性装饰器从字符中获取值:也就是character。力量,character.hp。它看起来很像:

class Hero:
def __init__(self, strength):
self.strength = strength

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

如果我理解正确,您希望hpstrength更新时更改,公式为hp = 50 + (strength * 5)

然而,当您第一次在hp = 50 + (strength * 5)行中赋值hp时,您正在将变量hp初始化为上述公式在给定状态下的结果。赋值后,hp不以任何方式与strength绑定。

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

你可以用一种"python"的方式来完成,用一个函数将两者一起更新,使其在主代码中成为一行,并且更干净。这也可以通过lambda或property以更高级的方式完成。

最新更新