Python中使用return语句时While循环无法重复执行的问题
为什么return会让Collatz序列函数只执行一次?
先搞懂return语句的作用
在Python里,return语句的唯一核心作用就是立即终止当前函数的执行,同时把return后面的值作为函数的返回结果传递给调用它的地方。只要函数里执行到return这一行,不管后面还有多少代码没跑、不管循环有没有走完,函数都会直接停止,不会再往下执行任何内容。
你的代码问题出在哪
看你写的collatz函数:
def collatz(n): while n!=1: print(n) if n%2==0: return n//2 else: return n*3+1
当你输入33调用这个函数时:
- 进入while循环,先打印33;
- 判断33是奇数,执行
return 33*3+1(也就是100); - 这时候函数直接终止,while循环根本没机会跑第二次;
- 外层的
print(collatz(...))把返回的100打印出来,之后外层while True会继续等待输入,但collatz函数已经结束,不会再生成后续的序列值了。
而你把return改成n = ...之后,是在更新循环变量n的值,这样while循环会继续判断新的n是否等于1,直到序列走到1为止,自然就能生成完整的Collatz序列。
正确的写法示例
如果你想让函数生成完整的Collatz序列,可以这样写:
def collatz(n): while n != 1: print(n) # 更新循环变量n,而不是用return退出函数 if n % 2 == 0: n = n // 2 else: n = n * 3 + 1 print(n) # 最后打印序列的终点1 print('Insert a number.') while True: try: collatz(int(input())) except ValueError: print('Please insert an integer number.')
或者如果想让函数返回整个序列的列表,方便后续处理:
def collatz(n): sequence = [n] while n != 1: if n % 2 == 0: n = n // 2 else: n = n * 3 + 1 sequence.append(n) return sequence print('Insert a number.') while True: try: for num in collatz(int(input())): print(num) except ValueError: print('Please insert an integer number.')
内容的提问来源于stack exchange,提问作者Buddhino
相关产品推荐
相关产品推荐

