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.')
关键修改说明
- 添加/修改逻辑:用
student_grades[name] = grade直接赋值(自动覆盖已有成绩),split(maxsplit=1)允许姓名包含空格,try-except处理输入格式错误。 - 删除逻辑:单独设置删除提示,仅输入姓名,先判断学生是否存在再删除,避免报错。
- 打印逻辑:直接遍历字典打印,空字典时给出提示,输出更友好。
- 命令输入:去掉不必要的
lower(),优化菜单字符串写法提升可读性。
内容的提问来源于stack exchange,提问作者K_B
相关产品推荐
相关产品推荐

