我有一个游戏循环,由于某种原因无法运作

时间:2012-01-06 23:54:12

标签: python loops while-loop

我在使用while循环工作时遇到问题,我们非常感谢任何帮助/建议。

这是循环(它不是完整的程序):

import random

while your_health or enemy_health >= 10:
    print("He is still attacking you.")
    print("you may either:"
          "a-dodge"
          "b-attack back")
    fight_choice_1_1 = input("What do you do?")

    if fight_choice_1_1 == "a":
        d20_1_1 = random.randint(1, 20)
        if d20_1_1 >= 10:
            print("you dodge the attack")
        elif d20_1_1 <= 10:
            your_health -= knife_damage
            print("you get hit")
            if your_health <= 0:
                print("you lose. :(")
            elif enemy_health <= 0:
                print("you win!")

    if fight_choice_1_1 == "b":
        d20_1_1 = random.randint(1, 20)
        if d20_1_1 >= 10:
            print("you get out of the way and hit him")
            enemy_health -= sword_damage
        elif d20_1_1 <= 10:
            print("he hits you, but you get a hit in too")
            your_health -= knife_damage
            enemy_health -= sword_damage
            print("you get hit")
            if your_health <= 0:
                print("you lose. :(")
            elif enemy_health <= 0:
                print("you win!")

1 个答案:

答案 0 :(得分:9)

而不是:

while your_health or enemy_health >= 10:

我认为你的意思是:

while your_health >= 10 or enemy_health >= 10:

你所拥有的是正确的英语,如同“(你的健康或敌人的健康状况)大于10”,但计算机语言的语法要严格得多。

对于计算机,这意味着“在(你的健康状况)或(敌人的健康状况大于10)”时,并且,在真值的情况下,许多语言只会将非零值视为真。 Python 遵循该惯例。

来自在线Python文档的5.10 Boolean operations

  

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false: False,None,数字零所有类型,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。 所有其他值都被解释为true。

(我的大胆)。所以声明:

while your_health or enemy_health >= 10:

是有效的(假设它是数字的,你永远不会让它在代码中低于零,给出预期目的的合理假设):

while (your_health > 0) or (enemy_health >= 10):

换句话说,只要您的玩家任何健康状况,而不是十个或更多健康点,循环就会继续。