我试图制作一个让玩家获得hp,max hp和ammount综合并恢复新hp的功能,但不会返回高于最大hp的新hp。我必须在某个地方做错了数学,但不知道在哪里。我的第一次尝试:
def heal(hp,max_hp,heal):
if hp > heal:
return (max_hp + heal)
else:
overflow = heal-max_hp
new_hp = hp - overflow
return (new_hp)
hp = heal(10,30,20)
print hp #prints 20, should print 30
hp = heal(10,30,10)
print hp #prints 30, should print 20
hp = heal(10,20,30)
print hp #prints 0, should print 20.
我的第二次尝试:
def heal(hp,max_hp,heal):
if hp > heal:
return (max_hp + heal)
else:
overflow = max_hp - heal
new_hp = hp - overflow
return (new_hp)
hp = heal(10,30,20)
print hp #prints 0, should print 30
hp = heal(10,30,10)
print hp #prints -10, should print 20
hp = heal(10,20,30)
print hp #prints 20, should print 20.
答案 0 :(得分:4)
只需将治疗的生命值添加到当前生命值,然后返回该值中的较小值和最大生命值。
def heal(hp, max_hp, healed):
return min(hp + healed, max_hp)
答案 1 :(得分:2)
这应该这样做。只需添加治疗值,无论如果它们超过它,都会将命中点恢复到最大值:
def heal (hp, max_hp, heal):
hp = hp + heal
if hp > max_hp:
hp = max_hp
return hp
对于它的价值,如果只是因为它们包含:
,那么您的解决方案都是有缺陷的return (max_hp + heal)
应该有没有的情况,你返回的内容大于max_hp
。除了奇怪的if
条件之外,我没有深入分析,因为没有必要 - 只使用我上面提供的代码。
答案 2 :(得分:0)
首先为hp添加治疗,如果超过max_hp,则返回max_hp:
def heal(hp,max_hp,heal):
hp = hp + heal
if hp > max_hp:
return max_hp
else:
return hp
答案 3 :(得分:0)
此代码可能有效:
def heal(hp,max_hp,heal):
if hp + heal > max_hp:
return (max_hp)
else:
return (hp + heal)
新的hp =当前的hp +治愈,但不能超过最大hp,所以我们将当前的hp +治疗与最大hp进行比较,然后返回当前hp加上治疗的总hp,如果它们大于hp,则返回最大hp max hp。