我最近开始学习Python,书中给我的任务是创建一个函数,该函数将以一个输入数字开始编写Collatz序列,但是,尽管有while
循环,如果我使用return
语句,它将只运行一次。为什么会这样呢?如果i
将其更改为n =
,程序将正确运行,但return
的意义何在?
下面是当前代码:
def collatz(n):
while n!=1:
print(n)
if n%2==0:
return n//2
else:
return n*3+1
print('Insert a number.')
while True:
try:
print(collatz(int(input())))
except ValueError:
print('Please insert an integer number.')
如果我键入33,它将只打印:
>>>>33
>>>>100
然后停止,因此只返回新值一次。
2条答案
按热度按时间bejyjqdl1#
你要找的可能是这样的:
返回的“点”是提供函数的输出,例如,
x = collatz(1)
将使print(x)
说1
。一个有趣的事实是,你可以用yield keyword创建一个不止一次返回的函数,我不认为这是你解决这个问题所要寻找的,但事实上,当使用yield而不是return时,你可以在函数调用上使用for循环,在函数终止之前进行多次返回。
piok6c0g2#
看起来你遇到了here的问题,我认为这只是书中的一个错误,看起来你把
while
循环放进了函数中,但是一旦你返回,即使数字不等于1
也不会重复,因为退出了while循环和函数。在这个问题上,得票最多的答案有一个更好的方法,就是将while循环移到函数之外,这样,如果数字不等于1
,就可以重新运行函数。如果你不想让while循环离开函数,你可以这样做: