我用了字典
LEVEL_XP = {
0: 0,
1: 5,
2: 13,
3: 20
}
和代码
new_level = int(level)
for level_on, xp_needed in LEVEL_XP.items():
i = LEVEL_XP[xp_needed]
if 0 <= i:
if xp != i:
print('nothing')
break
else:
new_level = int(level_on) + 1
print('level up')
break
else:
new_level = int(level)
break
我可以从数据库调用level
和xp
,它工作得很好。问题是在我达到13
xp后,我没有升级到2
及其打印nothing
。我发现xp_needed
只调用0
的原因,这是字典中的第一个值。我怎么能让代码考虑下一个值是13
在字典当我是1
级别?如果我喜欢将整个xp擦除为0并重新启动1
级别,该怎么办?因此代码需要将13
称为xp_needed
,而不是5
?
如何让代码考虑下一个值…
?
使用下面的while
循环。它利用了经验值随等级的单调性。我们可以非常有效地探测每个[level + 1]
元素,不必去拜访"tons"你提到的水平。我们只检查可能相关的水平。
class Character:
def __init__(self, level=0, xp=0):
self.level = level
self.xp = xp
def __str__(self):
return f'<Character: level {self.level}, xp {self.xp}>'
def adjust_to_increased_experience(self, new_xp):
assert new_xp >= self.xp
assert new_xp >= LEVEL_XP[self.level]
while LEVEL_XP.get(self.level + 1, math.inf) <= new_xp:
self.level += 1
self.xp = new_xp