import math class Key: how_many_keys = 0 # Initialisierung eines Schlüssels def __init__(self, keynumber): self.number = keynumber self.possessor = "Reception" #where are the keys def status_key(self, keynumber=None): return self.number, self.possessor def hand_out_key(self, keynumber, Guest): self.possessor = Guest def get_back_key(self, keynumber): self.possessor = "Reception" key_list = [] for i in range(11, 42, 10): a = "key_" + str(i) + " = Key(" + str(i) + ")" exec(a) a2 = "key_list.append(key_" + str(i) + ")" exec(a2) b = "key_" + str(i+1) + " = Key(" + str(i+1) + ")" exec(b) b2 = "key_list.append(key_" + str(i+1) + ")" exec(b2) class Client(): months = ['Januar', 'Februar','März','April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] all_clients[] clients = 0 def __init__(self, name: str, surname: str, client_num: int, room_num: int, period, key_num: int, bookings, status: bool): self.name = name self.surname = surname self.client_num = client_num self.room_num = room_num self.period = period self.key_num = key_num self.bookings = bookings self.status = status # Automatic status adjustment if len(self.bookings) >= 4: self.status = True Client.clients += 1 def change_room(self, surname, room_num = 0, key_num = 0): # Room add period self.room_num = room_num num_ = "key_" + str(key_num) + ".hand_out_key(" + str(key_num) + "," + "'" + str(surname) + "')" try: exec(num_) self.key_num = key_num except: ("Schlüssel mit Daten nicht gefunden.") def name_change(self, name, surname): self.name = name self.surname = surname # Length of stay as print def period_print(self): stay_period = [] num_string = "" for i in self.period: if i.isnumeric(): num_string += i if i == ",": stay_period.append(num_string) num_string = "" stay_period.append(num_string) print(stay_period) stay_period = tuple(stay_period) # Same month if stay_period[1] == stay_period[3]: days = int(stay_period[0]) - int(stay_period[2]) month_num = int(stay_period[1]) + 1 month_print = Client.months[month_num] print("Der Kunde bleibt", abs(days), "Tage.") print("Vom", stay_period[0], "bis", stay_period[2], month_print) # Across months if stay_period[1] != stay_period[3]: # Stay period more than 1 month if int(stay_period[3]) - int(stay_period[1]) > 1: days = 28 - int(stay_period[0]) + int(stay_period[2]) + \ ((int(stay_period[3]) - int(stay_period[1])-1) * 28) # Stay period else: days = 28 - int(stay_period[0]) + int(stay_period[2]) month_num_1 = int(stay_period[1]) - 1 month_num_2 = int(stay_period[3]) - 1 month_print_1 = Client.months[month_num_1] month_print_2 = Client.months[month_num_2] print("Der Kunde bleibt", abs(days), "Tage.") print("Vom", stay_period[0], month_print_1, "bis", stay_period[2], month_print_2) # Client information def info(self, action = None): dic_ = {"Name" : self.name, "Nachname" : self.surname, "Kundennummer" : self.client_num, "Zimmernummer" : self.room_num, "Aufenthaltsdauer": self.period, "Schlüsselnummer" : self.key_num, "Buchungen" : self.bookings, "VIP-Status" : self.status } if action != None: # If asked client information is stay period if action == "Aufenthaltsdauer": client_num = self.client_num stay = str(client_num)+ ".period_print()" exec(stay) # If asked client information is different if action != "Aufenthaltsdauer": for i in dic_: if i == action: print(action, "ist", dic_[i]) else: for i in dic_: print(i.ljust(16), ": ", dic_[i]) w43 = Client("David", "Gebert", "w43", 0, "01,02,03,03", 22, (51,61,77), False) w43.period_print()