Košarica

Razred artikel

Razred Artikel ima atribute ime, cena(cena brez ddv) in stopnja ddv (v odstotkih). Napišite razred Artikel in njegov konstruktor __init__(self, ime, cena, ddv), v katerem si shranite vrednosti ime, cena, ddv. Napišite metodo cena_brez_DDV(self, kolicina), ki vrne ceno brez ddvja za dano količino (ustrezno pomnožite). Potem napišite metodo vrednost_DDV(self, kolicina), ki vrne vrednost ddv in skupna_cena(self, kolicina), ki izračuna celotno ceno (skupaj z ddv). Pri slednjih dveh metodah ne uporabljajte atributa cena, ampak le kličite metodo cena_brez_DDV, saj bosta metodi s tem bolj splošni.

jabolko = Artikel('jabolko', 1.20, 8.5)
hruska = Artikel('hruska', 1.70, 8.5)

print(jabolko.ime, jabolko.skupna_cena(3))
jabolko 3.9059999999999997

Znižani artikli in 3 za 2 artikli

Iz razreda Artikel izpeljite razred ZnizanArtikel, ki ima v konstruktorju dodaten argument popust. Potem izpeljite še razred Kupis2Dobis3Artikel, kjer za vsaka dva kupljena dobimo en artikel brezplačno. Za oba razreda implementirajte metodo cena_brez_DDV. Popust se upošteva pred DDV-jem. Če ste v razredu pravilno napisali metodi vrednost_DDV in skupna_cena, bi morali pravilno delovati tudi tu.


kokakola = Kupis2Dobis3Artikel('kokakola', 1.28, 8.5)
sesalnik = ZnizanArtikel('Gorenje', 58.2, 20, 30)

Košarica

1. V razredu Kosarica bomo hranili seznam artiklov. Napišite razred Kosarica in njegov konstruktor __init__(self), ki ustvari prazno košarico (interna predstavitev košarice je lahko npr. seznam).

kosarica = Kosarica()

2. Razredu Kosarica dodajte metodo dodaj(self, artikel, kolicina), ki v košarico doda kolicina artiklov artikel, kar z drugimi besedami pomeni, da jih dodamo v seznam.

kosarica.dodaj(jabolko, 42)
kosarica.dodaj(hruska, 6)
kosarica.dodaj(kokakola, 7)
kosarica.dodaj(sesalnik, 1)

3. Napišite metodo izpisiImena(self), ki izpiše imena vseh nakupljenih artiklov.

4. Razredu Kosarica dodajte metodo racun(self), ki izpiše nekaj takega:

kosarica.racun()
jabolko                 1.30 EUR *  42 =   54.68 EUR 
hruska                  1.84 EUR *   6 =   11.07 EUR 
kokakola                1.39 EUR *   7 =    6.94 EUR 
Gorenje                48.89 EUR *   1 =   48.89 EUR 
----------------------------------------------------
SKUPAJ                                    121.58 EUR
Od tega DDV                                13.84 EUR

Od tu naprej bomo spet uporabljali razred Turtle, ki ste ga definirali na predavanjih. Naloge rešujte tako, da ustvarite nove razrede. Razreda Turtle ne smete spreminjati, razen če je to eksplicitno dovoljeno.

Želva z imenom

Napiši razred ZelvaZImenom, ki je izpeljan iz razreda Turtle. ZelvaZImenom se obnaša kot vsaka druga želva, le da ima, poleg vseh svojih atributov, še atribut ime, ki ga nastavimo v konstruktorju in metodo pozdrav.

i = ZelvaZImenom('Jožica') # Ustvari želvo z imenom Jožica
i.forward(100)
i.pozdrav() # izpiše 'Jaz sem želva Jožica'

Čveka

Želva čveka je zelo glasna želva -- preden se premakne ali obrne, nas o tem obvesti. Želva čveka ima tudi ime in metodo pozdrav.

c = Cveka('Jožica') # Ustvari želvo čveko z imenom Jožica
c.forward(20) # izpiše 'Jožica gre 20 korakov naprej'
c.turn(60) # izpiše 'Jožica se obraca za 60 stopinj'
c.forward(20) # izpiše 'Jožica gre 20 korakov naprej'
c.pozdrav() # izpiše 'Jaz sem želva Jožica'

Rdečevratka

Želva rdečevratka nima imena. Ima pa vse ostale lastnosti navadne želve. Poleg tega:

  • ima rdeč vrat.

    zelva

    Krogu, ki je že narisan lahko spremenite barvo tako, da na vrhu programa napišete

    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    

    Krog pa pobarvate z ukazom

    self.head.setPen(QPen(QBrush(risar.rdeca), 3))
    
  • se premika dvakrat počasneje kot navadna želva.

    # Zelva Rdecevratka je pocasna zelva
    r = Rdecevratka()
    r.forward(40)
    r.turn(90)
    r.forward(50)
    
    
    t = zelva.Turtle()
    t.forward(40)
    t.turn(90)
    t.forward(50)
    

  • se ne zna dobro skriti -- skrije se tako, da glavo povleče v oklep.

    r = Rdecevratka()
    r.hide()
    

    zelva

Pijanka

Želva pijanka je vesela želva -- pred vsakim premikom se želva pijanka zmede in naključno spremeni svoj kot. Velikost naključne spremembe je seveda sorazmerna s številom popitih kozarcev. Po prvem kozarcu je velikost spremembe od -5 do 5 stopinj, po drugem kozarcu od -10 do 10 stopinj, itd. Po petih popitih kozarcih želva pijanka obleži, zato se ne premika več.

# Zelva pijanka po stirih popitih kozarcih
p = Pijanka()
p.drink()
p.drink()
p.drink()
p.drink()
for i in range(20):
    p.forward(10)

zelva

# Zelo pijana zelva pijanka se ne premika
p = Pijanka()
p.drink()
p.drink()
p.drink()
p.drink()
p.drink()
p.turn(45)
p.forward(100)

zelva

Pravokotnica

Želva pravokotnica je posebna želva -- premika se lahko le v vodoravni in navpični smeri. Če ji ukažemo drugače, bo premik opravila v dveh korakih: najprej v navpični, nato pa v vodoravni smeri.

p = Pravokotnica()
p.turn(30)
p.forward(20)
p.forward(20)
p.forward(20)
p.forward(20)
p.turn(100)
p.forward(100)

zelva

Množenje

Želve se lahko množijo -- ko se dve želvi zmnožita, ustvarita novo želvo na koordinatah (0, 0). Želvi se lahko množita le če sta dovolj blizu (manj kot 10 pikslov narazen). Pri tej nalogi lahko izjemoma spremenite razred Turtle tako, da mu dodate ustrezno metodo.

oce = turtle.Turtle()
mati = turtle.Turtle()
sin = oce * mati

oce.forward(20)
oce.turn(30)
oce.forward(20)

mati.forward(20)
mati.turn(-30)
mati.forward(20)

zelva

oce = turtle.Turtle()
oce.forward(100)
mati = turtle.Turtle()
sin = oce * mati # Zelvi nista dovolj blizu. Program naj vrze napako.
Ultime modifiche: mercoledì, 11 maggio 2022, 11:43