Последовательность Коллатца без оператора возврата - PullRequest
0 голосов
/ 03 ноября 2019

Это из книги под названием "Автоматизируйте скучный материал с помощью Python". Читателю необходимо:

a) Использовать только один параметр

b) Если число четное, вывести и вернуть число // 2

c) если число нечетное, выведите и верните 3 * число + 1

d) Функция должна вызываться до тех пор, пока функция не вернет значение 1.

То, что я написал, работает, но я не использовал "вернуть "команду, так что это правильно?

def collatz():  
    print('Please enter a number: ')
    number = int(input())
    while number != 1:
        if (number % 2)==0: 
            number  = number / 2
            print(number)
            continue
        else:
            number = 3*number + 1
            print(number)
            continue
        break
collatz()

1 Ответ

1 голос
/ 04 ноября 2019

У вас есть все нужные части, но, похоже, требования а) и г) не были выполнены. Незначительный рефакторинг - вытащите input и while - вы должны получить там:

def collatz(number):  # a) use one parameter
    if number % 2:
        next_num = 3 * number + 1
    else:
        next_num = number // 2
    print(next_num)
    return next_num


def run():
    number = int(input('Please enter a number: '))
    while number != 1:
        number = collatz(number)  # d) call the function repeatedly


run()

например

>>> run()
Please enter a number: 3
10
5
16
8
4
2
1

>>> run()
Please enter a number: 9
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
...