运动员治疗功能不起作用

时间:2013-09-10 08:10:53

标签: python function if-statement

我试图制作一个让玩家获得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.

4 个答案:

答案 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。