Naloge z rešitvami
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 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.

Krogu, ki je že narisan lahko spremenite barvo tako, da na vrhu programa napišete
from PyQt4.QtCore import * from PyQt4.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 = turtle.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()
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)

# 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)

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 vodoravni, nato pa v navpični smeri.
p = Pravokotnica()
p.turn(30)
p.forward(20)
p.forward(20)
p.forward(20)
p.forward(20)
p.turn(100)
p.forward(100)

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)

oce = turtle.Turtle()
oce.forward(100)
mati = turtle.Turtle()
sin = oce * mati # Zelvi nista dovolj blizu. Program naj vrze napako.