Как я могу исправить эту «ValueError: недостаточно значений для распаковки (ожидалось 3, получено 2)»? - PullRequest
0 голосов
/ 17 июня 2020

Пожалуйста, помогите мне с моим заданием!

Моя цель состоит в том, чтобы пользователь мог выбрать, чью оценку он / она хочет видеть по определенному предмету. Результат должен быть примерно таким:

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 }

Я продолжаю получать ошибку значения в этот момент. Я также не знаю, как распечатать его, чтобы получить то, что я хочу.

Если вы можете помочь мне исправить ошибку и рассказать, как я могу распечатать желаемый результат, я был бы очень благодарен !!!

Ответы [ 3 ]

1 голос
/ 17 июня 2020

Проблема в том, как вы организовали список 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
0 голосов
/ 17 июня 2020

Вы можете изменить свой код, как показано ниже

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)
0 голосов
/ 17 июня 2020
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:')
    temp = {'name': name, 'math grade': math_grade, 'science grade': science_grade}
    Class_Record.append (temp)
    N = N - 1

print (Class_Record)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...