You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

修复说明

  1. 移除冗余的for循环,通过k*4直接计算每组四元组的起始索引,严格控制输入次数为8次。
  2. 重构premier函数:
    • 先处理n≤1、n=2和偶数的边界情况,快速排除非质数
    • 仅检查到n的平方根,大幅提升质数判断效率
  3. 优化输入逻辑:用内层while循环确保用户输入的是质数,避免重复的条件判断代码。
  4. 数组初始化改用[0]*200,效果与原代码一致但更直观。

内容的提问来源于stack exchange,提问作者Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:35:21