在max()操作期间接收ValueError

时间:2015-01-07 14:42:49

标签: python-3.x

我正在尝试解决一个问题,我需要编写将采用任意数量的参数(所有整数)的代码,并返回所有参数的最小值和最大值之间差异的结果。这是我写的代码:

def checkio(*args):
    Max = max(args)
    Min = min(args)
    difference = Max - Min
    return difference

但是我收到了这个错误:

ValueError: max() arg is an empty sequence

但是如果我像这样抛出一个印刷声明

def checkio(*args):
    Max = max(args)
    Min = min(args)
    difference = Max - Min
    print(difference)
    return difference

它确实打印出差异。

2

所以,如果差异变量具有正确的值,为什么它不能再跳下一行并返回呢? 另外,如果max()导致问题,为什么它首先会降低差异?

标记软件正在运行它作为第一个测试:

checkio(1, 2, 3)

3 个答案:

答案 0 :(得分:0)

min或max函数采用像列表或字符串这样的可迭代对象,多个参数也可以。 所以你可以改变这样的代码:

def checkio(*args):

  Max = max(args)
  Min = min(args)

  difference = Max - Min

  return difference
print checkio(1,2,3,-1,9)

如果您将列表作为参数,请尝试以下方式:

def checkio(args):

  Max = max(args)
  Min = min(args)

  difference = Max - Min

  return difference
print checkio([1,2,3,-1,9])
参数列表中的

star(*)表示你可以将任何参数传递给函数。但是你必须把*参数放在最后一个像:

def sum_all(one, *args):

  return one +  sum(args)

print sum_all(1,1,2,3,34)

答案 1 :(得分:0)

获取该错误消息的唯一方法是将空序列传递给maxmin函数,例如

>>> max(())
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    max(())
ValueError: max() arg is an empty sequence
>>> min(())
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    min(())
ValueError: min() arg is an empty sequence

在您的情况下,如果您在没有任何参数的情况下调用checkioargs将是一个空元组。这就是您收到此错误消息的原因。

答案 2 :(得分:0)

你的功能似乎是正确的:

$ python3
Python 3.4.1 (default, Nov 28 2014, 00:41:19) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def checkio(*args):
...     Max = max(args)
...     Min = min(args)
...     difference = Max - Min
...     return difference
... 
>>> checkio(2,3,4)
2

在运行没有任何参数的函数时,我只得到了错误:

>>> checkio()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in checkio
ValueError: max() arg is an empty sequence
>>>