Python代码问题:使用if elif与循环获取成绩第二高的学生姓名
代码问题修复
核心bug原因
你代码的核心问题是:当新录入的成绩超过当前最高分high_score时,仅把旧的最高分数值赋值给了second_score,但没有同步把旧最高分对应的学生姓名high_name赋值给second_name,直接导致次高分的姓名丢失。
另外还有两个可优化的逻辑问题:
- 学生数量是否≥2的判断放在循环内部,每次循环都会重复执行,属于冗余逻辑,应该放在循环外提前判断
- 未处理多名学生成绩同分的边界场景,比如两人并列第一、新成绩和当前次高分同分的情况
修复后可正常运行的代码
num_students = int(input("enter number of students: ")) # 提前判断学生数量不足2的情况 if num_students < 2: print("学生数量不足2,无法统计前两名") exit() high_score = 0 high_name = "" second_name = "" second_score = 0 for i in range(num_students): name = input("enter student name: ") score = int(input("enter student score: ")) if score > high_score: # 原来的第一名变成第二名,分数和姓名同步更新 second_score = high_score second_name = high_name # 更新新的第一名 high_score = score high_name = name elif score == high_score: # 并列第一的情况,可根据需求调整是否计入次高 second_score = high_score second_name = name elif score > second_score: # 分数介于第一和第二之间,更新次高 second_score = score second_name = name print() print("Top Two Students") print() print(f"{high_name}'s score is {high_score}") print(f"{second_name}'s score is {second_score}")
改动说明
- 提前在循环外判断学生数量,不足2直接提示退出,避免无效循环
- 当新成绩超过最高分时,同步将旧最高分的分数和姓名赋值给次高分对应的变量,解决次高姓名丢失的问题
- 新增并列第一的处理逻辑,符合实际成绩统计场景
- 调整判断顺序,减少冗余判断,运行效率更高
内容的提问来源于stack exchange,提问作者optik404
相关产品推荐
相关产品推荐

