В вагоне-купе имеется некоторое количество купе, в каждом из которых по 4 места

Есть задача из учебника Ю.Петрова (5.2.12). Шаблон решения:

data = [
{1: 'м', 2: 'м', 3: 'м', 4: 'ж'},
{1: 'ж', 2: 'м', 3: 'ж', 4: 'ж'},
{1: 'ж', 2: 'ж', 3: 'ж', 4: 'ж'},
{1: 'м', 2: 'м', 3: 'м', 4: 'м'},
{1: None, 2: None, 3: None, 4: None},
{1: 'м', 2: None, 3: None, 4: 'ж'},
{1: None, 2: None, 3: None, 4: None},
{1: 'м', 2: 'м', 3: None, 4: 'м'},
{1: 'ж', 2: None, 3: None, 4: 'ж'}]

def vacant_compartments(data):
    """Вернуть список полностью свободных купе. Нумерация купе идет с 1.

    Параметры:
    - data (list of dict): данные о занятости мест в вагоне.

    Результат:
    list of int."""

    vacant_compartments_count = []
    hand_index = 0
    for compartsment in data:
       hand_index += 1
       if all([v is None for v in compartsment.values()]):
           vacant_compartments_count.append(hand_index)

    return vacant_compartments_count

def vacant_seats(data, compartments_condition=None, seat_condition=None):
    """Вернуть список свободных мест при соблюдении условий   
    'compartments_condition' и 'seat_condition'.
    Нумерация купе и мест идет с 1.

    Параметры:
    - data (list of dict): данные о занятости мест в вагоне;
    - compartments_condition (function):
      функция c 1 параметром (словарь - купе), возвращающая True/False;
    - seat_condition (function):
      функция c 2 параметрами (номер места, значение),
      возвращающая True/False.

    Результат:
    list of tuple: список кортежей вида (номер купе, номер места)."""
    # Удалите комментарий и допишите код

def is_same_sex_and_vacant(compartment, sex):
    """Вернуть True, если в купе 'compartment' есть свободные места,
    а остальные пассажиры только пола 'sex'.

    Параметры:
    - compartment (dict): данные о купе;
    - sex (str): пол ("м" или "ж").

    Результат:
    bool."""
    # Удалите комментарий и допишите код


# список полностью свободных купе
print(vacant_compartments(data))
# список свободных мест в вагоне
print(vacant_seats(data))
# список свободных нижних мест
print(vacant_seats(data, seat_condition=lambda seat, value: seat % 2 != 0))
# список свободных верхних мест
# Удалите комментарий и допишите код
# список свободных мест в купе с исключительно мужской компанией
print(vacant_seats(data, lambda x: is_same_sex_and_vacant(x, "м")))
# список свободных мест в купе с исключительно женской компанией
# Удалите комментарий и допишите код
# --------------
# Пример вывода:
#
# [5, 7]
# [(5, 1), (5, 2), (5, 3), (5, 4), (6, 2), (6, 3), (7, 1), (7, 2), (7, 3),
#  (7, 4), (8, 3), (9, 2), (9, 3)]
# [(5, 1), (5, 3), (6, 3), (7, 1), (7, 3), (8, 3), (9, 3)]
# [(5, 2), (5, 4), (6, 2), (7, 2), (7, 4), (9, 2)]
# [(8, 3)]
# [(9, 2), (9, 3)]

Не понимаю как реализовать два параметра в def vacant_seats(data, compartments_condition=None, seat_condition=None): 'compartments_condition' и 'seat_condition' в виде функций возвращающих True или False?

def vacant_compartments(data) - реализована мной.


Ответы (0 шт):