Collatz 序列 - 我做对了吗?
Collatz sequence - Have I done it right?
我现在正在学习如何在 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 块,但现在看起来数字参数并没有真正干扰我的代码。
它有效的事实让我很高兴,但我想确认这是正确的。
我建议您解决一些问题。
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)
我现在正在学习如何在 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 块,但现在看起来数字参数并没有真正干扰我的代码。
它有效的事实让我很高兴,但我想确认这是正确的。
我建议您解决一些问题。
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)