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

The*_*nac 1 python loops while-loop

我在制作这个循环工作时遇到了麻烦,任何帮助/建议都会非常感激.

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

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!")
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 9

而不是:

while your_health or enemy_health >= 10:
Run Code Online (Sandbox Code Playgroud)

我想你的意思是:

while your_health >= 10 or enemy_health >= 10:
Run Code Online (Sandbox Code Playgroud)

你所拥有的是正确的英语,因为"虽然(你的健康或敌人的健康)大于10",但计算机语言的语法更加严格.

对于计算机,这意味着"在(你的健康)或(敌人的健康状况大于10)",并且,在真值的情况下,许多语言将简单地将非零值视为真.Python 确实遵循该约定.

5.10在线Python文档的布尔运算:

在布尔运算,以及当表达式通过控制流语句使用的情况下,下面的值被解释为假:假,无,数字零所有类型的,和空字符串和容器(包括字符串,元组,列表,字典,集和frozensets).所有其他值都被解释为true.

(我的大胆).声明如下:

while your_health or enemy_health >= 10:
Run Code Online (Sandbox Code Playgroud)

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

while (your_health > 0) or (enemy_health >= 10):
Run Code Online (Sandbox Code Playgroud)

换句话说,循环将只要你的球员有继续任何健康,而不是十个或更多的健康加分.