2015-01-07 4 views
2

Я пытаюсь решить проблему, когда мне нужно написать код, который будет принимать произвольное количество аргументов (все целые числа) и вернуть результат разности между min и max всех аргументы. Это код, который я написал выше:Получение ValueError во время операции max()

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

единственный способом получить сообщение об ошибке, это пропускание пустой последовательности для 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 будет пустой кортеж. Вот почему вы получаете это сообщение об ошибке.

+0

Вы были определенно правильно. код был установлен с помощью простого Try/за исключением Где я устанавливаю за исключением: кроме ValueError: возврата 0 – Pyth0n2

0

Минимальная или максимальная функция взять Iterable объект как список или строки, более одного параметра также хорошо. так что вы можете изменить код так:

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]) 

звезда (*) в списке параметров означает вы можете передать любой параметр (ы) с function.But вы должны поставить * параметр в последнем, как:

def sum_all(one, *args): 

    return one + sum(args) 

print sum_all(1,1,2,3,34) 
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 
>>>