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:

import risar import zelva a = zelva.Turtle() b = zelva.Turtle() print(a.path) print(b.path) a.forward(100) a.set_color(risar.zelena) a.left() a.forward(100) a.set_color(risar.rdeca) a.left() a.forward(100) b.set_color(risar.modra) b.right() b.forward(50) print(a.path) print(b.path) risar.stoj()

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

0 0 300 50

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

self.color = risar.bela

Metoda set_color mora to barva spremeniti.

def set_color(self, new_color): self.color = new_color

Končno, ko želva riše, mora risati črto te barve. Zato v metodi forward spremenimo

crta = risar.crta(self.x, self.y, nx, ny) v crta = risar.crta(self.x, self.y, nx, ny, self.color)

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

self.path = 0

in v forward

self.path += a

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.

Zadnja sprememba: četrtek, 9 maj 2019, 14:00