2016-01-29 8 views
-1

Я пытаюсь реализовать функцию makeNeg(), которая принимает список чисел и число, представляющее индекс в качестве параметра, и изменяет элемент списка по указанному индексу как отрицательный. Если номер в указанном индексе уже отрицательный, функция не должна изменять список. Функция должна проверить правильность индекса для списка. Если индекс недействителен для списка, функция не должна изменять список.Мне нужна помощь с этой функцией python

Я пытался решить эту проблему, но не могу найти способ ее запуска. Может ли кто-нибудь вести меня в правильном направлении? Спасибо за помощь!

+0

Должна ли функция генерировать исключение, если индекс за пределами границ? Как обычно. вы не будете проверять индекс и просто дадите 'list' throw' IndexError' для вас, если будет передан неверный индекс. – ShadowRanger

+0

Если индекс за пределами границ, он должен отправить строковое сообщение с сообщением («Этот индекс недействителен. Список не был изменен») – Amando

+0

«Отправить» строку «сообщение»? Как в 'print'? 'Return'? Оба они обычно считаются плохой формой (исключения - это правильный способ обработки недопустимого использования, подобного этому в Python). – ShadowRanger

ответ

0

вы получите некоторые проблемы с доступом к mylist[n], даже после проверки длины списка ...

Сначала вы можете сравнить длину списка с индексом:

def MkNeg(mylist, n): 
    if len(mylist)<n: 
     print ("Error, this index does not exist") 

Дело в том, вы не можете получить доступ к любому элементу списка, который не существует. Даже если он находится в позиции if/elif/else, так что он не будет выполнен. То, что я говорю, это

def MkNeg(mylist, n): 
    if len(mylist)<n: 
     print ("Error, this index does not exist") 
    elif mylist[n]>0: 
     #do ur stuff 

это не работает, потому что компилятор видит ссылку, которая не существует.

Вот почему вы должны try его:

def MkNeg(mylist, n): 
    try: 
     if mylist[n]>0: 
      mylist[n]=-mylist[n] 
    except IndexError: 
     print ("Index doesn't exist for this list.") 
    return mylist 

Я не проверял длину, потому что вы получите IndexError, если индекс не существует.

Что пытается сделать, это попытка выполнить команду. Если это не удастся, вы можете выполнить дальнейшее выполнение с помощью except. Если нет, все в порядке.

+0

Большое вам спасибо за помощь! Это очень помогло мне! – Amando

+0

Примечание. Альтернативный вариант, который позволяет избежать необходимости в проверке, заключается в следующем: 'mylist [n] = -abs (mylist [n])'; беря абсолютное значение, а затем отрицая его, вы получаете отрицательное значение независимо от того, что не связано с тестированием. – ShadowRanger

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