Python 3: создание функции для выбора пользователя - PullRequest
0 голосов
/ 25 февраля 2012

Я пытаюсь создать фрагмент кода в Python 3, который позволяет пользователю выбирать между несколькими вариантами.Я пробовал это несколькими способами, но ни один из них не подходит для этого.

Пример попытки:

usr_input = input("Input: ")
while (usr_input != '1') | (usr_input != '2'):
    if usr_input == '1':
        search()
    elif usr_input == '2':
        sys.exit()

Проблема в том, что скрипт зависает после ввода неверной команды.

Может кто-нибудь дать мне правильный способ сделать это?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2012

Здесь есть несколько неправильных вещей.

Во-первых, вы получаете usr_input только один раз, вне цикла.Если это неправильный выбор, вы не даете пользователю возможность изменить его выбор: вы просто зацикливаетесь.Вам нужно будет выполнить input в цикле.

Во-вторых, ваше логическое условие неверно.Это эквивалентно выражению «x не является ИЛИ, а не b», что является всегда истинным, поскольку, даже если это a, оно все равно не bЛучший способ сказать, что это not in ['1', '2'].

Собрать их вместе:

usr_input = ''
while usr_input not in ['1', '2']:
    usr_input = input("Input: ")
    ... etc... 
1 голос
/ 25 февраля 2012

Вы хотите использовать цикл while, чтобы продолжать запрашивать ввод, когда пользователь неправильно что-то вводил.Внутри вас цикл while, usr_input никогда не меняется, поэтому он просто продолжает цикл.

У вас также есть другая проблема: вы должны продолжать цикл только в том случае, если usr_input не 1 и не 2. не 1 или не 2 всегдаtrue (если это 2, это не 1, а если это 1, это не 2).

usr_input = input("Input: ")
while (usr_input != '1') and (usr_input != '2'):
    usr_input = input("Input: ")

if usr_input == '1':
    search()
elif usr_input == '2':
    sys.exit()
0 голосов
/ 25 февраля 2012

input() выполняет эквивалент eval(raw_input()), поэтому, если ваш пользователь введет что-то синтаксически некорректное, он выдаст исключение SyntaxError. Смотрите документы: http://docs.python.org/library/functions.html#input

Вы можете улучшить свой код, перехватив SyntaxError и обработав его, чтобы он не приводил к краху вашей программы.

...