2014-09-11 6 views
-1

Любые идеи о том, почему этот код не работает? я получаю сообщение об ошибкеОбъект Python не подлежит подписке

def boxCheck(number1,number2,number3): 
    if number1 * number2 * number3 == 0 or number1 < 0 or number2 < 0 or number3 < 0: 
     return False 
    else: 
     numbers = [number1, number2, number3] 
     sortedNumbers = numbers.sort() 
     trial1 = number1 * number2 * number3 
     trial2 = sortedNumbers[1] * sortedNumbers[1] 
     if trial1 == trial2: 
      return True 
     else: 
      return False 

boxCheck(4,16,8) 
+3

Не просто сказать «Я все время получаю сообщение об ошибке», показать ошибку. Скопируйте его и вставьте сюда, с точным текстом, трассировкой и т. Д. В этом случае проблема была довольно очевидной, но часто она не является - и трассировка (которая скажет нам, что у вас определенно был тип TypeError: NoneType 'объект не подлежит расшифровке', и что именно на этом 'sortedNumbers [1]') является единственным способом начать его отладку. – abarnert

ответ

5

Что происходит, что sort()сортов списку в месте так это ничего не вернуть (на самом деле, она возвращает None), поэтому переменная sortedNumbers будет None.

Что вы можете сделать? Вы можете использовать sorted(), которая возвращает отсортированный список:

sortedNumbers = sorted(numbers) 

Примечание: Не забудьте распечатать результаты:

print(boxCheck(4,16,8)) 
0

Вот что руководство говорит о методе сортировки :

> Help on method_descriptor: 
> 
> sort(...) 
>  L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; 
>  cmp(x, y) -> -1, 0, 1 

Ваше заявление

sortedNumbers = numbers.sort() 

не приводит к сохранению в отсортированном количестве.

Смежные вопросы