Python while循环if-else奇偶运算无报错但未达预期问题排查
代码问题排查
问题现象
运行代码无报错、无警告,但程序会无限循环无法退出,不符合运行到数值为0就终止的预期。
原始代码如下:
num = 4 while num != 0: if num % 2 == 1: num = (num * 3) + 1 else: num /= 2
核心问题点
- 终止条件不符合运算规则逻辑
你写的奇数乘3加1、偶数除以2的规则就是经典考拉兹(3n+1)运算,所有正整数按这个规则运算,最终都会进入4→2→1→4的无限循环,永远不可能算出0的结果:- 当num为1时,属于奇数,运算后得到
1*3+1=4 - 4为偶数,除以2得2
- 2为偶数,除以2得1
循环会在1、4、2三个值之间反复跳转,永远触发不到num ==0的退出条件。
- 当num为1时,属于奇数,运算后得到
- 除法运算符使用错误
你用的/=是Python中的浮点除法,运算结果会变成浮点数,一方面多次运算后可能出现浮点数精度偏差,导致值判断不准;另一方面非整数的浮点数做num%2 ==1的奇偶判断本身就是无效的。
修复方法
如果是要实现标准的考拉兹序列运算,终止条件应该设为数值到1即可,同时把浮点除法换成整数除法避免类型问题:
num = 4 while num != 1: if num % 2 == 1: num = num *3 +1 else: num //= 2 print(num) # 可按需打印每一步运算结果
如果你确实需要按要求运行到数值为0,只需要在逻辑里补充num为1时直接归0的分支即可,同样记得用整数除法:
num =4 while num !=0: if num ==1: num =0 elif num%2 ==1: num = num*3 +1 else: num //=2
内容的提问来源于stack exchange,提问作者NEXUS
相关产品推荐
相关产品推荐

