Использовать поток исключений.
def ask_question(prompt):
"""Asks a question, translating 'T' to True and 'F' to False"""
response = input(prompt)
table = {'T': True, 'F': False}
return table[response.upper()] # this allows `t` and `f` as valid answers, too.
def ask_multiple():
questions = [
"Do you fruits?",
"Do you apples?",
# and etc....
]
try:
for prompt in questions:
result = ask_question(prompt)
except KeyError as e:
pass # this is what happens when the user enters an incorrect response
Поскольку table[response.upper()]
повысит KeyError
, если response.upper()
не равно ни 'T'
, ни 'F'
, вы можете поймать его ниже и использовать этот поток, чтобы вывести вас из цикла.
Другой вариант - написать валидатор, который заставляет пользователя правильно ответить.
def ask_question(prompt):
while True:
response = input(prompt)
if response.upper() in ['T', 'F']:
break
return True if response.upper() == 'T' else False