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

Python动态处理嵌套列表:学生成绩录入与数据组织问题

解决方案:用结构化数据组织学生成绩并实现平均分计算

你之前的代码把三类成绩分别存在独立列表里,导致学生和成绩的对应关系断裂,没法直接做平均分计算。下面用字典+列表的结构化方案来解决这个问题,既符合你想要的“嵌套”结构,又能轻松实现后续统计需求。

1. 优化数据结构:绑定学生与成绩

用字典列表来存储每个学生的完整信息,每个学生条目包含姓名和三次成绩记录,结构清晰且易于操作。最终数据结构示例:

[
    {"name": "Patrick", "grades": [
        {"discussion": 50, "quiz": 50, "assignment": 50},
        {"discussion": 60, "quiz": 65, "assignment": 70},
        {"discussion": 75, "quiz": 80, "assignment": 85}
    ]},
    {"name": "Michael", "grades": [
        {"discussion": 60, "quiz": 60, "assignment": 60},
        # 另外两次成绩记录
    ]}
]

2. 重写成绩录入代码

先补全学生姓名获取逻辑,再调整成绩录入循环,直接将成绩绑定到对应学生:

# 获取学生姓名列表
studentNumber = int(input("请输入学生人数:"))
studentNameList = []
for _ in range(studentNumber):
    name = input("请输入学生姓名:").strip().title()
    studentNameList.append(name)

# 初始化学生成绩存储结构
students = []
for name in studentNameList:
    students.append({"name": name, "grades": []})

# 录入三次成绩
for round_num in range(1, 4):
    print(f"\n===== 录入第 {round_num} 次成绩 =====")
    for student in students:
        while True:
            try:
                discussion = int(input(f"请输入{student['name']}的第{round_num}次讨论成绩:"))
                quiz = int(input(f"请输入{student['name']}的第{round_num}次测验成绩:"))
                assignment = int(input(f"请输入{student['name']}的第{round_num}次作业成绩:"))
                # 将本次成绩添加到该学生的成绩列表中
                student["grades"].append({
                    "discussion": discussion,
                    "quiz": quiz,
                    "assignment": assignment
                })
                break
            except ValueError:
                print("输入无效,请输入整数成绩!")

# 验证存储结构
print("\n=== 学生成绩数据 ===")
for student in students:
    print(f"{student['name']}: {student['grades']}")

3. 计算每位学生的平均分

基于结构化的数据,直接提取每个学生的各类成绩进行统计:

print("\n=== 学生成绩平均分 ===")
for student in students:
    # 提取所有对应类型的成绩
    discussion_scores = [grade["discussion"] for grade in student["grades"]]
    quiz_scores = [grade["quiz"] for grade in student["grades"]]
    assignment_scores = [grade["assignment"] for grade in student["grades"]]
    
    # 计算平均分(保留1位小数)
    avg_discussion = sum(discussion_scores) / len(discussion_scores)
    avg_quiz = sum(quiz_scores) / len(quiz_scores)
    avg_assignment = sum(assignment_scores) / len(assignment_scores)
    # 总平均分(默认三类成绩权重相同,可根据需求调整)
    avg_total = (avg_discussion + avg_quiz + avg_assignment) / 3
    
    print(f"{student['name']}:")
    print(f"  讨论平均分:{avg_discussion:.1f}")
    print(f"  测验平均分:{avg_quiz:.1f}")
    print(f"  作业平均分:{avg_assignment:.1f}")
    print(f"  总平均分:{avg_total:.1f}")

方案优势

  • 数据关联紧密:每个学生的成绩都绑定在自己的条目下,彻底解决了原代码中成绩与学生分离的问题。
  • 扩展性强:后续新增成绩类型、调整成绩次数,只需修改少量代码即可适配。
  • 可读性高:变量命名和结构逻辑清晰,后续维护或修改更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:03:17