Python, вырваться из цикла через функцию [duplicate]

Причина, по которой List не является List, заключается в том, что вы можете вставить Cat в List, но не в List ... вы можете использовать подстановочные знаки для по возможности расширять дженерики; например, чтение из List похоже на чтение с List - но не на запись.

Общие для Java-языка и Раздел «Общие» из учебников Java содержит очень хорошее, подробное объяснение того, почему некоторые вещи являются или не являются полиморфными или разрешены с помощью дженериков.

4
задан eandersson 18 April 2013 в 10:39
поделиться

6 ответов

Вы можете работать с исключением:

class AdventureDone(Exception): pass

def yn(x, f, g):
    if x == 'y':
         print(f)
    elif x == 'n':
         print(g)
         raise AdventureDone

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'

try:
    while True:
        ready = raw_input('y/n ')
        yn(ready, "Good, let's start our adventure!",
           'That is a real shame.. Maybe next time')
except AdventureDone:
    pass
    # or print "Goodbye." if you want

Это цикл цикла while снова и снова, но внутри функции yn() возникает исключение, которое прерывает цикл. Чтобы не печатать трассировку, исключение должно быть уловлено и обработано.

5
ответ дан glglgl 29 August 2018 в 00:53
поделиться

Вам нужно вырваться из цикла while внутри самого цикла, а не из другой функции.

Что-то вроде следующего может быть ближе к тому, что вы хотите:

def yn(x, f, g):
    if (x) == 'y':
        print (f)
        return False
    elif (x) == 'n':
        print (g)
        return True

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'

while True:
    ready = raw_input('y/n: ')
    if (yn(ready, 'Good, let\'s start our adventure!', 'That is a real shame.. Maybe next time')):
        break
1
ответ дан Community 29 August 2018 в 00:53
поделиться

Используя break, вы можете выйти из цикла, даже если условие окончания цикла не выполняется. Вы не можете перерыв, потому что «if / elif» не является циклом, а просто условным утверждением.

0
ответ дан dharag 29 August 2018 в 00:53
поделиться
a = True

def b():
    if input("") == "Quit":
        global a
        a == False
    else:
        pass

while a == True:
    print('Solution')
0
ответ дан Dmitry Demidovsky 29 August 2018 в 00:53
поделиться

Вам нужно будет изменить разрыв внутри вашей функции на возврат, и вам нужно иметь оператор 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, и мы закончили.

1
ответ дан eandersson 29 August 2018 в 00:53
поделиться

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

def yn(x, f, g):
    if (x) == 'y':
        print (f)
        return True
    elif (x) == 'n'
        print (g)
        return False

name = raw_input('What is your name, adventurer? ')
print 'Nice to meet you, '+name+'. Are you ready for your adventure?'
done = False
while not done:
    ready = raw_input('y/n ')
    done = yn(ready, 'Good, let\'s start our adventure!', 'That is a real shame.. Maybe next time')
0
ответ дан Ed Plese 29 August 2018 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: