В вагоне-купе имеется некоторое количество купе, в каждом из которых по 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) - реализована мной.