Megoldás: A feladatsor egy lehetséges megoldása elérhető ide kattintva.
Egy borospincében szekrények vannak, amelyek polcain borokat tárolnak. Készítsd el a BorospinceException
, Bor
és Szekreny
osztályokat a feladatleírás alapján! A feladatok megoldását egyetlen Python szkriptbe készítsd el!
BorospinceException
osztály (2 pont)Hozz létre egy BorospinceException
nevű kivételosztályt, amely az Exception
beépített kivételosztályból öröklődik! Készíts egy egyparaméteres konstruktort az osztályon belül, amely egy hibaüzenetet vár paraméterben! A konstruktorban hívd meg az ősosztály konstruktorát és add át neki paraméterben a hibaüzenetet!
Bor
osztály (13 pont)Hozz létre egy Bor
osztályt, amely a _fajta
, _evjarat
és _alkoholtartalom
adattagokkal rendelkezik!
Az osztály konstruktora a bor fajtáját, évjáratát és alkoholtartalmát várja paraméterben (ebben a sorrendben)!
12.5
!_fajta
, _evjarat
és _alkoholtartalom
adattagokat a paraméterek alapján! (3 pont)Írj get és set property-t a _fajta
adattaghoz, fajta
néven! A getter adja vissza az adattag értékét, a setter pedig állítsa be azt a paraméterben kapott értékre! (2 pont)
Írj get és set property-t az _evjarat
adattaghoz, evjarat
néven! (1 pont)
Írj get és set property-t az _alkoholtartalom
adattaghoz is, alkoholtartalom
néven!
BorospinceException
típusú kivételt, amit a Nem megfelelo alkoholtartalom!
szöveggel inicializálj! (2 pont)Írd át az osztály konstruktorát úgy, hogy az alkoholtartalom értéke itt is ellenőrizve legyen! (1 pont)
Definiáld felül az osztályban az objektum szöveggé alakításáért felelő metódust úgy, hogy az a következő szöveggel térjen vissza: {_fajta} (evjarat: {_evjarat}), melynek alkoholtartalma: {_alkoholtartalom}%
(a kapcsos zárójelek helyére értelemszerűen a megfelelő értékek legyenek behelyettesítve)! (2 pont)
Definiáld felül az osztályban az ==
operátor működését!
Bor
objektummal szeretnénk összehasonlítani, akkor az operátor adja vissza, hogy a két bor fajtája, évjárata és alkoholtartalma rendre megegyezik-e! A fajták egyezésének vizsgálatakor a kis- és nagybetűket ne különböztesd meg (tehát pl. aszu
és Aszu
ugyanaz a fajtanév)!Bor
típusú paramétert kap, akkor logikai hamis értékkel térjen vissza! (2 pont)Szekreny
osztály (25 pont)Hozz létre egy Szekreny
osztályt, amelynek egyetlen adattagja egy borok
nevű lista! Ebben a listában tároljuk a szekrény polcain lévő borokat.
Az osztály konstruktora nem vár paramétert, és a borok
adattagot egy üres listával inicializálja! (2 pont)
Írj egy get_bor
metódust, amely paraméterül egy n
egész számot kap! A metódus térjen vissza a borok
lista n
-edik indexű elemével!
n
-érték negatív vagy nagyobb, mint a lista utolsó elemének indexe, akkor dobj egy BorospinceException
típusú kivételt, amit a Nem letezo index!
szöveggel inicializálj! (3 pont)Definiáld felül a +=
operátort az osztályban úgy, hogy ha az egy Bor
objektumot kap paraméterül, akkor szúrja be azt a borok
lista végére! Egyéb típusú paraméter esetén dobj egy TypeError
típusú kivételt, amit a Nem bor!
szöveggel inicializálj! (3 pont)
Definiáld felül a +
operátort az osztályban, amely egy másik Szekreny
objektumot várjon paraméterben! Az operátor térjen vissza egy új Szekreny
objektummal, amelynek a borok
listája az aktuális és a paraméterben érkező objektum borok
listáinak összefűzése legyen! Nem megfelelő típusú paraméter esetén dobj egy TypeError
típusú kivételt, amit a Nem szekreny!
szöveggel inicializálj! (3 pont)
Írj egy atlag_alkoholtartalom
metódust, amely térjen vissza a szekrényen lévő borok (borok
adattag) alkoholtartalmának átlagával! Amennyiben nincs egyetlen bor sem a szekrényen, akkor dobj egy BorospinceException
típusú kivételt, amit az Ures a szekreny!
szöveggel inicializálj! (3 pont)
Készíts egy paraméter nélküli statisztika
metódust! A metódus számolja össze, hogy a különféle borfajtákból mennyi található a szekrényen, és az eredményt adja vissza egy dictionary-ben! (5 pont)
aszu
és Aszu
ugyanaz a fajtanév)!A szekrény tartalma: Bor('tokaji aszu', 2017, 13.5), Bor('egri bikaver', 2013, 12.0), Bor('TOKAJI ASZU', 2015, 13.8) A statisztika metódus visszatérési értéke: {'tokaji aszu': 2, 'egri bikaver': 1}
Írj egy megisszak
metódust, amely egy Bor
típusú objektumot vár paraméterben! A metódus törölje az adott bort a borok
listából, amennyiben az szerepel a listában! Feltehetjük, hogy minden bor objektum egyszer fordul elő a szekrényen.
BorospinceException
típusú kivételt, amit a Bor nem talalhato!
szöveggel inicializálj!Bor
típusú paramétert kap, akkor dobj egy TypeError
típusú kivételt, amit a Nem bor!
szöveggel inicializálj! (3 pont)Definiáld felül az objektum szöveggé alakításáért felelő metódust az osztályban!
borok
lista üres, akkor a metódus térjen vissza az Ez egy ures szekreny.
szöveggel!{darab} {fajta}
formátumban! A szöveg végén ne legyen se vessző, se szóköz! (3 pont)statisztika
metódus visszatérési értékét!
A szekrény tartalma: Bor('tokaji aszu', 2017, 13.5), Bor('egri bikaver', 2013, 12.0), Bor('TOKAJI ASZU', 2015, 13.8), Bor('chardonnay', 2019, 13.0) Az __str__ metódus visszatérési értéke: '2 tokaji aszu, 1 egri bikaver, 1 chardonnay'
bor1 = Bor('Tokaji aszu', 2017, 13.5) bor2 = Bor('Gyanus kinezetu kannasbor', 2010) bor3 = Bor('ToKaJi AsZu', 2015, 13.8) bor4 = Bor('Chardonnay', 2019, 13.0) bor2.fajta = 'Egri bikaver' bor2.evjarat = 2013 bor2.alkoholtartalom = 12.0 print(f'{bor2.fajta}, {bor2.evjarat}, {bor2.alkoholtartalom}') # 'Egri bikaver, 2013, 12.0' print(bor1) # 'Tokaji aszu (evjarat: 2017), melynek alkoholtartalma: 13.5%' print(bor1 == Bor('TOKAJI ASZU', 2017, 13.5)) # True print(bor1 == bor2) # False print(bor1 == 'Hibas tipusu parameter!') # False szekreny1 = Szekreny() szekreny2 = Szekreny() szekreny1 += bor1 szekreny1 += bor2 szekreny1 += bor3 szekreny2 += bor4 szekreny3 = szekreny1 + szekreny2 print(szekreny3.get_bor(0)) # 'Tokaji aszu (evjarat: 2017), melynek alkoholtartalma: 13.5%' print(szekreny3.get_bor(3)) # 'Chardonnay (evjarat: 2019), melynek alkoholtartalma: 13.0%' print(szekreny3.atlag_alkoholtartalom()) # 13.075 szekreny2.megisszak(bor4) print(szekreny2.statisztika()) # {} print(szekreny3.statisztika()) # {'tokaji aszu': 2, 'egri bikaver': 1, 'chardonnay': 1} print(szekreny2) # 'Ez egy ures szekreny.' print(szekreny3) # '2 tokaji aszu, 1 egri bikaver, 1 chardonnay'