Python用户输入构造科目分数字典时仅保留最后一个值如何修复?
问题原因
- 未提前初始化空字典
marks,代码运行有概率触发NameError报错 - 未给每个科目预先创建对应列表存储分数,每次直接执行
marks[sub_name] = stud_marks会直接覆盖该键的旧值,因此最终仅保留该科目最后一次输入的分数 - 输入的分数为字符串格式,未转换为整数类型,不符合预期输出要求
修复后完整代码
# 初始化空字典存储结果 marks = {} no_sub = int(input("Enter Number Of Subjects : ")) no_mark = int(input("Enter how many student's marks do you want to add : ")) for i in range(no_sub): sub_name = input("Enter Subject Names : ") # 为当前科目初始化空列表存储分数 marks[sub_name] = [] for j in range(no_mark): stud_marks = int(input("Enter student's Marks : ")) # 将分数追加到对应科目列表中,而非直接覆盖赋值 marks[sub_name].append(stud_marks) print(marks)
修改说明
- 开头新增
marks = {}初始化空字典,避免变量未定义报错 - 每个科目名称输入完成后,先给
marks[sub_name]赋值为空列表,用于存储该科目所有学生分数 - 输入分数时用
int()转换输入内容为整型 - 将原直接赋值逻辑改为
append()方法,把每个分数追加到对应科目的列表中,不会覆盖历史输入
内容的提问来源于stack exchange,提问作者Hiresh Verma
相关产品推荐
相关产品推荐

