• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 10. Функции и рекурсия

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Является ли число простым»

Вы работаете на заводе по производству электронных компонентов. В конце смены необходимо проверить партию деталей и отобрать только те, которые соответствуют определённым критериям качества. У вас есть список с номерами деталей, и вам нужно применить различные фильтры для отбора годных изделий.
Напишите программу, которая принимает список чисел (номера деталей) и применяет к ним один из трёх возможных фильтров: отбор чётных номеров, отбор номеров больше заданного значения, или отбор номеров, кратных определённому числу.

Формат ввода

Первая строка содержит числа через пробел - номера деталей.
Вторая строка содержит тип фильтра: "even" (чётные), "greater" (больше значения), "multiple" (кратные числу).
Третья строка содержит параметр фильтра (для "greater" - пороговое значение, для "multiple" - делитель, для "even" - любое число, которое игнорируется)

Формат Вывода

Отфильтрованные номера деталей в порядке возрастания, каждый номер на отдельной строке

Пример

Ввод

1 2 3 4 5 6 7 8 9 10
even
0

Вывод

2
4
6
8
10

Подсказка

Lambda-функции в Python: Полное руководство

Lambda-функции в Python, также известные как анонимные функции, — это небольшие, как правило, одноразовые функции, которые определяются с помощью ключевого слова lambda. Их ключевая особенность в том, что они могут содержать только одно выражение и не имеют собственного имени, что делает их идеальным инструментом для задач, где полновесное определение функции через def было бы избыточным. Lambda-функции часто используются для создания коротких функций "на лету", например, в качестве аргументов для других, более высокоуровневых функций.

Основные характеристики lambda-функций

  • Анонимность: У lambda-функций нет имени, как у функций, определенных через def. Они являются объектами-функциями, которые можно присвоить переменной, но это не является их основной целью.
  • Одно выражение: Lambda-функция может содержать только одно-единственное выражение. Важно понимать, что результат вычисления этого выражения автоматически возвращается. Вам не нужно использовать ключевое слово return. Это их главное ограничение — в лямбдах нельзя разместить несколько команд, циклы или сложные условные конструкции.
  • Лаконичность: Основное преимущество lambda-функций — краткость кода. Они позволяют не засорять пространство имен одноразовыми функциями и делают код более компактным в определенных ситуациях.

Синтаксис lambda-функций

Синтаксис lambda-функции прост и элегантен:

lambda аргументы: выражение

  • lambda — ключевое слово.
  • аргументы — один или несколько аргументов, перечисленных через запятую (так же, как в обычной функции).
  • : — двоеточие, отделяющее аргументы от выражения.
  • выражение — одно выражение, результат которого будет возвращен.

Примеры использования lambda-функций

1. Простейшая lambda-функция

Хотя lambda-функции можно присваивать переменным, это часто считается не лучшей практикой. Если функции нужно имя, лучше использовать def. Тем не менее, для демонстрации это полезно.

Создание lambda-функции, которая возвращает квадрат числа:

квадрат = lambda x: x ** 2
print(квадрат(5))  # Вывод: 25

Полезный совет: Инструменты проверки кода (линтеры) часто помечают такое присваивание как антипаттерн. Если вы хотите дать функции имя для многократного использования, предпочтительнее стандартное определение:

def квадрат(x):
    return x ** 2

2. Lambda-функция с несколькими аргументами

Создание lambda-функции, которая складывает два числа:

сумма = lambda a, b: a + b
print(сумма(3, 4))  # Вывод: 7

3. Использование lambda-функций с встроенными функциями

Вот где lambda-функции действительно раскрывают свой потенциал. Они идеально подходят для передачи в качестве аргумента функциям map(), filter(), sorted() и другим.

Использование с map()

Функция map() применяет указанную функцию к каждому элементу итерируемого объекта и возвращает итератор с результатами.

числа = [1, 2, 3, 4, 5]
квадраты = list(map(lambda x: x ** 2, числа))
print(квадраты)  # Вывод: [1, 4, 9, 16, 25]

Полезный совет: Для простых операций, как в этом примере, более "питоничным" (Pythonic) и часто более читаемым способом являются списковые включения (list comprehensions):

квадраты_alt = [x ** 2 for x in числа]
print(квадраты_alt) # Вывод: [1, 4, 9, 16, 25]

Использование с filter()

Функция filter() возвращает итератор, состоящий только из тех элементов, для которых переданная функция вернула True.

числа = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
четные = list(filter(lambda x: x % 2 == 0, числа))
print(четные)  # Вывод: [2, 4, 6, 8, 10]

Полезный совет: Здесь также списковое включение с условием будет отличной альтернативой:

четные_alt = [x for x in числа if x % 2 == 0]
print(четные_alt) # Вывод: [2, 4, 6, 8, 10]

Использование с sorted()

Функция sorted() возвращает новый отсортированный список. Lambda-функции здесь незаменимы для указания сложного ключа сортировки без необходимости определять отдельную функцию.

студенты = [("Алиса", 25), ("Боб", 22), ("Чарли", 23)]
# Сортируем список кортежей по второму элементу (возрасту)
отсортированные_студенты = sorted(студенты, key=lambda x: x[1])
print(отсортированные_студенты)
# Вывод: [('Боб', 22), ('Чарли', 23), ('Алиса', 25)]

Полезный совет: Это один из лучших примеров использования lambda. Создавать отдельную функцию def get_age(student): return student[1] только для этой одной сортировки было бы излишне.

4. Lambda-функции внутри других функций (Замыкания)

Lambda-функции могут быть возвращены из других функций. Это мощный прием, называемый замыканием (closure), где внутренняя функция "запоминает" контекст, в котором она была создана.

def умножение(n):
    # Эта функция возвращает другую функцию (лямбду)
    return lambda x: x * n

# Создаем функции на основе "фабрики" умножения
умножение_на_2 = умножение(2) # Здесь n=2 "запомнилось"
умножение_на_3 = умножение(3) # Здесь n=3 "запомнилось"

print(умножение_на_2(5))  # Вывод: 10
print(умножение_на_3(5))  # Вывод: 15

В этом примере lambda x: x * n "захватывает" значение переменной n из внешней функции умножение и сохраняет его для последующих вызовов.

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!