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

Python使用if搭配while循环查找分数亚军时出现无限循环原因求解

问题原因解析

你代码的无限循环问题来自while代码块的语句顺序错误:

  • continue语句的作用是直接跳过当前循环的剩余执行语句,回到循环条件判断位置。你的代码里将continue放在了i = i + 1之前,导致i永远不会被递增,始终为0。你的测试用例排序后结果为[6,6,5,3,2],my_list[0] == my_list[1]的判断永远成立,程序就卡在循环里无法退出。

除了死循环问题,你的代码还存在两个潜在问题:

  1. 缺少下标越界防护:如果输入数组的所有分数都相同,循环会不断递增i直到i+1超出列表下标范围,抛出索引错误。
  2. 冗余判断:循环退出时已经满足my_list[i] != my_list[i+1],结合数组是降序排序的前提,my_list[i] > my_list[i+1]是必然成立的,后续的if判断完全多余。

修正后的可运行代码

if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())
    my_list = list(arr)
    my_list.sort(reverse = True)
    i = 0
    # 增加边界判断避免下标越界,调整语句顺序
    while i < len(my_list)-1 and my_list[i] == my_list[i+1]:
        i = i + 1
    print(my_list[i+1])

用你提供的测试输入运行上述代码,会输出预期结果5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:07