эй, так что я писал код, который сначала вводит количество учеников, а затем спрашивает у пользователя имя и оценки по 3 предметам, что я хочу сделать, это принять имя / должность ученика и отобразить его / ее имя и оценку и средние оценки

вот код:

lst = []
n=int(input("Enter number of students:"))

for i in range(0,n):
    x=input("Enter name:")
    y=int(input("Enter physics marks:"))
    z=int(input("Enter maths marks:"))
    a=int(input("Enter chemistry marks:"))

    avg=(y+z+a)/3


    lst.append((x,y,z,a,avg,))

b=int(input("Enter the number of the student:"))

for x,y,z,a,avg in lst[b-1]:
    print(x,":",y,z,a,avg,)
    print(x,avg,)

я получаю эту ошибку:

for x,y,z,a,avg in lst[b-1]:
ValueError: not enough values to unpack (expected 5, got 3)

Любое улучшение оценивается как я новичок в Python, спасибо!

0
Aaryansh Sahay 19 Дек 2019 в 22:55

4 ответа

Вы можете создать список для каждого материала, но в том же порядке, как студент: попробуйте этот код, вы поймете, что я имею в виду и сможете адаптироваться к вашей цели:

student = ['xavier', 'lucy','anna','leo']
math = [2,8,5,6]
phys = [8,5,6,7]

l = []
for s,m,p in zip(student, math,phys):
    l.append((s,m,p))
n=int(input('Which student?'))
print('the full info',l[n])
print('\nonly name and phys :) :\n',l[n][0], l[n][2])
0
mtpelerin 19 Дек 2019 в 20:49

Если вы печатаете только одного студента, вам не нужен for для этого, что-то вроде этого должно работать:

x,y,z,a,avg = lst[b-1]

print(x,":",y,z,a,avg)
print(x,avg)

И ошибка возникает потому, что вы запускаете for только для одного студента, поскольку lst[b-1] является студентом.

0
Marcos 19 Дек 2019 в 20:04

Исправление состоит в том, чтобы удалить цикл for.

lst = []
n=int(input("Enter number of students:"))

for i in range(0,n):
    x=input("Enter name:")
    y=int(input("Enter physics marks:"))
    z=int(input("Enter maths marks:"))
    a=int(input("Enter chemistry marks:"))

    avg=(y+z+a)/3


    lst.append((x,y,z,a,avg,))

b=int(input("Enter the number of the student:"))

x,y,z,a,avg = lst[b-1]
print(x,":",y,z,a,avg,)
print(x,avg,)

Объяснение :

Пример сеанса:

Enter number of students:1
Enter name:fred
Enter physics marks:30
Enter maths marks:21
Enter chemistry marks:23
Enter the number of the student:1
Traceback (most recent call last):
  File "----", line 17, in <module>
    for x,y,z,a,avg in lst[b-1]:
ValueError: not enough values to unpack (expected 5, got 4)

Проблема в том, что Python пытается перебрать значения. Значение lst[b-1] равно ('fred', 30, 21, 23, 24.666666666666668). Вы сказали ему сделать переменные x,y,z,a,avg из него, поэтому он пытается с первым элементом: 'fred'. В нем всего четыре символа, а не пять, как хотелось бы распаковать, поэтому выдается ошибка.

Чтобы исправить это, мы просто говорим Python о том, чтобы сделать целое lst[b-1] из пяти переменных, а не просто его первый элемент.

2
Ed Ward 19 Дек 2019 в 20:06

Так как вы создаете список списков. затем перебирать их нужно.

for sub_list in list:
    print(sub_list)

Если вы хотите распечатать четвертого студента, вы можете просто использовать:

print(lst[b-1])
('John', 5, 4, 3, 4.0)
0
marxmacher 19 Дек 2019 в 20:07