2013-05-19 7 views
2

Итак, я искал почти каждую перестановку слов «строка», «python», «validate», «user input» и т. Д., Но мне еще не приходило в голову решение, которое работает для меня.Проверка строки ввода пользователя в Python

Моя цель - предложить пользователю указать, хотите ли они начать другую транзакцию, используя строки «да» и «нет», и я решил, что сравнение строк будет довольно простым процессом в Python, но что-то просто не работает правильно. Насколько я понимаю, я использую Python 3.X, поэтому вход должен воспринимать строку без использования сырого ввода.

Программа всегда будет отбрасывать недопустимый ввод, даже при вводе «да» или «нет», но действительно странно, что каждый раз, когда я ввожу строку a> 4 символа в длину или значение int, он будет проверять это как действительный положительный ввод и перезапуск программы. Я не нашел способ получить действительный отрицательный ввод.

endProgram = 0; 
while endProgram != 1: 

    #Prompt for a new transaction 
    userInput = input("Would you like to start a new transaction?: "); 
    userInput = userInput.lower(); 

    #Validate input 
    while userInput in ['yes', 'no']: 
     print ("Invalid input. Please try again.") 
     userInput = input("Would you like to start a new transaction?: ") 
     userInput = userInput.lower() 

    if userInput == 'yes': 
     endProgram = 0 
    if userInput == 'no': 
     endProgram = 1 

Я также попытался

while userInput != 'yes' or userInput != 'no': 

Я бы очень признателен не только помочь с моей проблемой, но если у кого есть какая-либо дополнительная информация о том, как Python обрабатывает строки, которые были бы великами.

Извините, если кто-то еще задал такой вопрос, но я сделал все возможное, чтобы выполнить поиск.

Спасибо всем!

~ Dave

ответ

8

Вы проверяете, если пользовательский ввод являетсяyes или no. Добавить not:

while userInput not in ['yes', 'no']: 

Ever чуть-чуть быстрее и ближе к умыслу, использовать набор:

while userInput not in {'yes', 'no'}: 

Что вы использовали это userInput in ['yes', 'no'], который True если userInput либо равно 'yes' или 'no' ,

Далее используйте логическое значение, чтобы установить endProgram:

endProgram = userInput == 'no' 

Поскольку вы уже убедились, что userInput либо yes или no, нет необходимости проверять на yes или no снова, чтобы установить переменную флаг.

+0

Ничего себе. Такая простая ошибка. Спасибо за быстрый ответ. Полагаю, иногда вам просто нужна вторая пара глаз, чтобы разглядеть вещи. – user2398870

+0

Как примечание, вы могли бы помочь мне узнать, почему мой оригинальный метод while UserInput! = 'Yes' или userInput! = 'No': не работал? – user2398870

+0

@ user2398870: Если 'userInput' установлен в' 'yes'', то'! = 'No'' является True. Это не то, что вы хотели проверить. :-) Изменение 'или' на 'и 'приведет к тому, что эта версия будет работать. –

1
def transaction(): 

    print("Do the transaction here") 



def getuserinput(): 

    userInput = ""; 
    print("Start") 
    while "no" not in userInput: 
     #Prompt for a new transaction 
     userInput = input("Would you like to start a new transaction?") 
     userInput = userInput.lower() 
     if "no" not in userInput and "yes" not in userInput: 
      print("yes or no please") 
     if "yes" in userInput: 
      transaction() 
    print("Good bye") 

#Main program 
getuserinput() 
Смежные вопросы