0

我正在尝试制作一个函数,该函数将玩家的 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

4 回答 4

4

只需将已治愈的生命值加到当前生命值上,然后返回该值和最大生命值中的较小值。

def heal(hp, max_hp, healed):
    return min(hp + healed, max_hp)
于 2013-09-10T08:16:53.823 回答
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我没有深入分析的奇怪情况之外,因为没有必要 - 只需使用我上面提供的代码即可。

于 2013-09-10T08:15:09.687 回答
0

此代码可能有效:

def heal(hp,max_hp,heal):
    if hp + heal > max_hp:
        return (max_hp)
    else:
        return (hp + heal)

新的生命值 = 当前生命值 + 治疗量,但不能超过最大生命值,所以我们将当前生命值 + 生命值与最大生命值进行比较,然后返回当前生命值加上生命值的总生命值,如果大于最大生命值则返回最大生命值。

于 2013-09-10T08:22:56.763 回答
0

先给hp加上heal,然后如果超过max_hp,返回max_hp:

def heal(hp,max_hp,heal):
    hp = hp + heal
    if hp > max_hp:
        return max_hp
    else:
        return hp
于 2013-09-10T08:17:15.817 回答