Python使用range()调用colla函数无打印输出问题求助
问题根因
range(5)生成的序列为0、1、2、3、4,前两个输入值会触发函数异常:- 输入值为
0时,进入无限死循环:0满足偶数判断,每次执行num = num // 2结果始终为0,永远无法满足num == 1的循环退出条件 - 输入值为
1时,while循环完全不会执行,fin为空列表,后续计算占比时执行len(counter)/len(fin)会触发ZeroDivisionError除以0报错
- 输入值为
修复方案
如果你的统计目标是≥2的正整数的考拉兹序列偶变步长占比,可以做两处修改:
- 遍历范围改为从2开始,跳过0和1;
- 给
colla函数增加边界判断,避免非法输入导致崩溃。
修复后代码示例
def colla(num): # 增加非法输入拦截 if num < 2: return "非法输入:仅支持≥2的正整数" fin = [] while num != 1: if num % 2 == 0: num = num // 2 fin.append(0) else: num = 3 * num + 1 fin.append(1) counter = [z for z in fin if z == 0] return "{:.0%}".format(len(counter)/len(fin)) # 遍历范围改为从2到4(对应原range(5)的有效取值) for i in range(2,5): print(colla(i))
内容的提问来源于stack exchange,提问作者Gen Pol
相关产品推荐
相关产品推荐

