python - 我该如何解决这个“ValueError:没有足够的值来解包(预期为 3,得到 2)”?
问题描述
请帮我完成我的任务!
我的目标是用户可以选择他/她想在某个科目中看到的成绩。输出应该是这样的:
Name: Mary , Math Grade: 98
这是我到目前为止所拥有的:
N = int(input("Please enter number of students: "))
while (N < 2 or N > 10):
N = int(input("Please only enter 2 - 10 students: "))
name = []
math_grade = []
science_grade = []
while (N != 0):
name.append(input('Enter name:'))
math_grade.append(input('Enter grade in math:'))
science_grade.append(input('Enter grade in science:'))
N = N - 1
record = []
record.append(name)
record.append(math_grade)
record.append(science_grade)
Class_Record = {}
for name, math_grade, science_grade in record:
Class_Record[name] = {"name": name, "math grade": math_grade, "science grade": science_grade }
那时我不断收到价值错误。我也不知道如何打印它以获得我想要的东西。
如果您能帮我修复错误并告诉我如何打印所需的输出,我将不胜感激!!!
解决方案
问题是您如何组织record
列表。
这行代码期望中的每个项目record
都是一个包含三个项目的子列表:姓名、数学成绩和科学成绩。
for name, math_grade, science_grade in record
所以它期望record
是这样的:
record = [
["Jim", "B", "C"],
["Mary", "A", "B"],
]
但相反,你做record
了一个名字的子列表,然后是数学成绩的子列表,然后是科学成绩的子列表:
record = [
["Jim", "Mary"],
["B", "A"],
["C", "B"]
]
因此,当代码将第一项拉入 时record
,它是一个只有两项的列表,您告诉它期望三个。(如果你有三个学生,代码会“工作”,但不是你想要的方式。)
所以你要么必须改变你把东西放进record
去的方式来匹配你把它们拉出来的方式,要么改变你把它们拉出来的方式。
实际上,它似乎record
只是一个临时变量,仅用于构建Class_Record
. 如果这是真的,您可以直接构建Class_Record
:
Class_Record = {}
while (N != 0):
name = input('Enter name:')
math_grade = input('Enter grade in math:')
science_grade = input('Enter grade in science:')
Class_Record[name] = {'math_grade': math_grade, 'science_grade': science_grade)
N = N - 1
推荐阅读
- gmail-addons - 缺少 gmail 插件
- jquery - 使用 bootstrap v4 时 jquery slideToggle 不起作用
- html - href mailto 和 iOS Safari
- excel - 如何一起使用 COUNTIFS 和 CONCATENATE
- python - 当 github 文件更新时启动 python 脚本
- mysql - 获取所有字段、所有行的表上的索引
- python - 每次更改时如何打印选定的 OptionMenu 项目?
- python-3.x - python3和scrapy路径
- vue.js - VueJS 在方法函数中设置数据
- scala - Dataset.reduce 不支持速记功能