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

Python字典实现学生成绩册程序报错,请求排查代码问题

问题分析与修复方案

核心问题点

  • 命令1(添加/修改):student_grades.update({name, grade}) 错误使用了集合语法{},字典的键值对需要用:分隔,正确写法应为{name: grade};更简洁的方式是直接赋值student_grades[name] = grade。
  • 命令2(删除):
    • 不需要输入成绩却调用了input(grade_prompt).split(),若用户只输入姓名会触发ValueError;
    • del student_grades会直接删除整个字典,而非指定学生的成绩,应改为del student_grades[name],同时要处理学生不存在的情况避免KeyError。
  • 命令3(打印):完全不需要输入姓名和成绩,多余的input(grade_prompt).split()会强制用户输入内容,否则报错,直接打印字典即可。
  • 输入鲁棒性:split()默认按空格分割,若学生姓名包含空格(如Mary Ann)会导致解析错误,后续可考虑用逗号等分隔符并指定分割次数。

修正后的代码

student_grades = {}  # 创建空字典
grade_prompt = "Enter name and grade (Ex. 'Bob A+'):"
delete_prompt = "Enter the name of the student to delete:"
menu_prompt = (
    "1. Add/modify student grade\n"
    "2. Delete student grade\n"
    "3. Print student grades\n"
    "4. Quit\n"
)

while True:
    command = input(menu_prompt).strip()
    if command == '1':
        try:
            name, grade = input(grade_prompt).split(maxsplit=1)  # 允许姓名带空格
            student_grades[name] = grade
            print(f"Updated {name}'s grade to {grade}")
        except ValueError:
            print("Invalid input! Please follow the format: 'Name Grade'")
    elif command == '2':
        name = input(delete_prompt).strip()
        if name in student_grades:
            del student_grades[name]
            print(f"Deleted {name}'s grade")
        else:
            print(f"Student {name} not found")
    elif command == '3':
        if not student_grades:
            print("No student grades recorded yet")
        else:
            print("Student Grades:")
            for name, grade in student_grades.items():
                print(f"- {name}: {grade}")
    elif command == '4':
        print("Exiting program...")
        break
    else:
        print('Unrecognized command. Please enter 1-4.')

关键修改说明

  1. 添加/修改逻辑:用student_grades[name] = grade直接赋值(自动覆盖已有成绩),split(maxsplit=1)允许姓名包含空格,try-except处理输入格式错误。
  2. 删除逻辑:单独设置删除提示,仅输入姓名,先判断学生是否存在再删除,避免报错。
  3. 打印逻辑:直接遍历字典打印,空字典时给出提示,输出更友好。
  4. 命令输入:去掉不必要的lower(),优化菜单字符串写法提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:40:10