В то время как условие цикла не вызвано пользовательским вводом - PullRequest
0 голосов
/ 21 сентября 2019

Я работаю над небольшой игрой, чтобы поработать над моими навыками Python.Как вы можете видеть ниже, я застрял при продолжении программы после того, как пользователь введет ошибочное значение.

Одна из вещей, которые я попробовал, это избавиться от цикла while и обернуть оператор if в рекурсивную функцию.Тем не менее, я не уверен, что это правильный путь, и сейчас он выше моего уровня.Любые мысли будут очень приветствоваться!

print("Greetings, weary wanderer.")
print("Welcome to Freyjaberg. Choose your weapon.")
#user able to select from list, needs input and to check which they pick

weapon_choice = (input("You can choose between three weapons to defeat the beast!"
                   " Press 1 for Axe, 2 for Crossbow, 3 for Sword."))

while True:
    weapon_choice <= '4'
    if weapon_choice=='1':
        print("You chose the Axe of Might")
        break
    elif weapon_choice=='2':
        print("You chose the Sacred Crossbow")
        break
    elif weapon_choice=='3':
        print("You chose the Elven Sword")
        break
    else:
        weapon_choice >= '4'
        print("Wanderer, there is no such weapon. Please choose from the ones available.")
        input("You can choose between three weapons to defeat the beast! "
              "Press 1 for Axe, 2 for Crossbow, 3 for Sword.")

Если я введу 1, 2 или 3, это прекрасно работает!

Greetings, weary wanderer.
Welcome to Freyjaberg. Choose your weapon.
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.2
You chose the Sacred Crossbow
Now you must enter the first dungeon. Prepare yourself!

Process finished with exit code 0

Если я введу 4 или выше, это действительно показывает правосообщение об ошибке я ожидаю.Все идет нормально.Затем он снова подсказывает мне (как и ожидалось).Но когда я набираю 1, 2 или 3 сейчас, он не понимает и продолжает.Он просто говорит мне, что это неправильно.

Greetings, weary wanderer.
Welcome to Freyjaberg. Choose your weapon.
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.4
Wanderer, there is no such weapon. Please choose from the ones available.
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.1
Wanderer, there is no such weapon. Please choose from the ones available.
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Ввести пользовательский ввод в цикл while:

while True:
    weapon_choice = (input("You can choose between three weapons to defeat the beast!"
               " Press 1 for Axe, 2 for Crossbow, 3 for Sword."))
    try:
        weapon_choice = int(weapon_choice)
    except Exception as e:
        print ("Please enter a valid number!")
        continue
    if weapon_choice==1:
        print("You chose the Axe of Might")
        break
    elif weapon_choice==2:
        print("You chose the Sacred Crossbow")
        break
    elif weapon_choice==3:
        print("You chose the Elven Sword")
        break
    else:
        print("Wanderer, there is no such weapon. Please choose from the ones  available.")
0 голосов
/ 21 сентября 2019

Вы должны переоценить переменную weapon_of_choice внутри цикла while, как в weapon_of_choice = input("You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.").Вызов input запрашивает только ввод пользователя и возвращает введенное значение, вам нужно решить, что с ним делать.

...