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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:07