73 lines
2.1 KiB
Python
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")
|