Схема мест в самолёте на Python

Содержание
Введение
Простейший пример
Далее по теме

Введение

В проекте airtravel печатается схема мест в салоне самолёта.

Пример метода seating_plan() из класса Aircraft

class Aircraft: def __init__(self, registration, model, num_rows, num_seats_per_row): self._registration = registration self._model = model self._num_rows = num_rows self._num_seats_per_row = num_seats_per_row def registration(self): return self._registration def model(self): return self._model # Letter I is not in use to avoid # collisions with number 1 def seating_plan(self): return (range(1, self._num_rows + 1), "ABCDEFGHJK"[:self._num_seats_per_row])

Простейший пример

Как печатается схема мест в самолёте:

seats = "ABCDEF" rows = range(1, 10) for r in rows: s = '' for seat in seats: s = s + seat print(r, s)

1 ABCDEF 2 ABCDEF 3 ABCDEF 4 ABCDEF 5 ABCDEF 6 ABCDEF 7 ABCDEF 8 ABCDEF 9 ABCDEF

Пример с параметрами

Немного усложним: теперь число рядов и количество мест в ряду будут задаваться параметрами.

Максимальной шириной будем считать десять мест, то есть буквы

ABCDEFGHJK

Буква I не используется так как похожа на единицу. Из этих десяти будем вырезать нужное количество.

num_rows = 9 num_seats_per_row = 6 seats = "ABCDEFGHJK"[:num_seats_per_row] rows = range(1, num_rows + 1) for r in rows: s = '' for seat in seats: s = s + seat print(r, s)

1 ABCDEF 2 ABCDEF 3 ABCDEF 4 ABCDEF 5 ABCDEF 6 ABCDEF 7 ABCDEF 8 ABCDEF 9 ABCDEF

Теперь сохраним план в виде кортежа

num_rows = 9 num_seats_per_row = 6 seating_plan = (range(1, num_rows + 1), "ABCDEFGHJK"[:num_seats_per_row]) rows, seats = seating_plan for r in rows: s = '' for seat in seats: s = s + seat print(r, s)

1 ABCDEF 2 ABCDEF 3 ABCDEF 4 ABCDEF 5 ABCDEF 6 ABCDEF 7 ABCDEF 8 ABCDEF 9 ABCDEF

Получился кортеж seating_plan в котором seating_plan[0] записали в rows а seating_plan[1] в seats

Создадим пустой список empty_airplane_plan с помощью генератора списков

from pprint import pp num_rows = 9 num_seats_per_row = 6 seating_plan = (range(1, num_rows + 1), "ABCDEFGHJK"[:num_seats_per_row]) rows, seats = seating_plan empty_airplane_plan = [[None for letter in seats] for _ in rows] pp(empty_airplane_plan)

[[None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None], [None, None, None, None, None, None]]

Теперь вместо None будем делать словарь вида A: None, B: None и т.д.

from pprint import pp num_rows = 9 num_seats_per_row = 6 seating_plan = (range(1, num_rows + 1), "ABCDEFGHJK"[:num_seats_per_row]) rows, seats = seating_plan empty_airplane_plan = [None] + [{letter: None for letter in seats} for _ in rows] pp(empty_airplane_plan)

[None, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}, {'A': None, 'B': None, 'C': None, 'D': None, 'E': None, 'F': None}]

Автор статьи: Андрей Олегович

Похожие статьи
ООП в Python
Классы
Методы
class variables
class methods
Статические методы
Наследование
super()
Специальные методы
dataclass
__slots__
Декоратор property
Полиморфизм

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: