值错误没有足够的值来解压

时间:2019-12-19 19:55:28

标签: python python-3.x list

嘿,所以我正在编写一个代码,该代码首先输入学生的人数,然后要求用户输入姓名并在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的新功能,谢谢!

4 个答案:

答案 0 :(得分:2)

解决方法是删除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]变成五个变量,而不仅仅是第一个变量即可。

答案 1 :(得分:0)

如果只打印一个学生,则不需要for,这样的方法应该可以工作:

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

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

发生错误是因为您for是一名学生,而您只为一名学生运行lst[b-1]

答案 2 :(得分:0)

由于您正在创建列表列表。然后应该遍历它们。

for sub_list in list:
    print(sub_list)

如果您想打印出第n名学生,则可以使用:

print(lst[b-1])
('John', 5, 4, 3, 4.0)

答案 3 :(得分:0)

您可以在同一订单中为每个学生创建一个列表,但请尝试以下代码:您会明白我的意思,并且能够适应您的目的:

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])