继续得到一个ValueError:没有足够的值来解包(预期2,得到1)

时间:2017-06-16 18:43:21

标签: python python-3.x debugging

我的任务:

  

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

以下是代码:

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)。 我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

您使用了错误的语法。我相信您要做的是将minmax初始化为列表的第一个元素。您使用的分配是多次分配 - 左侧有两个变量,右侧必须有两个值。

但是你希望用户输入输入正常;只需split您选择的分隔符上的输入,然后将其用于split

另外,请记住将值从字符串转换为int(左侧作为学生的练习)。

您提供的错误的重要语法是

min = max = data[0]

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

答案 1 :(得分:1)

您的代码中存在错误:

  1. 您应该定义列表格式。例如输入数字由&#34;,&#34;,&#34;&#34;分隔。等
  2. 当您将data[0]分配给minmax时,您必须将=放在minmax之间。
  3. 请在代码中进行更改,如下所示:

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

    请提供input列表number1number2number3等。

    这将正常工作。

答案 2 :(得分:0)

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

改为使用:

max, min = data

答案 3 :(得分:0)

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

执行此操作将输入转换为列表:

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

对于min和max,你通过说

分配两个值
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()