Функции и списки
Аргументом может быть любое значение, в том числе список. Функция, получившая список, может пройти по нему циклом и вернуть результат. Эта функция считает, сколько чисел в списке больше заданного предела:
def count_over(numbers, limit):
count = 0
for number in numbers:
if number > limit:
count += 1
return count
temperatures = [18, 25, 31, 22, 28]
print(count_over(temperatures, 24))
print(count_over([5, 10, 15], 7))Выведется:
3
2Параметр numbers хранит тот список, который передан в вызове: сначала список temperatures, затем [5, 10, 15]. Подсчёт вы знаете из урока про циклы, но теперь он внутри функции, поэтому считать в любом списке можно одной строкой. А поскольку count — локальная переменная, каждый вызов снова начинается с 0.
Обратите внимание, где стоит return: после цикла, когда все числа проверены. В Python это определяет отступ: у return count такой же отступ, как у for, поэтому он не входит в цикл. Частая ошибка — сделать отступ на уровень больше, внутрь цикла:
def count_over(numbers, limit):
count = 0
for number in numbers:
if number > limit:
count += 1
return count
temperatures = [18, 25, 31, 22, 28]
print(count_over(temperatures, 24))Выведется:
0Теперь return находится в теле цикла. Он завершает всю функцию, а вместе с ней и цикл, уже на первой итерации. Функция проверила только первое число, 18, поэтому вернула 0.
Функция может возвращать и список: создайте пустой список перед циклом, добавляйте в него элементы с помощью .append() в цикле и верните его после цикла. А ещё функция может использовать другие функции, например sum() и len().
Задание
- 1
Программа завершается ошибкой
NameError: name 'average' is not defined. Напишите функцию вместо комментария: уaverageесть параметрnumbers, и она возвращает среднее значение чисел списка, то есть их сумму, делённую на их количество. Сложить числа можно циклом или с помощьюsum(), аlen(numbers)подскажет, сколько их. Тогда программа выведет средние температуры двух недель,21.0и13.0. - 2
Под функцией
averageнапишите функциюwarm_daysс двумя параметрами,temperaturesиlimit. Она возвращает новый список температур, которые большеlimit. В конце программы выведитеwarm_days(week1, 20). Программа выведет[21, 24, 23].