我正在尝试解决一个问题,我需要编写将采用任意数量的参数(所有整数)的代码,并返回所有参数的最小值和最大值之间差异的结果。这是我写的代码:
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)
答案 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)
获取该错误消息的唯一方法是将空序列传递给max
和min
函数,例如
>>> 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
在您的情况下,如果您在没有任何参数的情况下调用checkio
,args
将是一个空元组。这就是您收到此错误消息的原因。
答案 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
>>>