《Automate The Boring Stuff》Collatz序列项目打印重复数字问题
故障原因
你编写的while循环中对collatz()函数执行了两次重复调用:
- 第一行
collatz(x)没有接收返回值,但函数内部自带打印逻辑,会输出一次计算结果 - 第二行
x = collatz(x)将计算结果赋值给x的同时,再次触发了函数的打印逻辑,因此每一步数值都会输出两次
另外你粘贴的原始代码存在缩进错误,collatz()函数内部的判断语句需要相对于函数定义缩进,否则运行会直接报语法错误。
修正后可正常运行的代码
def collatz(number): if number % 2 == 0: print(number // 2) return number // 2 elif number % 2 == 1: print(3 * number + 1) return 3 * number + 1 print('Enter number: ') try: x = int(input()) while x != 1: # 仅调用一次函数即可同时完成打印和赋值 x = collatz(x) except ValueError: print('Please use whole numbers only')
内容的提问来源于stack exchange,提问作者smillerlou
相关产品推荐
相关产品推荐

