Автоматизируйте скучные вещи с помощью Python Practice Project: неизвестный цикл последовательности Collatz?

#python-3.x #while-loop

#python-3.x #цикл while

Вопрос:

Схема: напишите функцию с именем collatz(), которая имеет один параметр с именем number . Если число четное, то collatz() должен вывести number // 2 и вернуть это значение. Если число нечетное, то collatz() должен напечатать и вернуть 3 * число 1. Затем напишите программу, которая позволяет пользователю вводить целое число и продолжает вызывать collatz() для этого числа, пока функция не вернет значение 1.

мой код:

 def collatz(number):
    if number % 2 == 0:
        print(number // 2)
        return number // 2
    
    elif number % 2 == 1:
        result = 3 * number   1
        print(result)
        return result
    
n = input("Give me a number")
while n != 1:
    collatz(int(n))
 

вывод продолжает бесконечно печатать значение n, и я не могу понять, почему. Пожалуйста, просветите меня

Ответ №1:

Ваш цикл должен обновить значение n :

 while n != 1:
    n = collatz(int(n))
 

В противном случае ваш цикл не имеет прогрессии, следовательно, бесконечный цикл.

Редактировать: вот объяснение того, почему это необходимо.

Подумайте об этом логически. Если вы вводите тело цикла, n оно не должно быть равно 1. Цикл продолжает выполняться до n тех пор, пока не станет 1. Единственный способ для этого — изменить (т. Е. Обновить) n , чтобы в конечном итоге оно достигло 1, и цикл мог завершиться.