使用 python 打印正整数 n 的 collatz 序列,每行一个值在 1 处停止
Print the collatz sequence of a positive int, n, one value per line stoping at 1 using python
我已经完成了:
def collatz(n):
seq = n
if n == 1:
n = n
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(seq)
调用此函数的正确输出,当 n = 10 时:
collatz(10)
10
5
16
8
4
2
1
但唯一打印的数字是它本身。
- 您需要为循环中的每个步骤打印一次。您的打印语句 在您的 while 循环之外 因此它只触发一次。
- 此外,您想打印正在变化的值
n
而不是 seq
,这在这个函数中永远不会发生。
- 关于这一点,您甚至不需要
seq
,因为您从不使用它!
- 这两行
if n == 1: n = n
什么都不做。即使 n==1
,将 n 设置为自身也不会更改值。
问题是在 while 循环执行后,您只打印在函数开始时设置为 n
的 seq
。因此,您只打印一次值。
您应该在 while
循环内以及开始时打印值(对于第一个 10
打印)。例子-
def collatz(n):
print(n)
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
演示 -
>>> def collatz(n):
... print(n)
... while n > 1:
... if n % 2 == 0:
... n = n // 2
... else:
... n = 3 * n + 1
... print(n)
...
>>> collatz(10)
10
5
16
8
4
2
1
我已经完成了:
def collatz(n):
seq = n
if n == 1:
n = n
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(seq)
调用此函数的正确输出,当 n = 10 时:
collatz(10)
10
5
16
8
4
2
1
但唯一打印的数字是它本身。
- 您需要为循环中的每个步骤打印一次。您的打印语句 在您的 while 循环之外 因此它只触发一次。
- 此外,您想打印正在变化的值
n
而不是seq
,这在这个函数中永远不会发生。 - 关于这一点,您甚至不需要
seq
,因为您从不使用它! - 这两行
if n == 1: n = n
什么都不做。即使n==1
,将 n 设置为自身也不会更改值。
问题是在 while 循环执行后,您只打印在函数开始时设置为 n
的 seq
。因此,您只打印一次值。
您应该在 while
循环内以及开始时打印值(对于第一个 10
打印)。例子-
def collatz(n):
print(n)
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
演示 -
>>> def collatz(n):
... print(n)
... while n > 1:
... if n % 2 == 0:
... n = n // 2
... else:
... n = 3 * n + 1
... print(n)
...
>>> collatz(10)
10
5
16
8
4
2
1