Python 科拉兹序列-我做对了吗?

Python 科拉兹序列-我做对了吗?,python,collatz,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

我现在正在学习如何用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)
这是可行的,但我不确定我是否按我应该的方式做了。 我的问题是,我使用number作为全局变量和参数,当我第一次编写代码时,每个'num'都被称为'number',当第一次测试它时,它将进入一个无休止的循环,并再次重复第一个if或elif。我认为问题在于它没有引用全局变量,而是创建了一个局部变量,所以我在开始时尝试声明使用全局变量,正如您所看到的,但是它不允许我使用全局变量和参数,所以我创建了'num'变量并将其分配给if块,但现在看来,number参数并没有真正干扰我的代码


它的工作原理让我很高兴,但我想确认这是正确的。

我建议您解决一些问题

  • 对于
    输入
    ,不需要单独的
    打印
    。现在也可以将其转换为int

    number=int(输入('Enter a number'))

  • 摆脱全局设置并使用
    返回
    。也要摆脱你的功能铸造

见:

如此组合:

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)

我会建议codereview这样的网站来回答这样的问题谢谢,我会看一看,我只知道这个网站,因为这是我获得VBA帮助的地方。我想我仍然需要将“数字”替换为“n”,因为数字没有声明。此外,返回n将使程序存储n,因此当我再次使用它时,它将具有一个新值?因此,您将
number
传递给了函数,但从未使用过它,您可以将参数名称更改为num,并且您必须更改较少的内容,我的意思是,在代码中“组合”您同时使用了number和n,因此我必须将number=int(输入…)更改为n=int(输入…。同样感谢您的帮助,您的代码看起来更高效,我使用了多行代码,因为这是我学习的方式,今后我将使用您的版本
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)