Collat​​z序列 - 我做得对吗?

时间:2018-01-22 17:33:57

标签: python collatz

我现在正在学习如何在python中编程,我正在学习的书给了我练习项目来构建这个序列并将它放在一个循环中,直到值为1.

我的代码如下所示:

print('Enter a number')
number = input()
num = number

def collatz(number):
    global num
    if int(num) % 2 == 0:
        num = int(num) // 2
        print(str(num))
    elif int(num) % 2 == 1:
        num = 3 * int(num) + 1
        print(str(num))
while num != 1:
    number = num
    collatz(number)

它有效,但我不确定我是否按照我应该的方式完成它。 我的问题是我使用数字作为全局变量和参数,当我第一次编写代码时,每个'num'被称为'number',当第一次测试它时,它将进入无限循环并重复第一个if或elif一遍又一遍。我认为问题在于它没有引用全局变量但是创建了一个本地变量,所以我试图在开始时声明使用全局变量,正如你所看到的,但它并没有让我因为全局变量和参数不能相同,所以我创建了'num'变量并将其分配给if块,但现在看起来number参数并没有真正干扰我的代码。

它起作用的事实让我感到高兴,但我想确认这是对的。

1 个答案:

答案 0 :(得分:1)

我建议你解决一些问题。

  • print无需另外input。也可以将它现在转换为int。

    number = int(input('Enter a number'))

  • 摆脱全局并使用return。同时摆脱你的功能。

请参阅:

def collatz(n): # parameter is an int
    if n % 2 == 0:
        n = n // 2
    elif n % 2 == 1:
        n = 3 * n + 1
    print(n) # single print
    return n

结合起来:

def collatz(n):
    if n % 2 == 0:
        n = n // 2
    elif n % 2 == 1:
        n = 3 * n + 1
    print(n)
    return n
number = int(input('Enter a number'))
while number != 1:
    number = collatz(number)