Прервать основную функцию, которая содержит «while True» с «return» из подфункции - PullRequest
0 голосов
/ 12 октября 2018

Я хочу запустить программную функцию Python из основной функции, которая управляет программной функцией с помощью

while True:

Я уверен, что это хорошая практика.Я думал, что обратный вызов в функции программы сломает меня, но я застрял в бесконечном цикле.Ввод «n» должен разорвать цикл - как мне это сделать, и это разумно сделать?

def main():
    while True:
        runPgm()

def runPgm():
    while True:
        a = str(input("Input?: "))
        if a == 'n':
            break
    return

if __name__ == '__main__':
    main()

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

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

0 голосов
/ 12 октября 2018

Вам нужен только один бесконечный цикл

def main():
    runPgm()

def runPgm():
    while True:
        a = str(input("Input?: "))
        if a == 'n':
            return

if __name__ == '__main__':
    main()
0 голосов
/ 12 октября 2018

В этом есть две вещи:

  1. Используйте один цикл while True.
  2. вместо break, просто используйте return, потому что функция завершается, как тольковозврат достигнут.

см. ниже пример кода python3.

def main():
    print(runPgm())

def runPgm():
    while True:
        a = str(input("Input?: "))
        if a == 'n':
            return a

if __name__ == '__main__':
    main()
0 голосов
/ 12 октября 2018

Это не работает, потому что ваш оператор break (и последующий return) просто завершают текущий вызов функции runPgm.Но это возвращает вас к циклу в main, который никогда не прерывается.

Как правило, вы можете сделать «несколько разрывов», как это, установив логический флаг, чтобы сказать, что вы хотите сделатьдальнейший разрыв, который проверяется во внешнем цикле.Тем не менее, в вашем случае, я думаю, что более простое решение - просто использовать один из циклов, а не оба.Просто полностью избавьтесь от функции main и вместо этого вызовите runPgm!

...