Files
exercism_puzzles/python/plane-tickets/generators.py
T

73 lines
2.1 KiB
Python

"""Functions to automate Conda airlines ticketing system."""
def generate_seat_letters(number):
"""Generate a series of letters for airline seats.
:param number: int - total number of seat letters to be generated.
:return: generator - generator that yields seat letters.
Seat letters are generated from A to D.
After D it should start again with A.
Example: A, B, C, D
"""
seat_letters: list = ["A", "B", "C", "D"]
for seat_number in range(number):
yield seat_letters[seat_number % len(seat_letters)]
def generate_seats(number):
"""Generate a series of identifiers for airline seats.
:param number: int - total number of seats to be generated.
:return: generator - generator that yields seat numbers.
A seat number consists of the row number and the seat letter.
There is no row 13.
Each row has 4 seats.
Seats should be sorted from low to high.
Example: 3C, 3D, 4A, 4B
"""
seat_letters = generate_seat_letters(number)
row_number = 1
for seat_number in range(number):
if not seat_number % 4 and seat_number > 0:
row_number += 1
if row_number == 13:
row_number += 1
yield f"{row_number}{next(seat_letters)}"
def assign_seats(passengers):
"""Assign seats to passengers.
:param passengers: list[str] - a list of strings containing names of passengers.
:return: dict - with the names of the passengers as keys and seat numbers as values.
Example output: {"Adele": "1A", "Björk": "1B"}
"""
seats = generate_seats(len(passengers))
assign_seats_dict: dict = {}
for passenger in passengers:
assign_seats_dict[passenger] = next(seats)
return assign_seats_dict
def generate_codes(seat_numbers, flight_id):
"""Generate codes for a ticket.
:param seat_numbers: list[str] - list of seat numbers.
:param flight_id: str - string containing the flight identifier.
:return: generator - generator that yields 12 character long ticket codes.
"""
for seat in seat_numbers:
yield f"{seat}{flight_id}".ljust(12, "0")