【问题标题】:Keep getting a ValueError: not enough values to unpack (expected 2, got 1)不断收到 ValueError: not enough values to unpack (expected 2, got 1)
【发布时间】:2018-02-25 01:43:47
【问题描述】:

我的任务:

编写一个简短的 Python 函数 minmax(data),它接受一个序列 一个或多个数字,并返回最小和最大的数字, 以长度为 2 的元组的形式。不要使用内置 在实施您的解决方案时使用 min 或 max 函数。

代码如下:

def minmax():
    data = input("Enter a list of any input > ")
    max, min = data[0]
    for x in data:
        if x > max:
            max = x
        elif x < min:
            min = x
    print (max, min)
minmax()

这给了我ValueError: not enough values to unpack (expected 2, got 1)。 我该如何解决这个问题?

【问题讨论】:

  • 如果用户输入像1 2 4 5 10 33这样的数据,你可能需要做input('').split()
  • @depperm 用户应该如何输入数据才不会发生错误

标签: python python-3.x debugging


【解决方案1】:

您使用了错误的语法。我相信您要做的是将minmax 都初始化为列表的第一个元素。你使用的赋值是多重赋值——左边有两个变量,右边必须有两个值。

但是你希望用户输入输入就可以了;只需 split 在您选择的分隔符上输入,然后将其用于 split

另外,请记住将值从字符串转换为整数(留作学生练习)。

您给出的错误的重要语法是

min = max = data[0]

现在你可以继续你的循环了。

【讨论】:

  • 注意:ast.literal_eval is usually a good way to parse the input(因此输入 12, 25, 39, 1, 3, -2, 102, -5 会产生 tupleints)。照原样,OP 的代码是计算字符串中的最小和最大字符,而不是将字符串解析为有用的值“列表”。
  • @ShadowRanger:这就是为什么我建议转换为int。其他人已经讨论过输入问题,所以我决定不讨论这个问题。
【解决方案2】:

您的代码中存在错误:

  1. 您应该定义您的列表格式。比如输入数字用“,”等分隔。
  2. 当您将data[0] 分配给minmax 时,您必须将= 放在minmax 之间。

请按如下所示更改您的代码:

data =[int(x) for x in input().split(",")]
max = min = data[0]

请将input 列表提供为number1number2number3 等。

这将正常工作。

【讨论】:

    【解决方案3】:

    data 是一个元组,它以 (1, 2) 的形式保存您的输入项。你正在做data[0],这意味着你正在从data tuple 获得第一项,这只是一项,而不是两项。然后使用命令max, min = data[0] 告诉python 从一项data[0] 中提取两项。

    改为使用:

    max, min = data
    

    【讨论】:

      【解决方案4】:

      您尚未将输入转换为列表,并且您以错误的方式定义了最小值和最大值。

      这样做将输入转换为列表:

      data.split(" ") #if every number is separated by space
      

      对于最小值和最大值,您通过说

      来分配两个值
      min, max= data[0]
      

      这样做:

      min=max=data[0]
      

      你可以通过某种方式欺骗这个程序,只要条件不使用 min 和 max 函数。您正在以某种方式对列表进行排序。但是你也可以这样做:

      def minmax():
          data = input("Enter a list of any input > ")
          myList= data.split(" ")
          myList.sort()
          print(myList[0], "is minimum and", myList[-1],"is max")
      minmax()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-10
        • 2017-12-23
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-10-26
        • 2022-07-22
        • 2022-01-08
        相关资源
        最近更新 更多