我做对了吗?

2024-03-28 22:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在学习如何用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参数并没有真正干扰我的代码。你知道吗

事实上,它的工作使我高兴,但我想确认这是正确的。你知道吗


Tags: 项目代码number参数if编程序列num
1条回答
网友
1楼 · 发布于 2024-03-28 22:33:50

有几件事我建议你解决。你知道吗

  • 对于input,不需要单独的print。也可以现在将其转换为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)

相关问题 更多 >