Kilpkonnagraafika
Kujutage ette väikest robot kilpkonna kahemõõtmelises x,y-koordinaatteljestikus, keda saab erinevate käskude abil liigutada ühest punktist teise. See kilpkonn jätab käidud teest maha jälje, mida programmeerija võib vastavalt oma soovidele kujundada. Peale esimese haridusliku programmeerimisekeele LOGO loomist on kilpkonnagraafikat kasutatud peamiselt algajate programmeerijate õpetamiseks, kelle jaoks programmi koodi visualiseerimine aitab mõista programmi tööd. Samuti on kilpkonnagraafikat hea kasutada uute programmeerimise konstruktsioonide õpetamiseks, aidates õpilastel abstraktset konstruktsiooni selgemalt esitada. Kilpkonnagraafika kasutamisel on veel mitmeid häid külgi algajate programmeerijate õpetamiseks. Näiteks saab selle kaudu õpetada programmi koodi kommenteerimist ja struktureerimist, sest kilpkonna abil joonistatud taiesed võivad olla väga komplekssed ja mahukad ning ilma hea struktuuri ning abistavate kommentaarideta oleks raske aru saada, mida programmeerija täpselt mõtles. Samuti õpetab kilpkonna abil joonistamine programmi silumist, sest esinevad vead on programmi visualiseerimisel hästi näha ning õpilane peab oma programmi hästi mõistma, et viga parandada. Kilpkonnagraafika võimaldab ka väga hästi lõimida programmeerimist teiste õppeainetega nagu matemaatika või kunst. Näiteks võib geomeetriat või erinevate funktsioonide graafikute joonistamist õpetada kilpkonna abil. Kunstis on kilpkonnal piiramatult võimalusi.
Selleks, et joonistamisega alustada Pythonis, tuleb esmalt importida kilpkonna (ingl turtle) moodul lausega from turtle import*
. Kilpkonna moodul on ka väga hea esimene moodul, millega õppida Pythoni mooduli mõistet ja funktsioonide importimist. Selle mooduli dokumentatsiooni saab väga hästi rakendada selleks, et õpetada algajatele Pythoni dokumentatsiooni kasutamist.
Mitmetes programmeerimiskeeltes kasutatakse kilpkonnagraafikat selleks, et programmeerimist õpetada (nt Scratch ja Python). Meie tutvustame selle kursuse raames Pythoni turtle moodulit ja seda, kuidas seda õpetamisel ära kasutada.
Kilpkonna käsud
Pythoni kilpkonna moodulis on palju funktsioone, mida kasutada õpetamisel. Järgnevalt on esitatud meetodid ja funktsioonid, mida on kasutatud MOOCi materjalides, ja lisatud on mõned uued käsud turtle moodulist.
Liikumine
forward(n)
- liigu edasi (ingl forward)n
sammu võrra (ühe sammu pikkus on 1 piksel ehk üks täpike ekraanil), ntforward(50)
;back(n)
- liigu tagasi (ingl back)n
sammu võrra, ntback(50)
;left(d)
- pööra vasakule (ingl left)d
kraadi, ntleft(30)
;right(d)
- pööra paremale (ingl right)d
kraadi, ntright(30)
;home()
- liigu koordinaatide alguspunkti (0, 0), mis on vaikimisi lõuendi keskpunkt, kust kilpkonn programmi käivitamisel alustab (vt joonis 1);goto(x, y)
- liigu etteantud koordinaadiga punkti, ntgoto(50, 45)
.
Joonis 1. Kilpkonna koordinaatteljestik
Värvimine
color(<värvi nimetus>)
- kilpkonna värv antakse sõnena, mille väärtuseks on värvi ingliskeelne vaste või värvi kuueteistkümnendkoodis esitus, ntcolor("blue")
;begin_fill()
- värvimise alustamine, mida peab kirjutama vahetult enne kujundi joonistamist;end_fill()
- värvimise lõpetamine, mille peab kirjutama vahetult peale kujundi joonisatmist;pencolor(<värvi nimetus>)
- muuda pliiatsi värvi (tõlkes pliiatsi värv), ntpencolor("green")
;fillcolor(<värvi nimetus>)
- muuda täitevärvi (tõlkes täitevärv), ntfillcolor("#0099ff")
.
from turtle import * pencolor("red") fillcolor("#ffccff") begin_fill() circle(100) end_fill() exitonclick() |
Pliiatsi liigutamine ja suuruse muutmine
down()
- langeta pliiats lõuendile;up()
- tõsta pliiats üles;pensize(n)
- muuda pliiatsi tera suurustn
pikslit, ntpensize(20)
.
Kilpkonna muutmine
showturtle()
- näita kilpkonna lõuendil;hideturtle()
- peida kilpkonn lõuendil;shape(<välimus>)
- muuda kilpkonna kuju. Võimalikud kilpkonna välimused: "arrow" - nool, "turtle" - kilpkonn, "circle" - ring, "square" - ruut, "triangle" - kolmnurk, "classic" - vaikmisi kasutatav välimus, ntshape("turtle")
;speed(n)
- kilpkonna joonistamise kiirus, kusn
on täisarv vahemikus 0 - 10, kuin
on 0, siis kilpkonna animatsiooni ei näe, ntspeed(0)
.
from turtle import * shape("turtle") speed(0) pencolor("blue") fillcolor("yellow") pensize(20) begin_fill() circle(100) end_fill() exitonclick() |
Sündmuste kasutamine
onclick(<funktsiooni nimi>)
- kilpkonnale klõpsates sooritab kilpkonn funktsioonis oleva tegevuse, funktsioon on kaheargumendiline, kus on argumentideks on klõpsatud punkti koordinaadid, ntonclick(muuda)
;ondrag(<funktsiooni nimi>)
- kilpkonna lohistades sooritab kilpkonn funktsioonis oleva tegevuse, funktsioon on kaheargumendiline, kus on argumentideks on klõpsatud punkti koordinaadid, ntondrag(goto)
;exitonclick()
- sulgeb kilpkonnagraafika aknal klõpsates selle.
from turtle import * def muuda(x, y): shape("turtle") onclick(muuda) ondrag(goto)
Kilpkonn joonistab ruutu
Järgnevalt näidatakse ühe näite põhjal, kuidas kilpkonnaga õpetada muutujate defineerimist, tingimuslause moodustamist, tsükleid ja funktsioone.
Eelnevalt mainiti, et kilpkonnagraafikat on võimalik kasutada matemaatika õpetamisel. Valime näitlikustamiseks ruudu joonistamise kilpkonna abil.
Õpilased on tutvunud peamiste kilpkonna liikumise käskudega nagu forward ja left ning neile on põgusalt tutvustatud moodulite mõistet. Nüüd on ülesandeks kilpkonna abiga joonistadada ruut, mille külje pikkus on 100 pikslit. Programm võib välja näha selline
Siinkohal võib eelnevalt õpilastega kilpkonna tegevuse läbi mängida nii, et üks õpilane on kilpkonna rollis ja teine on programmeerija, kelle ülesandeks on lasta kilpkonnal joonistada ruut. Õpilased jälgivad, kas rada, mida mööda õpilane käib, moodustab ruudu. Kasutada võib ka suurt paberit, millele on joonistatud ruut, mille mööda peab õpilane käima ning üles kirjutama kõik käsud, mida ta mööda ruutu käies teeb. See on ka hea harjutus, mille abil tuletada meelde ruudu külgede arvu ja sisenurga suurust.
Muutujate defineerimise õpetamiseks võivad õpilased defineerida ruudu külje jaoks muutuja külg
, mille väärtus on 100. Seda kasutavad õpilased kõikjal programmis, kus on ruudu külje pikkus 100 pikslit.
Tulemus võib olla midagi sellist:
from turtle import * külg = 100 forward(külg) right(90) forward(külg) right(90) forward(külg) right(90) forward(külg) exitonclick()
Õpilased võiksid muuta muutuja külg väärtust ja uurida, kuidas muutus ruudu suurus. Selle näite abil saab hästi demonstreerida muutujate kasulikkust ja selgitada nende olemust. Samuti võib õpilasi suunata muutma programmis pööramist, näiteks kui kilpkonn pööras paremale, siis võib lasta ruudu joonistada hoopis vasakule pöörates. Lisaks sellele võib lasta õpilastel muuta nurga suurust.
Seda ülesannet saab muuta veel keerulisemaks ja lisada juurde kasutajalt küsimine. Näiteks on ülesandeks kirjutada programm, mis küsib ruudu külje pikkust kasutaja käest. Õpilased näevad, kuidas sõltub programmi töö kasutaja sisestusest.
Lisame keerukust veelgi ja nüüd on ülesandeks teha programm, mis joonistab kollase ruudu siis, kui kasutaja sisestab sõne "kollane"
ja sinise ruudu siis, kui kasutaja sisestab "sinine"
. Selle tulemusel saab õpilastele selgitada, kuidas moodustada tingimuslauset ja kuidas programmi töö tulemus oleneb sellest, mida sisestas kasutaja.
Ka tsüklite õpetamisel on kilpkonnast väga palju abi. Näite alguses pidid õpilased kirjutama programmi, mis joonistab ruudu.
from turtle import * forward(100) right(90) forward(100) right(90) forward(100) right(90) forward(100) exitonclick()
Programmeerimisel realiseeritakse korduvaid tegevusi tsüklite abil. Pythonis kasutame while- ja for-tsükleid. Õpilaste ülesandeks on kõigepealt püüda aru saada, mis on see korduv tegevus, mis esineb ruudu joonistamisel. Teiseks peavad õpilased läbi mõtlema, mitu korda on vaja seda tegevust teha, et tulemuseks oleks ruut. Selle ülesande abil saab arendada seaduspärasuste leidmine oskust, mis on programmeerija jaoks kasulik oskus. Ülesannet saab lahendada nii while- kui ka for-tsüklit kasutades. Seega sobib see mõlema teema juurde hästi.
Viimase konstruktsioonina vaatame sama näite põhjal, kuidas kasutada kilpkonnagraafikat funktsioonide õpetamiseks. Õpilaste ülesandeks on defineerida ilma argumentideta funktsioon, mis joonistab ruudu, mille külje pikkus on 100 pikslit. Seejärel peavad õpilased seda funktsiooni mitmeid kordi programmis rakendama. Selle abil saab selgitada funtksioonide põhimõtet - neid saab korduvalt kasutada. See on kooskõlas DRY-printsiibiga (ingl Don’t repeat yourself (“Ära korda ennast”)), millega rõhutatakse, et samasuguse koodi mitmekordset kirjapanekut tuleks vältida.
Järgnevalt kirjutavad õpilased ruudu funktsiooni, mille argumendiks on ruudu külg täisarvuna. Seda funktsiooni rakendatakse samamoodi nagu eelmises näites, mitmeid kordi programmis erinevate argumendi väärtustega. Õpilaste ülesandeks on uurida, kuidas funktsiooni argumendi väärtusest sõltub funtksiooni töö tulemus. Keerukuse lisamiseks võivad õpilased defineerida lisaks ruudule veel teiste korrapäraste hulknurkade funktsioone. Lõpuks võivad nad kirjutada funktsiooni, mis joonistab ettekantud küljepikkuse ja nurkade arvuga korrapärase hulknurga.
Selleks, et arendada õpilaste loovust veelgi, võib kõigile eelnenud näidetele lisaks lasta õpilastel ruutu isikupärastada teiste turtle mooduli käskudega, mis on toodud peatüki alguses.
Allikad
- Kilpkonnagraafika. Programmeerimisest maalähedaselt. https://courses.cs.ut.ee/2018/progmaa/fall/Main/PARTIVKilpkonn
- Kilpkonn tsüklis. Programmeerimise alused. https://courses.cs.ut.ee/2018/eprogalused/fall/Main/Whiletsykkel1
- Kilpkonn õpib funktsioone. Programmeerimisest maalähedaselt. https://courses.cs.ut.ee/2018/progmaa/fall/Main/PARTVIIFunktsioonKilpkonn