#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, и цикл мог завершиться.