Python含while循环的代码无法终止问题求助
问题分析与修复代码
核心问题
- 代码中while循环嵌套了遍历整个数组的for循环,导致程序会不断触发输入操作,远超8次的预期,且for循环不会因k达到8而停止,最终while循环完全失控,无法终止。
premier质数判断函数存在逻辑漏洞:无法正确识别部分非质数(如n=4会被误判为质数),且未处理n≤1的边界情况。
修复后的代码
from numpy import array def premier(n): if n <= 1: return False if n == 2: return True if n % 2 == 0: return False # 仅检查到n的平方根,提升判断效率 for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False return True def quadruplets(t): k = 0 # 循环8次,每次处理一组四元组 while k < 8: start_idx = k * 4 # 循环获取输入,直到用户输入质数 num = int(input("Give t of I: ")) while not premier(num): num = int(input("Don't make this harder than it already is: ")) # 填充四元组数据 t[start_idx] = num t[start_idx + 1] = num + 2 t[start_idx + 2] = num + 6 t[start_idx + 3] = num + 8 print(t) k += 1 print("your k is now: ", k) # 初始化数组 t = array([0]*200) quadruplets(t) print("your final table is: ", t)
修复说明
- 移除冗余的for循环,通过
k*4直接计算每组四元组的起始索引,严格控制输入次数为8次。 - 重构
premier函数:- 先处理n≤1、n=2和偶数的边界情况,快速排除非质数
- 仅检查到n的平方根,大幅提升质数判断效率
- 优化输入逻辑:用内层while循环确保用户输入的是质数,避免重复的条件判断代码。
- 数组初始化改用
[0]*200,效果与原代码一致但更直观。
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

