In dieser Aufgabe sollen Sie die Lagerbestände eines Supermarkts modellieren. Der
Lagerbestand einer Ware ist entweder verzehrbar oder nicht-verzehrbar.
Sie können die gesamte Funktionalität mit dem beigefügten Skript test_supermarket.py
testen. Das Testskript soll nicht verändert werden.
(a) Erstellen Sie zunächst zwei Datenklassen Food und NonFood, wobei NonFood ei-
ne leere Klasse ist und Food ein Mindesthaltbarkeitsdatum enthält. Modellieren
Sie das Datum dabei als einen String, der für den 14. Februar 2021 das Format
"2021-02-14" hat1 . Dieses Format erlaubt es, die lexikographische Ordnung zu
verwenden, um herauszufinden ob eines von zwei Daten weiter in der Zukunft
liegt als das andere.
Erstellen Sie die Datenklasse Stock mit folgenden Feldern: Namen der Ware
name, Anzahl der gelagerten Waren units, Stückpreis in Cents price_per_unit
sowie kind. Das Feld kind soll eine Instanz der Datenklassen Food oder NonFood
enthalten, definieren Sie es also als Union-Typ über die beiden Datenklassen.
(b) Schreiben Sie eine Funktion is_expired, die einen Lagerbestand und ein Da-
tum als Argumente nimmt und zurückgibt, ob der Lagerbestand zu diesem
Datum abgelaufen ist. Verzehrbare Waren gelten dabei ab einem Tag nach ih-
rem Mindesthaltbarkeitsdatum als abgelaufen. Nicht-verzehrbare Waren gelten
nie als abgelaufen. Verwenden Sie Pattern Matching, um den Inhalt des Feldes
kind zu prüfen.
Hier mein Ansatz:
Code: Alles auswählen
from dataclasses import dataclass
@dataclass
class Food:
mhd: str
@dataclass
class NonFood:
pass
@dataclass
class Stock:
name: str # name of the goods
units: int # amount of the goods
price_per_unit: int # in cents
kind: Food | NonFood
def is_expired(stk: Stock, date: str):
match stk.kind:
case Food(mhd):
print("lezter tag an dem nicht abgelaufen")
print(Food(mhd), date)
case Food.mhd:
print("Hi")
case NonFood():
print("kann nicht ablaufen")
def get_expired(unit: list, date: str):
abgelaufen = []
def buy():
pass
Code: Alles auswählen
from supermarket import Stock, Food, NonFood, get_expired, buy
def test_supermarket():
# test Stock
stocks: list[Stock] = [
Stock("Chocolate", 12, 199, Food("2020-12-07"), ),
Stock("Tooth Brush", 30, 299, NonFood())
]
print(f"Stocks: {stocks}")
assert stocks[0].name == "Chocolate"
assert stocks[0].units == 12
assert stocks[0].price_per_unit == 199
#assert stocks[0].kind.expiration_date == "2020-12-07"
assert stocks[1].name == "Tooth Brush"
assert stocks[1].units == 30
assert stocks[1].price_per_unit == 299
# test get_expired
# assert get_expired(stocks, "2020-12-05") == []
# assert get_expired(stocks, "2020-12-09") == [stocks[0]]
# test buy
# stock: Stock = Stock("Chocolate", 12, 199, Food("2020-12-07"))
# assert stock.units == 12
#assert buy(stock, 5) == 5
# assert stock.units == 7
# assert buy(stock, 25) == 7
# assert stock.units == 0
if __name__ == "__main__":
test_supermarket()