1. Naloga
Razred Tocka
Napišite razred Tocka, ki predstavlja točko v 2D koordinatnem sistemu.
Zahteve:
- Konstruktor naj prejme koordinati
xiny(float ali int) - Ustvarite dunder metodo
__add__, ki omogoča translacijo točke (prištevanje tuple (dx, dy) ali druge točke) - Ustvarite dunder metodo
__sub__, ki vrne razliko koordinat kot novo točko - Ustvarite dunder metodo
__str__za izpis točke v obliki"(x, y)" - Ustvarite metodo
razdalja(self, druga), ki izračuna evklidsko razdaljo do druge točke - Ustvarite metodo
razdalja_izhodisca(self), ki vrne razdaljo od točke (0, 0)
Primer:
python
t1 = Tocka(3, 4) t2 = Tocka(6, 8) print(t1) # izpis: (3, 4) print(t1.razdalja_izhodisca()) # izpis: 5.0 print(t1.razdalja(t2)) # izpis: 5.0 t3 = t1 + (2, 3) print(t3) # izpis: (5, 7)
2. Naloga
Razred Datum
Napišite razred Datum, ki predstavlja datum v gregorijanskem koledarju.
Zahteve:
- Konstruktor naj prejme
dan,mesec,leto(številčne vrednosti) - Ustvarite dunder metode za primerjanje
<,>,==(datum pred, po ali enak) - Ustvarite dunder metodo
__sub__, ki vrne število dni med dvema datumoma (absolutna vrednost) - Ustvarite dunder metodo
__add__, ki datumu prišteje število dni in vrne nov datum - Ustvarite metodo
__str__za izpis v obliki"DD.MM.YYYY"
Primer:
python
d1 = Datum(15, 3, 2024) d2 = Datum(20, 3, 2024) print(d2 – d1) # izpis: 5 d3 = d1 + 10 print(d3) # izpis: 25.03.2024 print(d1 < d2) # izpis: True
3. Naloga
Razred KompleksnoStevilo
Napišite razred KompleksnoStevilo, ki predstavlja kompleksno število.
Zahteve:
- Konstruktor naj prejme
realniinimaginarnidel (float ali int) - Ustvarite dunder metode za seštevanje (
__add__), odštevanje (__sub__), množenje (__mul__) in deljenje (__truediv__) - Ustvarite dunder metodo
__str__za izpis v obliki"a + bi"ali"a - bi" - Ustvarite metodo
abs(self), ki vrne modul kompleksnega števila
Primer:
python
c1 = KompleksnoStevilo(3, 4) c2 = KompleksnoStevilo(1, 2) print(c1 + c2) # izpis: 4 + 6i print(c1 * c2) # izpis: -5 + 10i print(c1.abs()) # izpis: 5.0
4. Naloga
Razred Vrsta
Napišite razred Vrsta, ki predstavlja podatkovno strukturo FIFO (first in, first out).
Zahteve:
- Konstruktor naj ustvari prazen seznam (vrsta)
- Napišite metodo
dodaj(self, element), ki doda element na konec vrste - Napišite metodo
odstrani(self), ki odstrani in vrne prvi element vrste (če je vrsta prazna, vrne None) - Napišite dunder metodo
__len__, ki vrne dolžino vrste - Napišite dunder metodo
__getitem__, ki omogoča dostop do elementa po indeksu - Napišite dunder metodi
__iter__in__next__, da bo vrsta iterabilna
Primer:
python
v = Vrsta() v.dodaj(“prvi”) v.dodaj(“drugi”) v.dodaj(“tretji”) print(len(v)) # izpis: 3 print(v[1]) # izpis: drugi for element in v: print(element) # izpis: prvi, drugi, tretji print(v.odstrani()) # izpis: prvi
5. Naloga
Razred Učenec
Napišite razred Učenec, ki hrani podatke o učencu in njegovih ocenah.
Zahteve:
- Konstruktor naj prejme
ime,priimekinocene(seznam številk 1-5) - Ustvarite dunder metodo
__ge__(>=), ki primerja povprečno oceno dveh učencev - Ustvarite dunder metodo
__add__, ki združi sezname ocen dveh učencev in vrne nov seznam - Ustvarite metodo
povprecje(self), ki vrne povprečno oceno (zaokroženo na 2 decimalki) - Ustvarite metodo
najboljsa_ocena(self), ki vrne najvišjo oceno - Ustvarite metodo
__str__za izpis imena, priimka in povprečne ocene
Primer:
python
u1 = Učenec(“Ana”, “Novak”, [4, 5, 3, 5]) u2 = Učenec(“Blaž”, “Horvat”, [2, 3, 4, 3, 5]) print(u1.povprecje()) # izpis: 4.25 print(u1 >= u2) # izpis: True (Ana ima višje povprečje) ocene_skupaj = u1 + u2 print(ocene_skupaj) # izpis: [4, 5, 3, 5, 2, 3, 4, 3, 5]
6. Naloga
Razred Ura
Napišite razred Ura, ki predstavlja časovni trenutek (ure, minute, sekunde).
Zahteve:
- Konstruktor naj prejme
ure,minute,sekunde(številčne vrednosti, preverite veljavnost: 0-23 ur, 0-59 minut, 0-59 sekund) - Ustvarite dunder metode za primerjanje
<,>,== - Ustvarite dunder metodo
__sub__, ki vrne časovno razliko (v sekundah) med dvema urama - Ustvarite dunder metodo
__add__, ki uri prišteje določeno število sekund in vrne novo uro - Ustvarite metodo
__str__za izpis v obliki"HH:MM:SS"(z vodilnimi ničlami)
Primer:
python
ura1 = Ura(10, 30, 0) ura2 = Ura(12, 15, 30) print(ura2 – ura1) # izpis: 6330 (sekund) ura3 = ura1 + 3665 print(ura3) # izpis: 11:31:05 print(ura1 < ura2) # izpis: True
7. Naloga
Razred BančniRačun
Napišite razred BančniRačun, ki simulira osnovno bančno poslovanje.
Zahteve:
- Konstruktor naj prejme
ime_lastnikainstanje(float, privzeto 0) - Ustvarite dunder metodo
__add__, ki omogoča polog (račun + znesek) - Ustvarite dunder metodo
__sub__, ki omogoča dvig (račun – znesek, preprečite negativno stanje) - Ustvarite dunder metodo
__lt__, ki primerja stanja dveh računov - Ustvarite dunder metodo
__str__, ki izpiše lastnika in stanje (z 2 decimalkama) - Ustvarite metodo
obresti(self, obrestna_mera), ki prišteje obresti (v %) in vrne novo stanje
Primer:
python
r1 = BančniRačun(“Janez”, 1000) r2 = BančniRačun(“Mojca”, 500) r1 = r1 + 200 print(r1) # izpis: Janez: 1200.00 € r1 = r1 – 50 print(r1) # izpis: Janez: 1150.00 € print(r2 < r1) # izpis: True r1.obresti(5) # 5% obresti print(r1) # izpis: Janez: 1207.50 €
8. Naloga
Razred Koledar
Napišite razred Koledar, ki omogoča upravljanje z dogodki po datumih. Uporabite razred Datum iz naloge 6.
Zahteve:
- Konstruktor naj ustvari prazen slovar (dogodki: datum -> seznam dogodkov)
- Napišite metodo
dodaj_dogodek(self, datum, dogodek), ki doda dogodek (besedilo) na določen datum - Napišite dunder metodo
__getitem__, ki vrne vse dogodke za določen datum (seznam) - Napišite dunder metodo
__setitem__, ki nastavi dogodke za določen datum (nadomesti obstoječe) - Napišite dunder metodo
__iter__, ki omogoča iteracijo po vseh datumih (po vrstnem redu) - Napišite metodo
odstrani_dogodek(self, datum, dogodek), ki odstrani določen dogodek z datuma
Primer:
python
kol = Koledar() d1 = Datum(15, 3, 2024) d2 = Datum(20, 3, 2024) kol.dodaj_dogodek(d1, “Sestanek”) kol.dodaj_dogodek(d1, “Pregled dokumentov”) kol[d2] = [“Ročni dan”] print(kol[d1]) # izpis: [‘Sestanek’, ‘Pregled dokumentov’] for datum, dogodki in kol: print(f”{datum}: {dogodki}”)
9.naloga
NALOGA 13: Razred Polinom
Napišite razred Polinom, ki predstavlja polinom s celimi ali realnimi koeficienti.
Zahteve:
- Konstruktor naj prejme seznam koeficientov (od konstantnega člena naprej:
[a0, a1, a2, ...]) - Ustvarite dunder metodo
__call__(self, x), ki izračuna vrednost polinoma za podani x - Ustvarite dunder metode za seštevanje (
__add__) in odštevanje (__sub__) dveh polinomov - Ustvarite dunder metodo
__mul__, ki pomnoži polinom s skalarjem ali drugim polinomom - Ustvarite dunder metodo
__str__za izpis polinoma v obliki"a0 + a1*x + a2*x^2 + ..."
Primer:
python
p1 = Polinom([2, 3, 1]) # 2 + 3x + x^2 p2 = Polinom([1, 1]) # 1 + x print(p1(2)) # izpis: 12 (2 + 6 + 4) p3 = p1 + p2 # 3 + 4x + x^2 print(p3) # izpis: 3 + 4*x + 1*x^2 p4 = p1 * 2 # 4 + 6x + 2x^2 print(p4) # izpis: 4 + 6*x + 2*x^2 p5 = p1 * p2 # (2 + 3x + x^2)*(1 + x) = 2 + 5x + 4x^2 + x^3 print(p5) # izpis: 2 + 5*x + 4*x^2 + 1*x^3
10. Naloga
Razred IgralnaKarta in Delilec
Napišite razreda IgralnaKarta in Delilec za simulacijo igralnih kart.
Zahteve za razred IgralnaKarta:
- Konstruktor naj prejme
vrednost(2-10, “J”, “Q”, “K”, “A”) inbarva(“srce”, “karo”, “pik”, “kriz”) - Ustvarite dunder metode za primerjanje
<,>,==(primerja se številčna vrednost karte: A=14, K=13, Q=12, J=11) - Ustvarite dunder metodo
__add__, ki vrne True, če sta karti iste barve - Ustvarite metodo
__str__za izpis karte v obliki"vrednost barve"(npr. “A srce”)
Zahteve za razred Delilec:
- Konstruktor naj ustvari seznam vseh 32 kart (vrednosti: 7, 8, 9, 10, J, Q, K, A; barve: vse štiri)
- Napišite metodo
mesaj(self), ki premeša karte (random.shuffle) - Napišite metodo
razdeli(self, st_kart), ki vrne seznam danega števila kart z vrha delilnega kupčka - Napišite metodo
__len__, ki vrne število preostalih kart v delilcu
Primer:
python
karta1 = IgralnaKarta(“A”, “srce”)
karta2 = IgralnaKarta(“K”, “pik”)
karta3 = IgralnaKarta(“10”, “srce”)
print(karta1) # izpis: A srce
print(karta1 > karta2) # izpis: True (A > K)
print(karta1 + karta3) # izpis: True (obe srce)
delilec= Delilec()
print(len(delilec)) # izpis: 32
delilec.mesaj()
roke = delilec.razdeli(5)
print(len(roke)) # izpis: 5
print(len(krov)) # izpis: 27