Python: вызов функции внутри цикла while приводит к безудержной рекурсии

Я написал функцию Python randomizer(), которая рандомизирует строки из файла, а затем записывает их в стандартный вывод. Сам по себе работает без проблем. Теперь я хочу иметь возможность повторять этот процесс заданное пользователем количество раз, поэтому я пишу:

def iterator():
    print("Number of iterations: ")
    total_iterations = raw_input()
    current_iteration = 1
    while current_iteration <= total_iterations:
        randomizer()
        current_iteration = current_iteration + 1

Если я сделаю это, randomizer() просто продолжит повторяться, пока я не завершу его вручную. Однако, если цикл while

while current_iteration <= total_iterations:
    random.shuffle(listname)
    current_iteration = current_iteration + 1

затем iterator() останавливается после указанного количества запусков. Та же проблема возникает, если я пишу весь код randomizer() внутри цикла while iterator(). Это говорит мне о том, что есть проблема с вызовом функции из цикла while, но я не могу понять, в чем.


person Koldito    schedule 30.11.2012    source источник
comment
Это должно дать вам ошибку, если дополнительный отступ не является опечаткой.   -  person asheeshr    schedule 30.11.2012
comment
да, лишний отступ был опечаткой в ​​вопросе (сейчас исправлено), но не в моем коде.   -  person Koldito    schedule 30.11.2012
comment
Вторая версия действительно работает? Проблема в том, что результатом raw_input() является строка, а не целое число, поэтому условие никогда не завершается.   -  person Daniel Roseman    schedule 30.11.2012
comment
да, это была проблема, спасибо. Работает следующее: `в то время как текущая_итерация ‹= int(total_iterations):   -  person Koldito    schedule 30.11.2012
comment
@user1559769 user1559769 вам следует выполнять преобразование вне цикла, а не в тестовом режиме   -  person asheeshr    schedule 30.11.2012
comment
Кстати, в python вы можете избежать лишнего ввода с помощью ... current_iteration += 1   -  person jcfollower    schedule 30.11.2012


Ответы (1)


Проблема в том, что raw_input() возвращает строку, поэтому сравнение while current_iteration <= total_iterations всегда возвращает true.

Исправить путем приведения к int

total_iterations = int(raw_input())
person cmh    schedule 30.11.2012