【问题标题】:value error not enough values left to unpack值错误没有足够的值来解压
【发布时间】:2019-12-19 19:55:28
【问题描述】:

嘿,所以我正在编写一个代码,它首先输入学生人数,然后询问用户姓名和 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 新手,谢谢!!

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    解决方法是删除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】:

      如果您只打印一个学生,则不需要for,这样应该可以:

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

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

      【讨论】:

        【解决方案3】:

        因为您正在创建列表列表。那么你应该迭代它们。

        for sub_list in list:
            print(sub_list)
        

        如果你想打印出第 b-n 个学生,那么你可以使用:

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

        【讨论】:

          【解决方案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])
          

          【讨论】:

            猜你喜欢
            • 2021-12-12
            • 1970-01-01
            • 1970-01-01
            • 2021-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-17
            • 1970-01-01
            相关资源
            最近更新 更多