Python使用if搭配while循环查找分数亚军时出现无限循环原因求解
问题原因解析
你代码的无限循环问题来自while代码块的语句顺序错误:
continue语句的作用是直接跳过当前循环的剩余执行语句,回到循环条件判断位置。你的代码里将continue放在了i = i + 1之前,导致i永远不会被递增,始终为0。你的测试用例排序后结果为[6,6,5,3,2],my_list[0] == my_list[1]的判断永远成立,程序就卡在循环里无法退出。
除了死循环问题,你的代码还存在两个潜在问题:
- 缺少下标越界防护:如果输入数组的所有分数都相同,循环会不断递增i直到
i+1超出列表下标范围,抛出索引错误。 - 冗余判断:循环退出时已经满足
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
相关产品推荐
相关产品推荐

