我写了这样一个函数:
def collatz(number):
'''
Function takes a positive integer x as input and prints the Collatz sequence starting at x
'''
while True:
if number % 2 == 0: # If number is even
number = number/2
return number
elif number == 1:
break
else:
number = 3*number+1
return number
该函数应返回如下数字:
collatz(10)
10
5
16
8
4
2
1
此功能使用以下公式:
X={x/2 if x is even , if 3x+1 if x is odd
现在它只返回1个数字。怎么了?
答案 0 :(得分:1)
函数返回后会立即中断。考虑使用yield
:
def collatz(number):
'''
Function takes a positive integer x as input and prints the Collatz sequence starting at x
'''
while True:
if number % 2 == 0: # If number is even
number = number/2
yield number
elif number == 1:
break
else:
number = 3*number+1
yield number
这将返回带有数字的生成器。您可以list(collatz(n))
获取数字列表。
答案 1 :(得分:0)
当你返回意味着功能完成的东西时
您可以只将append
数字添加到列表中,然后返回数字列表,这样就可以完成while循环的所有迭代,而不是在一个循环之后停止