У меня есть цикл while для игры, которая по какой-то причине не работает - PullRequest
1 голос
/ 07 января 2012

У меня возникли проблемы с выполнением этого цикла во время работы, любая помощь / совет будут высоко оценены.

вот цикл (это не полная программа):

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 Ответ

9 голосов
/ 07 января 2012

Вместо:

while your_health or enemy_health >= 10:

Я думаю, что вы имеете в виду:

while your_health >= 10 or enemy_health >= 10:

То, что у вас есть, правильно Английский как в "while" (ваше здоровье или врагздоровья) больше десяти ", но синтаксис компьютерных языков немного более строг.

Для компьютера это означает" пока (ваше здоровье) или (здоровье врага больше десяти) "и, вВ контексте истинного значения многие языки будут просто рассматривать ненулевое значение как истинное.Python следует в соответствии с этим соглашением.

С 5.10 Булевы операции онлайновых документов Python:

В контексте булевых операций:а также, когда выражения используются операторами потока управления, следующие значения интерпретируются как ложные: False, None, числовой ноль всех типов, а также пустые строки и контейнеры (включая строки,кортежи, списки, словари, наборы и фрозенцец). Все остальные значения интерпретируются как истина.

(выделено жирным шрифтом).Таким образом, утверждение:

while your_health or enemy_health >= 10:

эффективно (при условии, что оно является числовым, и вы никогда не позволите ему упасть ниже нуля в вашем коде, разумные предположения с учетом его предполагаемого назначения):другими словами, цикл будет продолжаться до тех пор, пока у вашего игрока будет любое здоровья, а не десять или более очков здоровья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...