🏠 Домашнее задание

⚡ Кратко: домашнее задание

Функция - именованный блок кода, который можно вызывать много раз.

def создаёт функцию, pass временно оставляет обязательный блок пустым.

При вызове функции позиционные аргументы сопоставляются по порядку, именованные - по названию параметра.

Аргументы по умолчанию пишутся после обязательных параметров.

*args собирает лишние позиционные аргументы в tuple, **kwargs - именованные аргументы в dict.

return завершает функцию и возвращает значение; без return результатом будет None.

LEGB описывает поиск имён: Local, Enclosing, Global, Built-in.

global нужен только для изменения глобальной переменной, но чаще лучше передавать данные параметрами.

Топ-3 ошибки: передавать не то количество аргументов; ожидать значение от функции, где нет return; менять global там, где достаточно параметров и return.

Текст задания из LMS / источника

Простое число

Напишите функцию, которая проверяет, является ли число n простым и возвращает булевый результат.

n = 17

Пример вывода: Число 17 является простым

Фильтрация чисел по чётности

Функция принимает filter_type ('even' или 'odd') и произвольное количество чисел.

print(filter_numbers("even", 1, 2, 3, 4, 5, 6))
print(filter_numbers("odd", 10, 15, 20, 25))
print(filter_numbers("prime", 2, 3, 5, 7))

Пример вывода: [2, 4, 6] / [15, 25] / Некорректный фильтр

Объединение словарей

Функция принимает любое количество словарей и объединяет их. При повторе ключа берётся последнее значение.

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict3 = {"d": 5}

Пример вывода: {'a': 1, 'b': 3, 'c': 4, 'd': 5}

Пошаговое решение

Простое число

def is_prime(n):
    if n < 2:
        return False
    for divisor in range(2, int(n ** 0.5) + 1):
        if n % divisor == 0:
            return False
    return True

n = 17
if is_prime(n):
    print(f"Число {n} является простым")
else:
    print(f"Число {n} не является простым")

Достаточно проверять делители до квадратного корня числа.

Фильтрация чисел

def filter_numbers(filter_type, *numbers):
    if filter_type == "even":
        return [number for number in numbers if number % 2 == 0]
    if filter_type == "odd":
        return [number for number in numbers if number % 2 != 0]
    return "Некорректный фильтр"

print(filter_numbers("even", 1, 2, 3, 4, 5, 6))
print(filter_numbers("odd", 10, 15, 20, 25))
print(filter_numbers("prime", 2, 3, 5, 7))

*numbers делает функцию удобной для любого количества чисел.

Объединение словарей

def merge_dicts(*dicts):
    result = {}
    for dictionary in dicts:
        result.update(dictionary)
    return result

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict3 = {"d": 5}
print(merge_dicts(dict1, dict2, dict3))

update() перезаписывает повторяющиеся ключи значениями из более поздних словарей.

Проверка в VS Code

  1. Создайте файл main.py и перенесите решение.
  2. Запустите python main.py в терминале.
  3. Сравните вывод с примером из задания.
  4. Проверьте крайние случаи: пустые коллекции, повторяющиеся значения и некорректные параметры.