Python 2字典学生成绩录入练习:新增数据覆盖旧数据如何解决?
问题根因
代码每次新增学生信息时执行的studentmarks = {name: grade}是重新实例化了一个仅包含当前学生数据的新字典,直接覆盖了之前存储了所有历史数据的旧字典,因此无法保留多条录入记录。
修复方法
- 核心修改:把字典赋值逻辑修改为键值对新增写法,将
studentmarks = {name: grade}替换为studentmarks[name] = grade,该写法会直接在原有字典中新增键值对,不会覆盖历史数据。 - 校验规则可按需调整:你当前的代码要求成绩为数字,如果要适配练习题中的字母等级(A/B等),可以删除对应的数字校验逻辑。
- 输出逻辑调整:录入结束后统一按要求格式输出所有学生成绩,无需单次录入后打印。
修改后的测试代码(兼容你原有Python2运行环境+英文交互逻辑)
def student(): studentmarks = {} while True: name = raw_input("Please give me the name of the student ('q' to quit):") if name == "q": break elif name.isalpha() == True: grade = raw_input("Please give me their grade ('q' to quit):") if grade == "q": break # 此处校验规则可按需修改,保留你原有的数字校验逻辑 elif grade.isalpha() == True: print "Grade is a number! Please try again" continue elif grade.isdigit() == True: # 核心修改点:新增键值对而非覆盖整个字典 studentmarks[name] = grade else: print "Error, please try again" continue else: print "Please try again. {} is not the right input".format(name) continue # 录入完成后统一按要求格式打印 print "好的,正在打印成绩!" print "学生姓名 成绩" for name, grade in studentmarks.items(): print "{:<10}{}".format(name, grade) student()
内容的提问来源于stack exchange,提问作者FlyingDuckMan
相关产品推荐
相关产品推荐

