Час 4 - Корњача графика - линијски програми, понављање¶
Веома леп начин да се прикажу неки основни концепти програмирања је и такозвана корњача-графика у којој се неки замишљени лик креће по екрану остављајући притом траг који чини цртеж. У ранијим језицима (пре свега у језику Logo из којег је концепт потекао) лик који је цртао била је једна корњачица, а у Python-у можемо бирати између неколико ликова (подразумевано цртање врши један троуглић који се помера, али без обзира на то што је троугаоног облика, ми ћемо га називати корњачом). За разлику од робота Карел који ради само на порталу „Петља” и којега смо испрограмирали специјално за вас, корњача графика је саставни део језика Python и програме са корњачом можете писати и на свом рачунару, ван прегледача веба и портала „Петља” (на пример у развојном окружењу IDLE). Потребно је само да на свом рачунару имате инсталирану подршку за програмски језик Python 3, коју можете преузети са сајта Python.org (о чему смо већ говорили у уводу).
Наредбе корњаче¶
Да бисмо у нашим програмима могли користити цртање уз помоћ корњаче,
потребно је прво да укључимо библиотеку за рад са корњачом (то се ради
тако што наведемо import turtle
). Након тога можемо издавати
наредбе нашој корњачи. Свака наредба ће почињати са turtle.???
.
Кроз неколико једноставних програма прикажимо основне наредбе корњаче.
Цртање линије¶
Корњача се на почетку налази у центру екрана и окренута је надесно (у смеру истока).
Наредбом
turtle.forward(100)
корњачи говоримо да се помери напред (у смеру у ком је тренутно окренута) 100 корака и тако, пошто наша корњача подразумевано са собом носи оловку којом црта, постижемо да се на екрану нацрта дуж дужине 100 пиксела.
import turtle
turtle.forward(100)
(корњача_forward)
Да бисмо видели јасније како корњача ради, можемо јој променити брзину кретања.
turtle.speed(0)
нам даје најбржу корњачу (након покретања програма се одмах види готов цртеж), докturtle.speed(10)
даје најспорију корњачу (могуће је навести и било коју целобројну вредност између 0 и 10).
import turtle
turtle.speed(10)
turtle.forward(100)
(корњача_forward_speed)
Осим померања напред, корњача може да се креће и уназад, цртајући при том линију. Наредба којом се то постиже је
turtle.backward
.
import turtle
turtle.backward(100)
(корњача_backward)
Боја и дебљина линије¶
Могуће је поставити различите параметре који одређују начин на који се врши исцртавање.
Да бисмо видели нашу корњачу (уместо стрелице која се подразумевано приказује) можемо употребити наредбу
turtle.shape("turtle")
.Помоћу
turtle.color
можемо променити боју корњаче и њене оловке (и тако променити и боју трага тј. линија које се цртају). Као параметар ове наредбе у заградама под наводницима наводимо име жељене боје на енглеском језику. На пример, наредбаturtle.color("red")
поставља црвену боју.Помоћу
turtle.width
постављамо дебљину трага који корњача оставља, при чему се дебљина задаје као параметар. На пример, наредбомturtle.width(5)
постижемо да линије које се цртају буду дебеле 5 пиксела.
Да ли можеш да погодиш шта ће се добити покретањем наредног програма? Пробај да погодиш, а онда након тога покрени програм и провери да ли си био/била у праву.
import turtle
turtle.speed(5)
turtle.shape("turtle")
turtle.width(5)
turtle.color("red")
turtle.forward(50)
turtle.color("green")
turtle.forward(50)
(корњача_setparams)
Подизање оловке¶
Корњача током свог кретања оставља траг. Међутим, некада је згодно да корњачу померимо без цртањa.
Наредбом
turtle.penup()
корњача подиже своју оловку и након тога се креће по екрану не остављајући траг све док јој се не изда наредбаturtle.pendown()
након чега поново почиње да оставља траг током кретања.
Допуни наредни програм тако да корњача нацрта испрекидану линију која се састоји од три дужи.
import turtle
turtle.speed(10)
turtle.forward(20) # idi napred 20 piksela (olovka je podrazumevano spuštena)
turtle.penup() # podigni olovku
turtle.forward(20) # idi napred (pošto je olovka podignuta, kornjača ne ostavlja trag)
turtle.pendown() # spusti olovku
turtle.forward(20) # idi napred 20 piksela
(корњача_оловка)
Отисци корњаче¶
Наредбом
turtle.stamp()
корњача може да остави свој отисак на месту на ком се тренутно налази.
Покушај да погодиш који ће се облик добити покретањем наредног програма.
import turtle
turtle.speed(10)
turtle.penup() # podigni olovku
turtle.stamp() # ostavi trag
turtle.forward(20) # idi napred 20 koraka
turtle.stamp() # ostavi trag
turtle.forward(20) # idi napred 20 koraka
turtle.stamp() # ostavi trag
(корњача_stamp)
Окретање корњаче¶
Корњача може мењати свој смер кретања тако што се окреће налево (у смеру супротном смеру кретања казаљке на сату) или надесно (у смеру кретања казаљке) за одређени број степени, за шта се користе наредбе
turtle.left(n)
иturtle.right(n)
где јеn
број степени.
Покушај да погодиш који ће се облик добити покретањем наредног програма.
import turtle
turtle.speed(10)
turtle.forward(50) # idi napred 50 koraka
turtle.left(60) # okreni se levo 60 stepeni
turtle.forward(50) # idi napred 50 koraka
turtle.right(60) # okreni se desno 60 stepeni
turtle.forward(50)
(корњача_rotate)
Резимирајмо све наредбе корњачи које смо до сада поменули.
|
корњача се помера напред за |
|
корњача се помера назад за |
|
корњача се окреће налево за |
|
корњача се окреће надесно за |
|
корњача подиже оловку |
|
корњача спушта оловку |
|
боја оловке се поставља на боју |
|
дебљина оловке се поставља на вредност |
|
корњача оставља свој отисак |
|
корњача мења свој облик (нпр. |
|
корњача мења своју брзину кретања од 0 (најбрже) до 10 (најспорије) |
Комплетан списак свих наредби корњаче може се наћи у званичној документацији језика Python 3.
Скраћени запис¶
Постоји начин да се наредбе запишу краће. Ако се уместо import
turtle
библиотека за рад са корњачом увезе помоћу import turtle as
t
, тада уместо turtle.???
можемо писати само t.???
. На
пример, уместо turtle.color("red")
можемо писати само
t.color("red")
. Додатно, неке наредбе имају скраћени облик. На
пример, померање напред n
пиксела можемо постићи помоћу
t.fd(n)
, померање назад помоћу t.bk()
, окрет налево за n
степени помоћу t.lt(n)
, надесно помоћу t.rt(n)
и слично.
На пример, цртеж можемо нацртати и наследећи начин.
import turtle as t
t.color("red")
t.fd(100)
t.lt(90)
t.fd(150)
(корњача_скраћени_запис)
Линијски програми¶
Штриклирање¶
Напиши програм у којем корњача исцртава знак за штриклирање. Окреће се ка југоистоку, иде затим 50 корака, онда се окреће ка североистоку и иде 100 корака. Знак исцртај плавим дужима, дебљине 5.
import turtle
# dovrši program
(корњача_штриклица)
Квадрат¶
Напиши програм у којем корњача црта квадрат чија је дужина страница 100 корака.
Квадрат се може нацртати тако што се четири пута корњачи зада да иде 100 корака напред и да се затим окрене за 90 степени (на пример, налево). Допуни наредни програм тако што ћеш додати још наредби.
import turtle
turtle.forward(100) # иди напред 100 корака
turtle.left(90) # окрени се 90 степени налево
turtle.forward(100) # иди напред 100 корака
turtle.left(90) # окрени се 90 степени налево
# dopuni program
(корњача_квадрат)
За вежбу пробај да допуниш претходни програм тако да се црта шарени квадрат (сваку страницу обоји другом бојом).
Квадратни корен¶
Напиши програм који исцртава математички знак за квадратни корен (дугметом Прикажи пример можеш видети како он треба да изгледа).
import turtle
# dovrši program
(корњача_корен)
Лого Петље¶
Допуни наредни програм наредбама којима се корњача окреће, тако да се добије тражена слика.
import turtle
turtle.color("#18BC9C")
turtle.width(20)
??? # okreni se
turtle.forward(50)
??? # okreni se
turtle.forward(100)
??? # okreni se
turtle.forward(50)
??? # okreni se
turtle.forward(50)
??? # okreni se
turtle.forward(100)
??? # okreni se
turtle.forward(50)
(лого_петље)
Понављање¶
У програмима које задајемо корњачи често су облици правилни и неке се наредбе понављају. Стога у програмима можемо користити и петље.
Квадрат - петља¶
Исправи наредни програм тако да корњача црта квадрат чија је страница дугачка 100 корака.
Програм који исцртава квадрат можемо да скратимо ако уведемо наредбу
којом постижемо да се неки задати низ наредби више пута понови. Као
што смо видели, у језику Python најлакши начин да се то уради је
наредба for
. Као што смо већ видели, наредбу ponovi n puta
можемо записати као for i in range(n):
. Подсетимо се, не смемо да
заборавимо двотачку, а наредбе које се понављају наводимо увучене
неколико размака у односу на положај наредбе for
.
import turtle
for i in range(0): # ponovi 4 puta:
turtle.forward(0) # idi napred 100 koraka
turtle.left(0) # okreni se nalevo za 90 stepeni
(корњача_квадрат_петља)
Провери своје разумевање петљи тако што ћеш поређати наредбе програма у ком корњача исцртава једнакостранични троугао.
turtle.forward(100)
turtle.left(120)
import turtle
turtle.color("red")
for i in range(3):
Испрекидана линија¶
У једном од претходних задатака нацртали смо испрекидану линију тако што смо пуно пута понављали исте наредбе. Скрати претходни програм коришћењем петље тако што ћеш нацртати испрекидану линију која се састоји од пет делова.
import turtle
for i in range(5):
# idi napred 20 koraka
# podigni olovku
# idi napred 20 koraka
# spusti olovku
(испрекидана_линија)
Отисци корњаче¶
Напиши програм који коришћењем понављања исцртава 5 отисака корњаче размакнутих по 30 пиксела. Напиши програм без коришћења петље, а затим га скрати коришћењем петље.
import turtle
(пет_отисака_корњаче)
Правилни многоугао¶
Уопшти претходни програм тако да уместо цртања квадрата корњача црта неки други правилни полигон (на пример, једнакостранични троугао, правилни петоугао, правилни шестоугао и слично).
Ако је дат број n правилни n-тоугао (правилни полигон са n
страна) добијамо тако што нацртамо n његових страница. Зато је
цртање странице и окретање потребно поновити n пута. Након цртања
сваке странице корњача треба да се окрене тачно за величину спољашњег
угла полигона. Важи да је збир свих спољашњих углова у полигону једнак
360 степени, па пошто су сви они једнаки, сваки од њих је једнак
количнику бројева 360 и n. Други начин да одредимо угао за који се
корњача окреће у сваком кораку је да се примети да она цртање почиње и
завршава окренута ка истоку и да се у међувремену, током цртања,
окреће тачно за износ једног пуног круга тј. за
360∘. Пошто се у сваком кораку окреће подједнако, окрет
износи тачно 360∘n. У програмском језику Python,
количник бројева a
и b
можемо израчунати помоћу a / b
(више речи о томе биће речено у поглављу о аритметичким операцијама и
дељењу), па број 360n можемо израчунати помоћу 360
/ n
.
Као и у претходним случајевима, твој задатак је да исправиш грешке у следећем програму.
import turtle
n = 6
for i in range(0): # ponovi n puta:
turtle.forward(0) # idi napred 100 koraka
turtle.left(0) # okreni se za 360:n stepeni
(корњача_нтоугао_петља)
Збир унутрашњих углова сваког n-тоугла (у Еуклидској геометрији) једнак је вредности (n−2)⋅180∘. Заиста, ако из неког темена конвексног многоугла повучемо све његове дијагонале оне ће га поделити на укупно n−2 троугла (на наредној слици, петоугао је на тај начин подељен на три троугла).

Збир углова у сваком троуглу (у Еуклидској геометрији) је 180∘. Сваки унутрашњи угао полигона једнак је збиру неколико углова тих троуглова, док је сваки унутрашњи угао троугла део тачно једног од унутрашњих углова полигона, па је укупан збир унутрашњих углова полигона једнак укупном збиру углова тих троуглова, а то је тачно (n−2)⋅180∘.
Сваки спољашњи угао полигона је допуна унутрашњег угла до 180∘ степени (његов суплемент). Пошто је тих углова n важи да је збир спољашњих углова једнак разлици броја n⋅180∘ и збира унутрашњих углова полигона, који је, на основу претходног једнак (n−2)⋅180∘. Зато је збир спољашњих углова полигона једнак n⋅180∘−(n−2)⋅180∘, што је тачно 360∘.
Звезда¶
Напиши програм у којем корњача црта звезду са пет кракова.
Звезда са пет кракова (тзв. „петокрака”) је током историје била симбол којем су приписивана различита значења. Ми је посматрамо искључиво као геометријски објекат и ограђујемо се од било каквог њеног другог значења.

Звезда са пет кракова се састоји од централног правоуглог петоугла на чијим се ивицама налазе једнакостранични троуглови. Збир унутрашњих углова у правилном петоуглу је (5−2)⋅180∘ тако да је сваки угао једнак 108∘. Ако посматрамо углове на базама два суседна крака (једнакостранична троугла) видимо да су они унакрсни и да заједно са углом од 108∘ и са њему унакрсном углом чине пун угао. Стога је сваки угао на основици крака једнак 360∘−2⋅108∘2=72∘. Пошто је збир углова у краку једнак 180∘, угао при врху крака једнак је 180∘−2⋅72∘=36∘. Та информација нам је кључна да бисмо могли да нацртамо звезду. Звезду ћемо цртати тако што ћемо пет пута нацртати дуж од 100 корака и затим се окренути тако да наредна дуж заклопи угао од 36∘ са претходном. Да бисмо то постигли, корњача треба да се окрене надесно за суплемент тог угла тј. за угао од 180∘−36∘=144∘.
Теби препуштамо да на основу ове дискусије допуниш наредни програм.
import turtle
for i in range(5): # ponovi 5 puta:
# idi napred 100 koraka
# okreni se nadesno 144 stepena
(корњача_петокрака)
Домаћи задатак¶
За домаћи задатак уради наредне задатке.
Слово L¶
Напиши програм у којем корњача исцртава велико латиничко слово L (окреће се ка југу, затим иде 100 корака, окреће се ка истоку и онда иде 50 корака).
import turtle
# dovrši program
(корњача_слово_L)
Слово И¶
Напиши програм у којем корњача црта ћириличко слово И. Цртање креће тако што корњача прво иде 100 корака ка југу, затим 141 корак ка североистоку и затим поново 100 корака ка југу.
import turtle
# dovrši program
(корњача_и)
Плаво-црвена линија¶
Напиши програм у којем корњача црта плаво-црвену линију која састоји од 5 плавих и 5 црвених дужи дужине од по 20 пиксела које се наизменично смењују. Реализуј програм тако да се у телу петље које се понавља 5 пута црта једна плава и једна црвена дуж.
import turtle
# dovrši program
(корњача_црвено_плава_линија)
Отисци корњаче у теменима n-тоугла¶
Напиши програм након који поставља отиске корњаче у сва темена правилног n-тоугла.
import turtle
n = 6
(отисци_n_тоугао)