Как сделать цикл while по всему коду.(Python) - PullRequest
0 голосов
/ 27 мая 2019

В настоящее время я делаю текстовую игру о том, как пройтись по заброшенному дому, найти предметы для защиты монстров и все такое.Мне нужна система с циклом while, где, если ваше здоровье становится ниже 0 (health=20), код заканчивается словами: "You died to (insert event here)".Я новичок в программировании на python, поэтому я не совсем уверен, как его кодировать.

Я попытался настроить цикл while с помощью оператора if, который проверяет, находится ли здоровье ниже 0. Этонаходится в верхней части кода ниже переменных и над функциями

health = 20 #variable

while ( health < 0):
    print("You died to [insert event here]\n")
    break

Вместо того, чтобы что-либо делать, он полностью игнорирует это.Я не уверен, как бы я поместил код в функцию, потому что мне все еще нужно использовать «глобальный» для импорта переменных в них.Если вы знаете ответ на эту проблему, или вы знаете альтернативный код для решения этой проблемы, пожалуйста, сообщите мне.Опять же, я новичок в python, поэтому, пожалуйста, объясните так, как я могу понять.

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

Вы можете написать это как:

health = 20
while health > 0:
    print("You died to XYZ")
    health -= 1

Это напечатает "You died to XYZ" 20 раз, так как цикл будет работать 20 раз от здоровья = 20 до здоровья = 0.

Но, хотя здоровье <0 будет считать, что это нулевой результат, потому что цикл понимания Python работает до тех пор, пока здоровье не достигнет нуля. </p>

0 голосов
/ 27 мая 2019

Я не думаю, что это хорошее место, чтобы подробно объяснить, почему этот код не работает.Вместо этого рассмотрим следующую игру в качестве примера:

def adventure_around(pit_limit = 5, initial_position = 0):
    position = initial_position
    lived = False
    print("Try not to die, noob!")
    while position < pit_limit:
        direction = input("Which way would you like to go? [n,s,e,w, or q]:")
        if direction not in ['n', 's', 'e', 'w', 'q']:
            print("Please choose a direction.")
            continue
        if direction == "n":
            position += 1
        if direction == 's':
            position -= 1
        if direction == "q":
            print("Coward! (You lived, though.)")
            lived = True
            break
    if not lived:
        print("You fell into a pit and died while bravely wandering about! RIP")

adventure_around()

Передайте это вашему интерпретатору python и поэкспериментируйте с ним.(Минутки веселья!) Тогда изучайте код.(Google также не обманывает!) Что делает ключевое слово while?Как информация из внешнего кода передается в функцию?Почему есть два способа выхода из цикла while?Это была хорошая идея?Есть ли лучший способ обновить позицию?lived нужно было инициализировать?Почему или почему нет?Идите вперед и измените его в соответствии с вашими целями, если можете.Хотя я не думаю, что лучше всего использовать переменную global health, попробуйте изменить код так, чтобы он использовал ключевое слово global для ссылки на глобальную переменную health.Какие сообщения об ошибках вы получили во время работы?Как бы вы справились с этим в гораздо большей игре с десятками, сотнями или тысячами файлов?

Хорошая охота!

0 голосов
/ 27 мая 2019

Во-первых, ключевое слово global предназначено только для того, чтобы дать функции запись доступ к переменной. Они всегда могут читать переменные, которые были объявлены вне области действия любого другого класса / функции.

Я думаю, вам нужно следующее:

  • проверка здоровья
  • запустите остаток кода
  • проверка здоровья
  • запустите остаток кода

до бесконечности ...

То, что вы сейчас делаете, как описано, это:

  • проверка здоровья
  • запустите остаток кода

Как вы собираетесь это сделать:

while(health > lower_limit):
    [the rest of the code]

print("you died") # game over

Таким образом, «пока здоровье превысит нижний предел, [остальная часть кода] будет работать».

...