Python遍历字典keys、values打印不及格学生报ValueError如何解决?
报错原因
- 核心报错是你遍历
students.values()的时候,每个返回值是单个学生的全科目成绩字典,无法直接拆成course, grade两个变量,所以触发ValueError: too many values to unpack (expected 2) - 额外的问题:代码缺少必要缩进,成绩保存为字符串类型无法直接和数字4比较,遍历逻辑混乱(取到学生姓名后又遍历了所有学生的成绩,没有对应到当前学生)
修复后的完整代码
students = {('Ozols', 'Jānis'): {'Math': '10', 'ProgVal': '5', 'Sports': '5'}, ('Krumiņa', 'Ilze'): {'Math': '7', 'ProgVal': '3', 'Sports': '6'}, ('Liepa', 'Peteris'): {'Math': '3', 'ProgVal': '7', 'Sports': '7'}, ('Lapsa', 'Maris'): {'Math': '10', 'ProgVal': '10', 'Sports': '3'}} courses = ['Math', 'ProgVal', 'Sports'] def fail(): # 同时遍历学生姓名元组和对应的成绩字典 for (lName, fName), score_dict in students.items(): # 遍历当前学生的每门课程成绩 for course, grade_str in score_dict.items(): # 把字符串类型的成绩转为整数 grade = int(grade_str) if grade < 4: print(fName, lName) # 只要有一门不及格就打印,跳出循环避免重复打印同一个学生 break while True: print() command = input("command:> ") command = command.lower() if command == 'fail': fail() elif command == 'done': break print("DONE")
运行效果
输入fail命令后会输出所有至少有一门成绩低于4分的学生:
Ilze Krumiņa Peteris Liepa Maris Lapsa
如果需要同时输出不及格的课程,删掉break,把打印语句改成print(fName, lName, course, grade)即可。
内容的提问来源于stack exchange,提问作者Muffin
相关产品推荐
相关产品推荐

