Barvne želve
Naloga
Tokrat ne bo ne ogrevanja ne dodatnih nalog. Narediti vam je tole: vzemite
modul zelva in dopolnite razred Turtle, tako da bo
možno pognati naslednji program:
Rezultat programa mora biti takšnale slika.
Poleg tega program nekaj izpisuje. Konkretno, izpisuje dolžino poti, ki jo je v času svojega življenja prehodila posamezna želva. Izpisati mora torej
Prvi dve ničli izpišeta prva dva printa, saj se želvi dotlej
nista premaknili nikamor. Drugi dve sta iz drugih dveh printov, saj je prva
želva dotlej prehodila pot 300 in druga 50.
Želvi morate torej dodati metodo set_color, ki kot argument
prejme barvo in si jo zapomni. (Kot vemo, "zapomniti si", pomeni,
da jo doda med svoje atribute, ne?) Ko potem riše črte, jih mora risati z
ustrezno barvo. Začetna barva črte je bela.
Poleg tega si bo morala želva zapomniti, koliko je prehodila doslej. V začetku si zapomni, da ni prehodila še ničesar. Potem pa vsakič, ko naredi kakšen korak, poveča števec doslej prehojene poti.
Namig: dodati je potrebno čisto kratko metodo, poleg tega pa dve vrstici
v __init__ ter eno vrstico in eno malenkost v eno drugo metodo.
Testiranje je tokrat nekoliko drugačno. Ko spremenite modul
zelva, poženite
testni program. Če
nariše in izpiše, kar mora, je (najbrž) v redu, sicer ne.
Rešitev
Tokratna naloga ni zahtevala veliko programiranja, pa tudi veliko razmišljanja ne; zahtevala je razumevanje razredov.
Barva črte je "lastnost" želve. Torej si jo mora želva zapomniti. Shranili
jo bomo, recimo v self.color (lahko bi bilo tudi
self.kaj_drugega). V konstruktorju moramo nastaviti začetno
vrednost te lastnosti, torej v (__init__) dodamo vrstico
Metoda set_color mora to barva spremeniti.
Končno, ko želva riše, mora risati črto te barve. Zato v metodi
forward spremenimo
Zdaj pa še dolžina poti. To bomo shranili v self.path - ker
naloga zahteva točno takšno ime lastnosti. Torej v __init__
dodamo
in v forward
Tako bo želva ob vsakem premiku povečala dolžino prehojene poti.
Obe spremembi - barva črte in merjenje poti - delujeta tudi za
backward, saj backward kliče forward.