Python for循环获取列表最高分代码异常原因咨询
分数列表求最高分的代码错误分析
问题代码
student_scores = input("Input a list of student scores ").split() for n in range(0, len(student_scores)): student_scores[n] = int(student_scores[n]) print(student_scores) max = 0 for n in student_scores: max = max < n max = n print(f"The highest score in the class is: {max}")
问题现象
输入分数列表如78 65 89 86 55 91 64 89时,代码输出最高分为89,但正确结果应为91。且当分数无重复时代码看似正常,存在重复分数时必出错。
逻辑失效的核心原因
- 循环内的比较操作完全无效:
max = max < n这行代码会把比较结果(布尔值True或False)赋值给max,但紧接着下一行max = n直接将当前循环的分数覆盖给max,前一行的比较等于白做。 max最终只等于列表最后一个元素:不管前面有没有更高分,循环结束后max的值就是遍历到的最后一个元素。示例中最后一个元素是89,所以错误输出89,真正的最高分91被直接忽略。- 无重复时的“正常”是巧合:只有当最高分恰好是列表最后一个元素时,代码才会输出正确结果,本质逻辑完全错误,不具备通用性。
修复后的代码(用if条件实现)
将求最高分的循环改为仅当当前分数大于记录的最高分才更新的逻辑:
student_scores = input("Input a list of student scores ").split() for n in range(0, len(student_scores)): student_scores[n] = int(student_scores[n]) print(student_scores) max_score = 0 for score in student_scores: if score > max_score: max_score = score print(f"The highest score in the class is: {max_score}")
内容的提问来源于stack exchange,提问作者Ajen Rai
相关产品推荐
相关产品推荐

