Я пытаюсь написать программу collatz из «Автоматизировать скучные вещи с помощью книги Python», но столкнулся с некоторыми проблемами. Я использую python 3.5.2. Вот схема проекта:Использование while циклов и переменных
Напишите функцию с именем collatz(), которая имеет один параметр с именем number. Если число четное, тогда collatz() должен напечатать номер // 2 и вернуть это значение. Если число нечетное, тогда collatz() должен печатать и возвращать 3 * число + 1. Затем напишите программу, которая позволяет пользователю вводить целое число и которая вызывает вызов collatz() на этом номере, пока функция не вернет значение 1.
Мой код:
def collatz(number):
if number % 2 == 0: #its even
print(number // 2)
return number // 2
elif number % 2 == 1: #its odd
print(3*number+1)
return 3*number+1
print('Type an integer: ')
num=int(input())
while(True):
if collatz(num) == 1:
break
# Or even simpler:
# while(collatz(num) != 1):
# pass
выход дает мне бесконечный цикл:
Type an integer:
10
5
5
5
5
5
5
5
5
...
Но когда я разбить его и использовать переменную для хранения возвращаемого значения, он работает:
while(True):
num=collatz(num)
if num == 1:
break
Выход:
Type an integer:
5
16
8
4
2
1
Почему это? Я не понимаю, почему первая программа не работает. Оба они похожи, но я просто решил проверить возвращаемое значение непосредственно в моей исходной программе вместо использования переменных. Буду признателен за любую помощь, спасибо.
Ваша бесконечная версия цикла никогда не обновляет значение 'num'. – Blorgbeard
Ну, это была очень глупая ошибка с моей стороны. Ну, это случается .. Спасибо человеку. – tadm123