Python新手求助:Collatz序列程序输出重复两次问题排查
问题原因
你的代码里每个数值打印两次的核心原因是在内部while循环中重复调用了collatz()函数:
collatz()函数内部自带print语句,每次调用都会输出计算后的数值。- 你先执行了
collatz()(第一次打印),接着又执行number = collatz()(第二次调用函数,再次打印),导致同一个结果被输出两次。
修复方案
方案1:去掉多余的函数调用
直接删除单独的collatz()调用,只保留赋值语句,这样每次循环只调用一次函数,只打印一次结果:
def collatz(): if number % 2 == 0: print(number // 2) return number // 2 else: print(number * 3 + 1) return number * 3 + 1 number = 5 print("hi pick a number") while number != 1: try: number = int(input()) while number != 1: number = collatz() # 只保留这一行,去掉单独的collatz()调用 except ValueError: print("you should pick a number!")
方案2:优化函数(推荐)
把number作为参数传给collatz()函数,避免依赖全局变量,让函数逻辑更清晰:
def collatz(n): if n % 2 == 0: result = n // 2 else: result = n * 3 + 1 print(result) return result print("hi pick a number") while True: try: number = int(input()) while number != 1: number = collatz(number) break # 序列结束后退出外层循环 except ValueError: print("you should pick a number!")
修复后输出示例
输入5后,输出会变成:
hi pick a number 5 16 8 4 2 1
内容的提问来源于stack exchange,提问作者Ramy Kamal
相关产品推荐
相关产品推荐

