Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复此“ValueError:没有足够的值来解包(预期值为3,实际值为2)”?_Python_Python 3.x - Fatal编程技术网

Python 如何修复此“ValueError:没有足够的值来解包(预期值为3,实际值为2)”?

Python 如何修复此“ValueError:没有足够的值来解包(预期值为3,实际值为2)”?,python,python-3.x,Python,Python 3.x,请帮我完成作业 我的目标是,用户可以选择他/她想在某个科目中看到的分数。输出应如下所示: Name: Mary , Math Grade: 98 record = [ ["Jim", "B", "C"], ["Mary", "A", "B"], ] 这就是我到目前为止所做的: N = int(input("Please enter number of students: ")) while (N < 2 or N > 10): N = int(input

请帮我完成作业

我的目标是,用户可以选择他/她想在某个科目中看到的分数。输出应如下所示:

Name: Mary , Math Grade: 98
record = [
    ["Jim", "B", "C"],
    ["Mary", "A", "B"],
]
这就是我到目前为止所做的:

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 }
我一直在那一点上得到值错误。我也不知道如何打印它来得到我想要的


如果你能帮我纠正错误,告诉我如何打印我想要的输出,我将非常感激

问题在于如何组织记录列表

这行代码期望记录中的每个项目都是一个子列表,包含三个项目:名称、数学成绩和科学成绩

for name, math_grade, science_grade in record
所以它期望记录是这样的:

Name: Mary , Math Grade: 98
record = [
    ["Jim", "B", "C"],
    ["Mary", "A", "B"],
]
但相反,你记录的是一个名字的子列表,然后是一个数学成绩的子列表,然后是一个科学成绩的子列表:

record = [
    ["Jim", "Mary"],
    ["B", "A"],
    ["C", "B"]
]
因此,当代码提取记录中的第一项时,它是一个只有两项的列表,您告诉它应该有三项。如果你有三个学生,代码会工作,但不是你想要的方式

所以,你要么改变你把事情记录下来的方式,以匹配你取出它们的方式,要么改变你取出它们的方式

事实上,record似乎只是一个临时变量,只用于构建类\ U record。如果这是真的,您可以直接构建Class_记录:

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

您可以像下面这样更改代码

N = int(input("Please enter number of students: "))

while (N < 2 or N > 10):
    N = int(input("Please only enter 2 - 10 students: "))


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]={"name": name, "math grade": math_grade, "science grade": science_grade}
    N = N - 1

print(Class_Record)
请注意,记录是一个列表列表。for循环的每次迭代都将尝试将列表元素之一(即name、math_grade或science_grade)提取到三个同名变量中。如果name=['alice','bob'],循环的第一次迭代将尝试执行name,math_grade,science_grade=['alice','bob'],这将导致您遇到的解包错误。