Вам нужно будет изменить разрыв внутри вашей функции на возврат, и вам нужно иметь оператор else
в случае, если пользователь не предоставил вам правильный ввод. Наконец, вам нужно включить вызов в while loop
в оператор if.
Это позволит вам разорвать оператор while, если игрок войдет в нужную команду, если он не попросит снова. Я также обновил вашу функцию yn
, чтобы позволить пользователю использовать символы нижнего и верхнего регистра, а также да и нет.
def yn(input, yes, no):
input = input.lower()
if input == 'y' or input == 'yes':
print (yes)
return 1
elif input == 'n' or input == 'no':
print (no)
return 2
else:
return 0
name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, %s. Are you ready for your adventure?' % name
while True:
ready = raw_input('y/n ')
if yn(ready, 'Good, let\'s start our adventure!',
'That is a real shame.. Maybe next time') > 0:
break
Идея этого довольно проста. Функция yn
имеет три состояния. Любой пользователь ответил да, нет или недействителен. Если ответ пользователя есть либо «да», либо «нет», функция вернет 1 для «да», а «2 - нет». И если пользователь не предоставляет действительный ввод, например. пустое пространство, оно вернет 0.
Внутри цикла while True:
мы завершаем функцию yn ('....', '....') с if statement
, которая проверяет если функция yn
возвращает число, большее 0. Поскольку yn
вернет 0, если пользователь предоставит нам действительный ввод и 1 или 2 для допустимого ввода.
Как только мы получим действительный ответ от yn
мы называем break, который останавливает while loop
, и мы закончили.