Попробовать кроме рекурсии или цикла while? - PullRequest
0 голосов
/ 12 октября 2018

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

def exceptiontest():
    try:
        print(int(input("number 1: "))+int(input("number 2:")))
    except:
        print("a mistake happened")
        exceptiontest()

exceptiontest()

Когда я спрашивал на форуме о курсе, я получил ответ, что это не то же самое.Я немного смущен сейчас.Кто-нибудь, что может уточнить для меня?Заранее спасибо!

Ответы [ 3 ]

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

while цикл, по двум причинам

  • понятнее читать: пока не получилось, попробуйте еще раз
  • рекурсия не бесплатна.Оставляет предыдущий стек функций открытым.ему может не хватить памяти (в данном случае, вероятно, не будет, но в принципе этого избежать)
0 голосов
/ 12 октября 2018

Другая причина использования цикла while, которая еще не упоминалась, заключается в том, что вы можете использовать выражения присваивания , поставляемые с Python 3.8.

Функция add инкапсулирует получениедва числа и пытаюсь их добавить.

def add():
    'try to add two numbers from user input, return None on failure'
    x = input('number 1: ')
    y = input('number 2: ')
    try:
        return float(x) + float(y)
    except TypeError, ValueError:
        return None

Следующий цикл while выполняется, пока нет result.

while (result := add()) is None:
    print('you made a mistake, make sure to input two numbers!')

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

Вызов функции в except в конечном итоге вызовет ошибку RecursionError: maximum recursion depth exceeded, если вы продолжите вводить неверные данные.Обычно люди не будут вводить столько плохих данных, чтобы получить ошибку до того, как они сдадутся, но вы без необходимости помещаете вызовы функций в стек.

Цикл while лучше, так как это один вызов функции, ожидающий допустимого ввода.ИТ не тратит больше ресурсов, чем нужно.

...