try:
def odd_nr(list1):
results = []
for number in list1:
if number % 2 != 0:
print(number)
results.append(number)
return results
odd_nr([1,2,3,4,5,6])
Дальнейшее объяснение :
Любая функция может что-то взять и вернуть. Это что-то также может быть ничем, None
.
Ваша функция берет список и возвращает список, но возвращает тот же список, в котором она принимает.
print
оператор не возвращаемое значение. Это означает, что print
- это не то, что возвращает функция, это побочный эффект, боковая дверь, которую мы, люди, видим, в основном.
Чтобы вернуть список только нечетных чисел, вам нужно чтобы собрать их в другом списке во время итерации по исходному списку ввода.
Затем, как только вы закончите, return
список, который собрал все нечетные числа. Надеюсь, это поможет.
Я также немного обновил ваш код, for list1[i] in list1
, хотя он работает, его трудно понять, и он делает это по неправильным причинам, см. Ниже. Вы можете просто сделать for number in list1
, а также не беспокоиться о приращении любых счетчиков (i
в вашем случае).
Объяснение того, почему for list1[i] in list
работает :
Это интересно. Выбрав list1[i]
в качестве текущего итератора, мы будем изменять наш список во время итерации; К счастью, каждый итератор равен по значению элементу списка, который он мутирует. Вот пример, чтобы проиллюстрировать, что происходит. Это легко увидеть, когда мы не обновляем i
:
list1= [1,2,3,4]
i=0
for list1[i] in list1:
print(list1[i])
print(list1)
Вывод:
1
2
3
4
[4, 2, 3, 4]