Кольцевая структура Кольца - PullRequest
0 голосов
/ 30 июня 2018

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

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

Затем напишите программу, которая позволяет пользователю вводить целое число и продолжает вызывать collatz () для этого числа, пока функция не вернет значение 1. (Удивительно, но эта последовательность на самом деле работает для любого целого числа - рано или поздно, используя в этой последовательности вы получите 1! Даже математики не знают почему. Ваша программа исследует то, что называется последовательностью Коллатца, иногда называемой «простейшей невозможной математической задачей».)

Не забудьте преобразовать возвращаемое значение из input () в целое число с помощью функции int (); в противном случае это будет строковое значение.

Подсказка: целое число является четным, если число% 2 == 0, и нечетным, если число% 2 == 1.

def collatz(number):
    if number%2==0:
        print(number//2)
    else:
        print(3*number+1)

x = int(input('print num'))
while TRUE:
    if collatz(x)!=1:
        break

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Вы должны распечатать и вернуться в функцию collatz(num):

def collatz(number):
    """prints and returns the next number in the Collatz sequence
    """
    if number % 2 == 0:
        next_collatz_number = number // 2
    else:
        next_collatz_number = 3 * number + 1
    print(next_collatz_number)
    return next_collatz_number

x = int(input('print num'))

while True:
    x = collatz(x)
    if x == 1:
        break
0 голосов
/ 30 июня 2018

Дубликат - Создание программы Collatz для автоматизации скучных вещей

Как и другие отмечали в комментариях, ваша функция collatz() должна возвращать целое число также , чтобы снова вводиться в collatz().

Основываясь на том, что вы уже сделали, мы можем заставить функцию collatz_sequence(x) неоднократно вызывать collatz(), чтобы получить желаемый результат:

def collatz(x):
    if x % 2 == 0:
        a = x//2
    else:
        a = 3*x+1
    print(a)
    return a

def collatz_sequence(x):
    print(x)
    while x!=1:
        x=collatz(x)

Вот пример вывода:

>>> collatz_sequence(6)
6
3
10
5
16
8
4
2
1
...