2015-09-13 3 views
2

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

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

Я предполагаю, что мне придется изменить «return main()» на что-то другое.

condition = input("What is the condition of the phone(New or Used)?") 
if condition not in ["New", "new", "Used", "used"]: 
    print("Invalid input") 
    return main() 

gps = input("Does the phone have gps(Yes or No)?") 
if gps not in ["Yes", "yes", "No", "no"]: 
    print("Invalid input") 
    return main() 
+0

взгляните на [while loop] (https://wiki.python.org/moin/WhileLoop). Примечание: в примере он использует 'raw_input()', который для 'python 2.7'. Вы * shoud * используйте 'input()', если у вас есть 'python 3.4' –

ответ

1

Вы можете обобщать код, чтобы использовать сообщение оперативная и подтверждающая функция:

def validated_input(prompt, validate): 
    valid_input = False 
    while not valid_input: 
     value = input(prompt) 
     valid_input = validate(value) 
    return value 

, например:

>>> def new_or_used(value): 
...  return value.lower() in {"new", "used"} 

>>> validate_input("New, or used?", new_or_used) 

Или, проще, но менее гибкое, переходит в допустимых значениях:

def validated_input(prompt, valid_values): 
    valid_input = False 
    while not valid_input: 
     value = input(prompt) 
     valid_input = value.lower() in valid_values 
    return value 

и пользу:

>>> validate_input("New, or used?", {"new", "used"}) 

Можно даже использовать действительные значения для создания запрос на ввод:

def validated_input(prompt, valid_values): 
    valid_input = False 
    while not valid_input: 
     value = input(prompt + ': ' + '/'.join(valid_values)) 
     valid_input = value.lower() in valid_values 
    return value 

Который дает подсказку:

>>> validate_input("What is the condition of the phone?", {"new", "used"}) 
What is the condition of the phone?: new/used 
1

Хорошее чтение о Control Flows.

Также в вашем случае вы можете использовать strip() и lower() для пользовательских входов.

>>> 'HeLLo'.lower() 
'hello' 
>>> ' hello '.strip() 
'hello' 

Вот решение для Python 3:

while True: 
    condition=input("What is the condition of the phone(New or Used)?") 
    if condition.strip().lower() in ['new', 'used']: 
     break 
    print("Invalid input") 

while True: 
    gps=input("Does the phone have gps(Yes or No)?") 
    if gps.strip().lower() in ['yes','no']: 
     break 
    print("Invalid input") 
+0

Не пишите так. Это заставляет вас думать в негативах и дублировать код. Напишите 'while True' и' break', если ввод хорош. – Veky

+0

Я всегда думаю в негативах. Что с этим не так? :-) Но я согласен, что он делает дубликат кода, позвольте мне уточнить мой ответ. – Sait

3

Вы можете сделать метод, чтобы проверить его в цикле:

def check_input(values, message): 
    while True: 
     x = input(message) 
     if x in values: 
      return x 
     print "invalid values, options are " + str(values) 
Смежные вопросы