Задать вопрос
@MaxRAF

Как сделать, чтобы после ввода пока на выходе не станет 1 программа не завершит работу?

Всем привет.

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

Написал этот код:
# Передаём переменной number введённое значение
number = int(input()) 

# Затем функция collatz() выполняет действие над этим числом
def collatz(number):
    if number % 2 == 0:
        return number // 2
    elif number % 2 == 1:
        return 3 * number + 1

# После этого функция отобразит результат на экран
print(collatz(number))


Оно понятно, что я введу любое число и получу только один результат, а надо как в задаче. Не могу понять, какой надо использовать цикл для этого.

Результат должен быть таким, если введём 3:
3
10
5
16
8
4
2
1
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
longclaps
@longclaps
Для этой задачи нужен циклический цикл.
def collatz(n):
    return 3 * n + 1 if n % 2 else n // 2


number = int(input())
while number != 1:
    print(number)
    number = collatz(number)
print(1)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@o5a
Использовать бесконечный цикл
while True:
    #выполняем действия
    if условие_выхода:
        break

Т.е. каждый цикл получать значение от этой функции и проверять, пока не станет 1.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы