Пользовательский ввод, если оператор дает неожиданный вывод - PullRequest
0 голосов
/ 21 сентября 2019

Я делаю небольшую текстовую игру, чтобы попрактиковаться в моих навыках Python.Я изо всех сил пытаюсь получить утверждение if, чтобы показать правильный результат, основанный на том, что мой пользователь вводит.выведите строку, связанную с этим номером.Вместо этого, когда я ввожу 1, он печатает 1, затем 2, а затем строку, связанную с номером 3 (опция 'else'), независимо от того, какой номер я наберу.Я не понимаю, почему?

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.1
1
2
You chose the Elven Sword

Process finished with exit code 0

Ответы [ 5 ]

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

Это не совсем так, как работает ввод в Python.

Вы правильно предположили, что input ("некоторый текст") напечатает этот текст в первой строке (и сохранит результат в переменной gun_choice), так почему вы думаете, что input (number) вернетлогическое значение, указывающее, был ли ввод этим числом?

Вместо этого он печатает число снова и возвращает пустую строку (потому что вы предположительно только что нажали Enter), поэтому первые два if - False, апрограмма переходит в другое, печатая «Выбран неверный ввод».

Результат вашего первого ввода будет сохранен в arms_choice, поэтому вы должны выполнить сравнение по этой переменной.

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

Вместо этого вы должны иметь:

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

if weapon_choice == '1':
    print("You chose the Axe of Might")
elif weapon_choice == '2':
    print("You chose the Sacred Crossbow")
elif weapon_choice == '3':
    print("You chose the Elven Sword")
else:
    print("Invalid input selected")

Причина этого в том, что input(..) приводит к анализу строки, поэтому нет необходимости иметь str(..) вокруг input(..).Кроме того, у вас должно быть условие, при котором вводится неверный ввод, чтобы пользователь был более четко уведомлен о основной причине ошибки.

(Обратите внимание на \n, который обозначает начало новоголиния)

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

Попробуйте:

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

if weapon_choice=='1':
    print("You chose the Axe of Might")
elif weapon_choice=='2':
    print("You chose the Sacred Crossbow")
else:
    print("You chose the Elven Sword")

Примечание:

  1. weapon_choice не нужно приводить к формату str, так как input() будет уже в строкеформатирование.
  2. Всякий раз, когда вы делаете input(1) или input(2), он в основном предлагает пользователю ввести другой ввод вместо проверки с условием.

Вывод:

michael@arkistarvh:/$ python text_game.py 
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.
3
You chose the Elven Sword
0 голосов
/ 21 сентября 2019

Вы можете попробовать этот скрипт

weapon_choice = str(input("You can choose between three weapons to defeat the beast!"
                   " Press 1 for Axe, 2 for Crossbow, 3 for Sword."))
if weapon_choice == '1':
    print("You chose the Axe of Might")
elif weapon_choice == '2':
    print("You chose the Sacred Crossbow")
else:
    print("You chose the Elven Sword")
0 голосов
/ 21 сентября 2019

if input(1) вызывает функцию input с аргументом 1, прежде чем использовать ответ для проверки, выполнять код в своем блоке или нет.Поскольку выполнение input просто выводит свой аргумент на терминал и возвращает все, что пользователь вводит в ответ, ваша программа ведет себя именно так, как предполагает ваш код.

Поскольку вы уже сохранили ответ пользователя на первый вопрос впеременная с именем weapon_choice, вы должны заменить if input(1) на if weapon_choice == '1' - и то же самое для остальных.

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