#python #return-value
Вопрос:
Поэтому в настоящее время я пытаюсь создать простую функцию, которая принимает список чисел и создает новый список, содержащий разницу между каждым элементом и его последующим элементом.
например
difference([1, 2, 5, 3])
бы вернулся [1, 3, -2]
теперь мой код
def difference(numbers):
for number in numbers:
i=0
dif_list=[]
while i < len(numbers)-1:
dif_list.append(numbers[i 1]-numbers[i])
i =1
if len(dif_list) == len(numbers)-1:
return print(dif_list)
Это возвращает правильный вывод, но когда я пытаюсь использовать утверждение для его проверки, оно говорит об ошибке утверждения.
assert difference([1, 2, 5, 3]) == [1, 3, -2]
выдает
<ipython-input-23-c9c23c8f4955> in <module>
----> 1 assert difference([1, 2, 5, 3]) == [1, 3, -2]
Знает ли кто-нибудь сейчас, почему это происходит?
Комментарии:
1.«Теперь мой код: возвращает правильный вывод» Нет, это не так. Он печатает список, который вас интересует. Он возвращается
None
. Пожалуйста, хорошенько подумайте о том, чтоreturn print(dif_list)
на самом деле означает. Подумайте о том, что значит возвращать значение, и о том, что2. Зачем вам нужны две петли для повторения одномерной последовательности?
Ответ №1:
Если вы вернетесь напрямую , удалив print
, это будет работать:
def difference(numbers):
for number in numbers:
i=0
dif_list=[]
while i < len(numbers)-1:
dif_list.append(numbers[i 1]-numbers[i])
i =1
if len(dif_list) == len(numbers)-1:
return (dif_list)
assert difference([1,2,5,3]) == [1, 3, -2]
Ответ №2:
def difference(numbers):
dif_list=[]
i = 0
while i < len(numbers)-1:
dif_list.append(numbers[i 1]-numbers[i])
i =1
if len(dif_list) == len(numbers)-1:
return dif_list
assert difference([1,2,5,3]) == [1, 3, -2]
print('pass')
Выход: pass
Основная проблема заключалась в том, что вы возвращали print (), но я также переместил ваш dif_list за пределы цикла for, потому что это имело смысл. Не сильно изменился, но именно туда я бы его и поместил. Я бы, наверное, тоже немного переработал это, но сейчас это все равно работает.
РЕДАКТИРОВАТЬ — Я не мог не провести небольшой рефакторинг, потому что ваш for
цикл совершенно не нужен, он ничего не делает.
Комментарии:
1. Да, я понял, что делаю много действительно ненужных битов в своем коде, которые иногда бесполезны, а иногда надоедливы. Большое спасибо!