Програмирај!
Python – основне аритметичке операције Рачунар или компјутер (енгл. computer) је справа која рачуна, тј. справа која је направљена тако да може веома брзо и ефикасно да изводи рачунске операције над бројевима. Упознавање са програмским језиком Python ћемо почети управо од аритметичких операција и изачунавања вредности аритметичких израза. Да би могао да испробаш примере у наставку текста и провериш сопствена решења биће ти потребно неко од програмских окружења Python-a. У којим све окружењима можеш покретати
Python програм и како их можеш користити на свом рачунару сазнаћеш када одгледаш следећи видео.
Python - инсталација Велика помоћ у учењу биће ти интерактивни уџбеник који се налази на адреси
http://petlja.org/BubbleBee/r/kursevi/interactive-book-py6 Уџбеник нуди различите могућности за проверу знања, садржи велики број питања и задатака. Програмске кодове који представљају решења задатака је могуће покренути и тестирати и у окружењу самог уџбеника.
Сабирање, одузимање, множење У овој лекцији ћемо се бавити изразима који садрже операције сабирања, одузимања и множења, које се у програмском језику Python употребљавају на следећи начин:
Збир бројева, на пример 3 и 5, бележи на готово идентичан начин као у математици, 3 + 5.
Разлика бројева, на пример 8 и 2, се, такође бележи идентично математичком запису, 8 - 2.
Производ бројева, у математичком запису 4 · 6, се у Python-у записује са 4 * 6.
Програмирај!
Програмски језик Python, наравно, уме и да дели, да израчунава остатак при дељењу и цео део количника и много штошта друго. О овим операцијама ћемо говорити на неком од наредних часова. Како се у Python програмском окружењу добија вредност аритметичког израза? Погледај видео лекцију
Python - аритметичке операције Покрени програмско окружење Python-a. Провери коју ће вредност израза, нпр. 2 + 3, окружење дати за тако што ћеш након откуцаног изараза притиснути тастер Enter.
Исти резулат ћеш добити и када откуцаш print(2+3). Такав запис ће ти бити потребан уколико желиш да га извршиш у окружењу интерактивног уџбеника.
Програмирај!
Задатак 1. У програмском окружењу Python-a израчунај вредности израза: 1. 3 + 5 2. 4 * 6 Приметимо да смо око оператора куцали размаке (на пример, 3 + 5, 8 - 2 или 4 * 6). Ти размаци нису неопходни и исправно је написати и 3+5 или 4*6. Програмери воле да куцају размак око сваког оператора (знака операције) да би добили текст програма који лепше изгледа и који се лакше може прочитати.
Сложени изрази, приоритет оператора и заграде Некада је потребно да решавамо задатке који укључују више рачунских операција и тада можемо користити сложеније изразе, потпуно исто како смо навикли у математици. На пример, посматрајмо следећи задатак који је преузет из једне збирке задатака из математике: Израчунај производ збира бројева 874 и 437 и разлике бројева 915 и 364. Уз помоћ рачунара можеш веома једноставно решити овај задатак (чак једноставније него помоћу дигитрона тј. калкулатора). Једино је важно да умеш исправно да запишеш израз којим се тражено израчунавање изражава. У математици би се одговарајући израз записао као (874+437)·(915-364). Ако се сетиш да се множење изражава знаком * и ако ти кажемо да у програмском језику Python можеш употребљавати заграде на исти начин као у математици, онда ти је јасно да претходни математички задатак можеш лако решити тако што употребиш израз (874 + 437) * (915 - 364). У програмском окружењу на свом рачунару откуцај овај израз и прочитај вредност коју ће ти Python дати. Заграде су у претходном сложеном изразу неопходне, јер је приоритет операција потпуно исти као у математици (прво се израчунава оно што је у заградама, затим множење и дељење, па тек онда сабирање и одузимање).
Програмирај!
Питање 1. Која је вредност израза 5 + 5 * 5? (А) 15 (Б) 30 (Ц) 50 (Д) 125 Одговор: Б Питање 2. Која је вредност израза (5 + 5) * 5? (А) 15 (Б) 30 (Ц) 50 (Д) 125 Одговор: Ц
Променљиве - имена међурезултата Писање сложених израза се може избећи, а програм се може начинити мало разумљивијим ако међурезултате именујемо. Погледај видео лекцију
Python - аритметичке операције Погледајмо наредни пример програма који такође решава претходни задатак: Израчунај производ збира бројева 874 и 437 и разлике бројева 915 и 364.
Програмирај!
Збиру смо доделили име zbir, разлици име razlika, а производу име proizvod (уместо zbir и razlika могли смо, на пример, користити и имена prvi_cinilac, drugi_cinilac). Иако се на овај начин добија програм који мало дужи него полазни, он је мало разумљивији, јер се његовим читањем може јасно видети да се прво тражи израчунавање збира, затим разлике и затим њиховог производа. То се десило пре свега захваљујући пажљивом одабиру имена која смо употребили и веома је важно у програмима користити имена која читаоцу програма дају назнаке шта тај програм заправо израчунава. Имај на уму да програме чита рачунар који их извршава и њему је сасвим свеједно која су имена употребљена, али и људи који те програме пишу, исправљају и дорађују, а њима је прилично важно да текст програма лако разумеју. У већини случајева си читалац програма управо ти, тако да давањем илустративних имена променљивима данас помажеш заправо себи у будућности. Имена која смо дали међурезултатима се у програмирању називају променљиве. Променљиве су јако важан концепт о коме ће бити много више речи касније. До тада ћемо их користити на потпуно исти начин у математици - само као имена придружена одређеним вредностима.
Рецимо да постоје и нека правила која се односе на имена (каже се и идентификаторе) која можемо користити. Прво, постоји разлика између великих и малих слова и није исто да ли смо употребили zbir или Zbir. Препоручује се да у именима користимо само слова енглеске абецеде (тзв. ошишану латиницу), бројеве и подвлака (симбол _) који ћемо користити да повежемо више речи у једно име. У именима не можемо користити размаке, зарезе и слично, нити име можемо започети цифром. Дозвољена имена су, на пример, x, obim, drugi_sabirak, broj_sekundi, a2, а недозвољена су, на пример, 3d_grafika (јер почиње цифром), prvi sabirak (јер садржи размак) и jezik_c# (јер садржи недозвољени знак #).
Задатак 2. Израчунај разлику производа и збира бројева 874 и 437. Покушај самостално да решиш овај задатак. Помоћ и решење потражи у интерактивном уџбенику.
Програмирај!
Именовање резултата Подсетимо се приче са претходног часа. Именовањем међурезултата се уводе нови кораци у нашем програму, али је сам програм разумљивији. Имена треба бирати тако да дају назнаке шта тај програм заправо израчунава. Имај на уму да програме чита рачунар који их извршава и њему је сасвим свеједно која су имена употребљена, али и људи који те програме пишу, исправљају и дорађују, а њима је прилично важно да текст програма лако разумеју. У већини случајева си читалац програма управо ти, тако да давањем илустративних имена променљивима данас помажеш заправо себи у будућности. Задатак 1. Пера је засадио 380 стабала јабуке. Ђура је засадио 142 стабла јабука више од Пере, а Мика је засадио два пута више од Пере. Колико су стабала засадили заједно?
Како да решиш сам задатак и како да у окружењу интерактивног уџбеника поставиш решење и провериш његову исправност, сазнаћеш када одгледаш видео-лекцију
Python - именовање променљивих
Програмирај!
Читајући поставку, постпено све чињенице претвраш у одговарајући запис, на пример овако: Пера је засадио 380 стабала јабуке бележиш са pera = 380 Ђура је засадио 142 стабла јабука више од Пере бележиш са djura = pera + 142 Мика је засадио два пута више од Пере. бележиш са mika = pera * 2 Број стабала је су засадили заједно одређујеш овако zajedno = pera + djura + mika У окружењу интерактивног уџеника можеш унети свој код у поље које изгледа као на слици испод.
Кликом на дугме испод поља са кодом.
покрећеш програм чији ће се резултат појавити у новом пољу
Програмирај!
Задатак 2. Милица има 4 године, њена мама има 7 пута више година него она, а њен тата има 8 пута више година него она. Колико је година Миличин тата старији од њене маме?
Покушај самостално да решиш овај задатак. Предлог решења Један од начина како чињенице и везе између одређених вредности датих у поставци задатка можеш забележити је следећи: Милица има 4 године овако milica = 4 Мама има 7 пута више година него Милица овако mama = 7 * milica Tата има 8 пута више година него Милица овако tata = 8 * milica Колико је година тата старији од маме? овако razlika = tata - mama
Покрени интерактивно Python окружење, откуцај и изврши свој програм. Потом, тај исти задатак пронађи у интерактивном уџбенику и одговори на захтев у одговарајућој форми. Захтев гласи овако:
Програмирај!
Од тебе се очекује да превлачењем блокова датих у левом (сивом) пољу превучеш у десни, жути блок, при чему их мораш сложити тако да редослед у којем си их поставио даје одговарајући резултат. Сада покрени свој програм кликом на дугме Уколико си задатак исправно решио, добићеш обавештење да је задатак успешно решен.
Уколико си направио грешку, тада ће ти окружење одговорити на следећи начин
Задатак 3. Велика Морава је дугачка 185km и настаје од Јужне Мораве која је 90km дужа, и Западне Мораве која је 123km дужа од ње. Колика је укупна дужина ове три реке?
Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
Програмирај! Аритметичке операције – проблемски задаци Овај час ће бити посвећен решавању задатака који од тебе захтевају мало више анализе и употребу аритметичких операција. Задатак који ћеш сада радити би могао да ти да мотивацију зашто је потребно знати основне аритметичке операције како би могао да испрограмираш игрицу. Задатак 1. Програмираш игрицу Super Mario и потребно је да одредиш позицију на којој ћеш приказати слику корњачице. Видљиви део екрана широк је 500 пиксела, а висок 250 пиксела. Примети да корњача стоји на стази која је направљена од квадратних блокова који су величине 50 пута 50 пиксела. На почетку стазе се налази део блока који је широк 20 пиксела. Корњача стоји на петом блоку са леве стране (када се не рачуна почетни блок, који се не види цео). Одреди на којој позицији се налази доњи леви крај корњаче (одреди колико пиксела је та тачка удаљена од леве ивице екрана и колико је пиксела удаљена од горње ивице екрана). За почетак погледај видео-лекцију
Python – аритметичке операције (Super Mario) Пре него што запишеш било коју Python команду, хајде да проанализирамо задатак. Удаљеност доњег левог угла корњаче од леве ивице екрана је одређена ширинама блокова поређаних од леве ивице екрана до корањаче (њене леве ивице). Како је први блок ширине 20, док су остала 4 између првог и корњаће ширине 50, то значи да се тражена раздаљина да израчунати као 20 + 4 * 50. Удаљеност левог доњег угла слике корњаче је једнака растојању горње ивице блока на којем корњача стоји и и горње ивице екрана. Како знамо висину екрана, а и висину блока то се растојање горње ивице блока од горње ивице екрана израчунава овако 250 – 50. Предлог решења Сада можеш записати Python програм. На пример овако:
1
Програмирај! Откуцај и пкрени програм у интерактивном окружењу Pythona. Примети да смо у предлогу решења исписали два броја у истом реду тако што смо их оба навели унутар print(...), раздвојене зарезом. Могуће је исписати и више вредности помоћу наредбе облика print(v1, v2, ..., vn). Пронађи сада у интерактивном уџбенику овај исти задатак, унеси у одговарајуће поље код, па га покрени. Резултат је, свакако, исти. Поред досадашњег начина покретања програма, окружење уџбеника ти нуди и покретање тог истог програма тако да ће се извршавати команду по команду, редом. Покретање пограма за извршавање корак по корак се добија кликом на дугме
.
Постоје три корака која се извршавају током израчунавања.
Кликом на дугме
покрећемо извршавање прве команде. У доњој десној четвртини
поља у којем је приказан програм за извршавање корак по корак, можеш видети да је променљива добила вредност 220. Поновним кликом ће се извршити друга, а трећим и последња команда у твом програму. Резултат ивршавања програма је приказан у горњој десној четвртини поља.
2
Програмирај!
Мало другачије решење Међутим, ако желиш да добијеш програм који се лако прилагођава променама улазних параметара (програм који ће и даље да ради када се корњача помери на неки други блок или када се промене димензије екрана или блокова), тада је много боље да именујеш сваку вредност коју добијап у поставци (параметар) појединачни и задатак решиш како се то некада каже “у општим бројевима”. Решење би, у складу са тим, могло да изгледа овако:
3
Програмирај! Имајући у виду начин на који смо решавали претходни задатак, реши наредни задатак. Задатак 2. Мирјана и Лидија певају у истом хору и припремају се за концерт. Мирјана има 245 пријатеља на једној друштвеној мрежи, док их Лидија има 218. Када је Мирјана погледала Лидијин профил, видела је да имају 114 заједничких пријатеља. Ако би и једна и друга позвале све своје пријатеље са те друштвене мреже на концерт, колико различтих људи би добило тај позив. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
4
Програмирај! Цели и реални бројеви До сада смо у задацима користили само природне бројеве. Језик Python подржава и рад са целим бројевима и они се записују на исти начин као у математици. О целим и реалним бројевима и њиховом употребом у Python-у говори видео-лекција коју можеш наћи на следећем линку
Python – цели и реални бројеви Дакле, Python даје могућност рада са целим и ралним бројевима. Тако на пример, Python може да израчуна вредности израза као што су 3 – 8 и (-3) - (-8). У интерактивном Python окружењу испробај израчунавање вредности наведена два израза. Реалне бројеве је, такође, веома једноставно користити, са једном разликом у односу на математичке алате. Наиме, при записивању реалних бројева се уместо децималног зареза на који смо навикли у математици мора користити децимална тачка. Тако се, на пример, број 2,5 записује као 2.5. Задатак 1. Бајкалско језеро у Русији је најдубље језеро на свету. Оно је криптодепресија јер се његово дно (најнижа тачка) налази на 1,181 километара испод нивоа мора, а површина му се налази на 456 метара надморске висине. Израчунај његову највећу дубину у метрима.
1
Програмирај! Размисли како би решио овај задатак. Посебну пажњу посвети начину на који ћеш забележити надморске висине дна и површине језера. Исправност свог решења можеш проверити поређењем са резулатотом које даје решење дато у интерактивном уџбенику, којем можеш пронаћи овај задатак. При изради решења се труди да датим вредностима (улазним параметрима) и међурезултатима које користиш доделиш довољно сугестивна имена. Уколико желиш да променљиву именујеш двема речима, на пример висина површине, тада размак између те две речи направи употребом подвлаке, овако visina_povrsine.
Предлог решења Као прво, надморску висину најниже тачке, тј. позицију дна језера у односу на ниво у Python-у можеш да представиш негативним бројем -1.181. Како је надморска висина дна дата у километрима, а висина површине воде у метрима, њихове вредности треба представити истим мерним јединицама. На крају остаје израчунавање разлике надморских висина највише и најниже тачке. Python код би модао да изгледа овако:
Криптодепресија је удубљење испуњено водом, чија је површина изнад нивоа мора, а дно испод нивоа мора. Потиче од грчке речи крипто, што значи скривен или тајан, и речи депресија, што у географији представља израз за предео нижи од нивоа површине мора. Криптодепресије су углавном језера. Највећа криптодепресија на свету је управо Бајкалско језеро, а у Европи је то језеро Ладога. На Балканском полуострву највећа криптодепресија је Скадарско језеро на граници Црне Горе и Албаније. Криптодепресије обично настају када се раседи и расцепи у земљиној кори испуне водом.
2
Програмирај!
Задатак 2. Марко је купио 0,45 kg саламе, 0,25 kg сира и два паковања од по 0,3 kg шунке. Колико је тешка кеса коју носи кући? Покушај да решиш овај задатак. Води рачуна о запису реалних бројева у Python-y. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
3
Програмирај!
Реално дељење У већини програмских језика разликују се два облика дељења: реално и целобројно. Целобројно дељење се врши искључиво над целим бројевима, док се реално примењује и на целе и на реалне бројеве. О целобројном дељењу ће бити речи у наредној лекцији, док је ова посвећена реалном дељењу. За почетак одгледај видео-лекцију коју можеш наћи на следећем линку
Python – реално дељење Реалним дељењем се могу делити и реални и цели бројеви, а резултат може бити реалан број. На пример, ако се користи реално дељење тада је 7,5 : 2,5 једнако 3 док је 5 : 2 једнако 2,5. Реално дељење се у језику Python3 обележава знаком /. Тако је вредност израза 7.5 / 2.5 једнака 3.0. Да истакнемо још једанпут: Реално дељење се у језику Python3 обележава знаком /.
Покрени сада интерактивно програмско Python окружење и уради наредни задатак. Задатак 1. Израчунај вредности следећих израза 1. 6/2 2. 5/4 3. 2.5/2 Као што видиш, резултат реалног дељења је реалан број без обзира да ли делиш два цела, један цео и један реалан или два реална броја. Тако се реалним дељењем целих бројева 6 и 2 добија број 3 у запису реаног броја, дакле 3.0. Користећи Python интерактивно окружење израчунај сада вредност нешто сложенијег израза. Задатак 2. У једној збирици из математике за шести разред јавља се задатак у коме се тражи да се израчуна вредност израза 1 + (3 - (-4)) : 2 + 0,7. Предлог решења
1
Програмирај!
Задатак 3. Скакач у даљ је у квалификацијама у првој серији скочио 8,12, у другој 8,23, а у трећој 8,17 метара. Колико је износио његов просечни скок?
Просек (каже се и аритметичка средина) неколико бројева једнак је количнику њиховог збира и њиховог броја. Са просеком си се сигурно већ срео када си рачунао просек својих оцена. Дакле, да бисмо решио овај задатак потребно је сабрати дужине сва три скока и поделити са три. Предлог решења У складу са више пута наглашеним саветом о именовању улазних параметара решење би могло овако да изгледа:
2
Програмирај! Прочитај и реши наредни задатак Задатак 4. На првој полици има 150 књига. На другој има дупло мање него на првој, а на трећој три пута мање него на првој. Колико је укупно књига на полицама? Предлог решења Један од начина да решиш задатак је следећи:
Приметимо да се као резултат добија број 275.0 уместо 275. То је због тога што се након примене операције реалног дељења (операције /) добије увек резултат у облику реалног броја. Пошто је број књига цео број и пошто је број 150 дељив и са 2 и са 3 (иначе задатак не би имао смисла) на овом месту је било могуће употребити и операцију целобројног дељења о којој ће више речи бити у наставку. Слична ситуација се јаваља и у наредном задатку. Реши га и размотри резултат. Задатак 5. Књига има 282 стране. Марко је првог дана прочитао трећину, другог дана половину остатка, а трећег књигу прочитао до краја. Колико страна је прочитао трећег дана? Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
3
Програмирај!
Целобројно дељење За почетак одгледај видео-лекцију посвећену целобројном дељењу коју можеш наћи на следећем линку
Python – целобројно дељење Дакле, целобројно дељење обично подразумева дељење целих бројева и као резултат се одређују целобројни количник и остатак при дељењу. На пример, ако се целобројно деле бројеви 14 и 3 тада се добија целобројни количник 4 и остатак 2. Наиме, важи да је 14 = 4 · 3 + 2, при чему је 0 ≤ 2 < 3. У општем случају, целобројни количник и остатак при дељењу бројева a и b су бројеви q и r такви да је a = q · b + r и 0 ≤ r < b.
У оквиру интерактивног уџбеника пронађи секцију Целобројно дељење и одговори на прво питање у њој. Питање 1. Који је резултат целобројног дељења бројева: 1. 13 и 5, 2. 5 и 6, 3. 15 и 3? Одговор 1. Како је 13 = 2 * 5 + 3, то је целобројни количник једнак 2, а остатак једнак 3. 2. Како је 5 = 0 * 6 + 5, то је целобројни количник једнак 0, а остатак једнак 5. 3. Како је 15 = 3 * 5 + 0, то је целобројни количник једнак 3, а остатак једнак 0.
У језику Python3 операција целобројног дељења се означава са //, а операција израчунавања остатка при дељењу се означава са %. У математици се знак % користи да означи проценат (стоти део нечега). Коришћење истог знака за остатак при дељењу је заправо несрећна околност и треба бити обазрив да се та два заправо неповезана појма случајно не помешају. Дакле, оператором / се израчунава реални, оператором // целобројни количник, а оператором % остатак при дељењу.
1
Програмирај! Провери колико ово разумеш. У оквиру интерактивног уџбеника пронађи секцију Целобројно дељење и одговори на друго и треће питање у секцији. Питање 2. Које вредности имају следећи изрази написаинх у Python-у јазику: 1. 29 % 10, 2. 29 // 10, 3. 29 / 10, 4. 53 % 8, 5. 53 // 8, 6. 53 / 8? Покушај да одговориш на питање без покретања Python кода, а затим провери да ли си био у праву.
Решимо сада неке задатке у којима је потребно употребити целобројно дељење да би се дошло до решења. Задатак 1. У школи се организује новогодишња приредба за децу. Од пара које су зарадили тако што су организовали сајам својих рукотворина купили су неколико крем бананица које желе да равномерно поделе свој деци (тако да свако дете добије исти број бананица). Ако се зна колико ће деце доћи на приредбу, колико ће свако дете добити бананица и колико ће бананица остати нерасподељено. Као прво, примети да овога пута у задатку нису дати сви подаци који су потребни да би се одговор могао дати. У овом случају се подразумева да број деце, као и број купљених бананица мора бити затражено од корисника програма (онога ко програм покреће). У овом случају ћеш ти бити корисник. Команда којом програмско ће окружење од тебе затражити да унесеш једну целобројну вредност која је int(input(“Unesi jedan ceo broj ”)). Како су нам потребне
2
Програмирај! две целобројне вредности са конкретним значењем, једна која представља број деце, а друга која представља број бананица, ово би могла да буде формулација одговарајућих наредби:
Током извршавања ових наредби у интерактивном Python окружењу јавиће се испис који личи на следећи:
што би значило да ће се, у овом случају, променљивој broj_dece доделити вредност 3, а променљивој ukupno_bananica вредност 16. У овом треунтку ти је само показано како се команда за учитавање користи. Детаљније о њој ћеш имати прилике да учиш на неком од наредних часова. Када је у питању сам поступак одређивања броја бананица које ће свако дете моћи да добије, потребно је да уочиш да је тај број једнак целобројном количнику укупног боја баница и броја деце. Остатк при целобројном дељењу ове две вредности ће, у ствари, представљати број бананица које ће остати неподељене. Предлог решења Решење задатка би могло да изгледа овако:
3
Програмирај! Приметимо и да смо број преосталих бананица могли израчунати и тако што од укупног броја бананица одузмемо број бананица које су подељене деци (а то је производ броја деце и броја бананица које је свако дете добило) тј. помоћу израза ukupno_bananica - broj_dece * bananica_po_detetu. Ипак, коришћење оператора % којим се израчунава остатак је много једноставније решење. Приметимо да наредба за испис обогаћена пратећим текстом да би сам испис резултата био информативнији. Пратећи текст уз вредности променљивих чије вредности желиш да одштампаш додајеш тако што ћеш га написати под знацима навода набројан са променљивом у одговарајућем редоследу. На пример, print("Ostaće", ostalo_bananica, "bananica.") О самој print команди ће бити више речи у некој од наредних лекција. По покретању програма, за унете одговарајуће вредности, излаз твог програма би требао да личи на овај:
Целобројни количник и остатак су нарочито корисни када је потребно вршити прерачунавање мерних јединица. Покушај да решиш следећи задатак.
Задатак 2. Напиши програм који на основу дате дужине у центиметрима израчунава исту дужину у метрима и центиметрима. На пример, ако је дужина 178 центиметара, програм израчунава да је то 1 метар и 78 центиметара. Пошто у једном метру има 100 центиметара, задатак се своди на израчунавање целобројног количника и остатка при дељењу са 100. Заиста, ако имамо m метара и c центиметара, тада је укупан број центиметара једнак m⋅100+c, при чему је 0≤c<100. Имајући у виду наведено, напиши сопствено решење задатка.
4
Програмирај! Предлог решења Решење овог задатка би могло да изгледа овако:
Упореди дато решење са својим и продискутуј о разликама.
5
Програмирај!
Уграђене функције Да би олакшали и убрзали рад програмера за често потребне послове програмски језици поседују такозване “готове функције” чијим се једноставним позивом добија тражени резултат. Функције већ уграђене у сам програмски језик се називају уграђеним функцијама.
Најчешћа улога функције јесте да обради податке које при позиву добије и да одговор шта је резултат обраде. Та иста идеја постоји и у реалним ситуалцијама у животу. На пример, ако желиш са својим другом који живи у другом граду да размениш сличице то можеш да урадиш тако што ћеш отићи до њега и обавити размену, а можеш позвати курирску службу дати своје дупликате сличица и сачекати да ти донесу нове које ти је друг обећао. Обраћање курирској служби би могло да се представи овако Duplikati -> Kurir ->
Nove slicice
Курир у овом примеру обавља посао размене сличица, па се његова функција у програмерском стилу може записати овако: Poštansko_sanduce = Razmeni (duplikati) где је Razmeni – функција Duplikati – оно што функција добија на обраду, такозвани аргумент Poštansko_sanduce – оно у шта ће се сместити резултат функције, такозвана повратна вредност Више о функцијама ћеш учити касније, за сада је довољно да имаш представу о начину на који се готове функције користе. На овом часу ћеш се упознати са пар корисних уграђених функција које ти Python као програмски језик нуди. За почетак одгледај следећу видео-лекцију
Python – уграђене функције
1
Програмирај! Функције минимум и максимум У многим задацима потребно је одредити мањи или већи од два дата броја. Пошто је тај задатак веома чест, програмски језик Python нуди решење у виду функција min и max. Функција min одређује такозвани минимум даје минимум На пример, вредност израза min(2, 5) је мањи од бројева 2 и 5 тј. број 2, док је вредност израза max(2, 5) већи од бројева 2 и 5 тј. број 5. Покушај сада да у интерактивном уџбенику одговориш на наредна два питања.
Задатак 1. 1. Вредност израза min(24, 17) је _________ 2. Која је вредност израза min(min(5, 2), 3)? (A) 2 (B) 3 (C) 5 Одговори Одговор на питање 1 је, наравно, 17. Одговор на питање 2 јесте број 2. Наиме, прво ће бити израчуната вредност min(5, 2), што је 2. Затим се одређује минимална вредност између управо одређене 2 и задатог броја 3, што је 2. Хајде да поменуте функције употребимо за решавање неких проблема. Задатак 2. Љубица је једног дана добила оцену из биологије и географије. Која је већа оцена коју је Љубица добила тог дана? Предлог решења
Задатак 3. Аљоша и Борис су браћа која иду у трећи и шести разред и деле исту собу. У соби имају две полице за књиге, међутим, књиге су им се измешале и они желе да их раздвоје тако да на једној полици буду само Аљошине књиге за трећи, а на другој полици буду само Борисове књиге за шести разред (свеједно им је која ће полица бити чија). Колики је најмањи број књига које треба да помере?
2
Програмирај! Када мало размислиш, приметићеш да постоје два начина да се књиге раздвоје. Први је да се све Аљошине књиге са прве полице пребаце на другу, а да се све Борисове књиге са друге полице пребаце на прву полицу. Други начин је да се све Борисове књиге са прве полице пребаце на другу, а да се све Аљошине књиге са друге полице пребаце на прву. У првој варијанти број књига које се пребацују једнак је збиру броја Аљошиних књига на првој и Борисових књига на другој полици, док је у другој варијанти тај број једнак збиру броја Борисових књига на првој и Аљошиних књига на другој полици. Решење је мањи од та два броја (а мањи од два броја можемо израчунати функцијом min). Предлог решења
Функција апсолутна вредност Још једна веома корисна функција коју си упознао/упознала у математици је апсолутна вредност. Као што си већ учио на часовима математике, апсолутна вредност неког броја представља удаљеност тог броја од нуле. Када пишемо програме у језику Python и када нам је у неком тренутку потребна апсолутну вредност неког броја не морамо је сами рачунати, већ можемо искористити функцију abs која ће то урадити за нас. Тако је вредност израза abs(5) једнака 5, док је вредност израза abs(-3) једнака 3. Једна од најзначајнијих примена апсолутне вредности јесте израчунавање удаљености бројева, без обзира на њихов међусобни однос. Наиме, растојање између бројева x1 и x2 је једнако апсолутној вредности њихове разлике тј. вредности |x1−x2|, без обзира да ли је x1≥x2 или је x1<x2.
3
Програмирај!
Задатак 4. Cпратови у једној згради су обележени са бројевима од -2 до 10 (бројеви -2 и -1 означавају два нивоа испод земље, 0 означава приземље, док остали бројеви означавају спратове изнад земље). Ако се знају спратови на којима се налазе два другара, израчунај колико су спратова удаљени.
Пошто не знамо да ли лифт иде на горе или на доле тј. да ли је полазни спрат мањи или већи од долазног, растојање између спратова можемо израчунати тако што израчунамо апсолутну вредност разлике између тих спратова. На пример, ако би први другар био на трећем спрату, а други у првом подруму, растојање би могло да се израчуна на следећи начин. Предлог решења
Задатак 5. Јелена је дошла аутобусом на станицу у s1 сати и m1 минута, док је Иванин аутобус стигао у s2 сати и m2 минута. Колико је сати и минута она која је прва стигла чекала ону која је друга стигла? За почетак претвори време Јелениног доласка датог у сатима и минутима у минуте и исто то уради и са временом стизања Иваниног аутобуса. Разлика добијених времена ће бити време протекло између доласка два аутобуса изражено у минутима. Пошто није познато који је аутобус први стигао, протекло време треба одредити као апсолутну вредност разлике. Када се количина протеклог времена изражена у минутима, преостаје се оно изрази у целим сатима и преосталим минутима. Број сати се може одредити целобројним дељењем времена израженог у минутима са 60, тј. бројем минута у једном сату, док су преостали минути остатак при том истом целобројном дељењу.
4
Програмирај! Предлог решења
Задатак 6. Марко и Ненад помажу оцу у столарским пословима. Отац је добио велику наруџбину столова за које је између осталог припремио ногаре. Ногаре је потребно прелакирати, па их је одприлике поделио на две сличне гомиле и дао сваком сину по једну на фарбање. Браћа воле да се такмиче у томе ко ће пре посао да заврши, па желе да подела буде фер. Напиши програм који ће одредити за колико се гомиле разликују и колико је потребно ногара пребацити са веће на мању да би биле једнаке. Покушак самосталнo да решиш овај задатак. Када га урадиш упореди са решењем које видиш наставку и прокоментариши са наставником и ученицима у чему се разликују твоје и дат решење, уколико разлике има. Предлог решења
5
Програмирај!
Ниске Поред бројева, рачунари су веома добри и у раду са текстом. Текст се састоји од слова (малих и великих), цифара, размака, интерпункцијских знакова (на пример тачака, зареза, упитника, узвичника) и слично. Све те знакове једним именом називамо карактери. Неки програмски језици подржавају само веома узак скуп карактера (од слова је могуће користити само слова енглеске абецеде), међутим, програмски језик Python3 користи широк скуп карактера који обухвата и све карактере потребне за писање на већини језика света, укључујући и слова ћириличког и латиничког писма која се користе у српском језику. Поменути основни скуп карактера је довољан само за запис текста на енглеском језику назива се ASCII, док се овај шири скуп карактера назива Unicode. Низ карактера чини ниску или стринг (од енглеске речи string која значи ниска). Ниске се у програму записују између наводника. На пример, ниске су "Zdravo" или "Programski jezik Python.". Уместо двоструких равноправно се могу користити и једноструки наводници (на пример, 'Zdravo'), међутим, да се не би збуњивао користићемо двоструке наводнике. Тема овог часа су управо ниске и рад са нискама у програмском језику Python. За почетак одгледај следећу видео-лекцију
Python – ниске У програмском окружењу Python испиши и покрени команду којом се исписује поздравна реченица Здраво, свете!. Команда би могла да изгледа овако: print("Zdravo, svete!")
1
Програмирај! Операције и уграђене функције за рад са нискама Слично као и над бројевима и над нискама се могу вршити одређене операције. Једна од основних операција је спајање две ниске. Ова операција донекле подсећа на сабирање и обележава се знаком +. На пример, вредност израза "abraka" + "dabra" је "abrakadabra". Задатак 1. Напиши програм у којем се од ниске која представља име и ниске која представља презиме једне особе формира и исписује ниска која саржи име и презиме те особе. Предлог решења
Ако желиш да име и презиме имају размак између додај размак испред презимена.
Размак у тексту се, такође, сматра карактером, па се ниска која садржи један размак записује овако “ ”. Тако је претходно решење кориговати тако да се не прави промена у ниски која бележи презиме већ да се размак уметне као додатне ниска између имена и презимена.
Још једна интересантна операција је да се ниска помножи природним бројем. Слично као што код бројева множење представља узастопно сабирање, исти је случај и овде и може се 2
Програмирај! наслутити да множење ниске бројем заправо представља њено понављање одређени број пута. На пример, вредност израза "ba"*2 је "baba". Сада пробај да одговорип на прво питање у интерактивном уџбенику које се налази у секцији Надовезивање ниски.
Дужина ниске, издвајање делова ниске За рад са нискама Python нуди више уграђених функција. Једна од њих је len, функција којом се одређује број карактера ниске, тј. дужина ниске. Дужину ниске тј. број њених карактера можемо добити помоћу функције len. Тако је len("Zdravo") једнако 6, јер ниска "Zdravo" има тачно 6 карактера. Своје разумевање ове функције провери тако што ћеш одговорити на питања у интерактивном уџбенику која се налазе у секцији Дужина ниске, издвајање делова ниске. Карактери у ниски имају своје редне бројеве тј. позиције. Први карактер се налази на позицији 0, други на позицији 1 и тако даље. На пример, карактери у ниски "Zdravo svima!" се броје на следећи начин. 0
1
2
3
4
5
Z
d
r
a
v
o
6
7
8
9
10
11
12
s
v
i
m
a
!
Могуће је издвојити појединачни карактер из ниске. На пример, ако је ime = "Zorana" тада се карактер Z може добити изразом ime[0], а карактер r изразом ime[2]. Подржани су и негативни индекси тако што -1 означава последњи карактер, -2 претпоследњи и тако даље. -13
-12
-11
-10
-9
-8
Z
d
r
a
v
o
-7
-6
-5
-4
-3
-2
-1
s
v
i
m
a
! 3
Програмирај! На пример, ако је ime = "Zorana" тада је ime[-1] карактер a док је ime[-3] карактер r. Још једна операција која је често корисна је издвајање дела ниске. Приликом издвајања може се навести распон позиција, при чему се издвајају карактери из тог распона рачунајући прву, а не рачунајући другу наведену позицију. На пример, ime[2:5] издваја карактере имена на позицијама 2, 3 и 4 (распон [2:5] је полуотворен тј. позиција 2 је урачуната, а позиција 5 није). Ако је ime = "Predrag" тада је ime[2:5] једнако "edr". Ако се горња граница не наведе, тада се издваја део ниске до њеног краја. Тако је ime[3:] једнако "drag".
Претрага ниске Често је потребно да проверимо да ли једна ниска садржи неки карактер или садржи неку другу ниску. То можеш урадити употребом функције find. На пример, нека је Rec = “ponedeljak” Тада је Rec.find(“d”) једнако 4 Rec.find(“c”) једнако -1, јер траженог карактера нема у стрингу Rec.find(“e”) једнако 3, јер функција враћа позицију прве појаве траженог каракатера или тражене ниске Rec.find(“P”) једнако -1, јер се велика мала слова сматрају различитим карактерима
4
Програмирај!
Задатак 2. Напиши програм у којем се на основу дате ниске која садржи име и презиме добијају ниска са именом и ниска с презименом те особе. Да би решио проблем, за почетак одреди позицију размака, који у датој нисци раздваја име од презимена. Затим на осбноу те позиције издвој делове полазног стринга и то део до дате позиције за име и део који садржи карактере од првог наког размака па до краја стринга. Предлог решења
Задатак 3. Нинџа-корњача се креће кроз лавиринт тако што слуша упутства на тајном језику. Горе се на том језику каже rif, доле el, лево oma, а десно lun. Напиши програм који помаже корњачи да пронађе излаз из лавиринта. Покушај да решиш овај задатак. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
5
Програмирај!
Гранање Када желиш да опишеш поступак за решавање неког проблема или обаваљање некаквог посла често се дешава да постоје одређени кораци које је могуће или потребно извести само ако је неки услов испуњен. На пример, припрема за одлазак на излет поред језера би могла да буде описана на следећи начин: 1. Припреми сендвиче 2. Набави сокове 3. Спакуј сокове и сендвиче у корпу 4. Понеси простирку 5. Ако су најављене падавине a. Понеси кишобран b. Понеси кабаницу ако нису c. Понеси купаћи костим d. Понеси патике за воду 6. Понеси лопту за одбојку Као што видиш због корака 5. постоје два начина на који се према датом поступку за припрему можеш спремити. На који начин ћеш то извести зависи од одговора на питање да ли су најављене падавине или не. Када поступак, тј. алгоритам стизања до одређеног циља, подразумева различите кораке у зависности од испуњености одређених услова тада кажемо да у алгоритму долази до гранања. Покушај да даш свој пример ситуације из реалног живота у којој поступак стизања до циља или решења задатка зависи и од испуњености некаквих услова. Како у реалном животу, тако и у програмирању, постоје ситуације у којима је у поступку решавања проблема за извршавање одређених корака потребно испитати да ли је одређен услов испуњен. За те потребе је уведена и посебна наредба. Тема ове лекције је управо гранање у Python програмском језику. За почетак одгледај следећу видео-лекцију
Python – наредбе гранања 1
Програмирај! Да би се у језику Python описало условно извршавање неких наредби користи се наредба if која има следећи облик:
Примети да се након услова обавезно мора навести двотачка (карактер :) и да се наредбе које се извршавају условно морају мало увући (обично се то уради тако што се испред сваке наредбе откуцају три размака). Најчешћи и најједноставнији облик услова јесу поређења неких величина. Рачунар уме да пореди величине (бројеве, али и ниске). За то се користе оператори, такозвани релацијски оператори, слични онима које си већ видео у математици. ОПЕРАТОРИ ПОРЕЂЕЊА a<b
проверава да ли је a мање од b
a>b
проверава да ли је a веће од b
a >= b проверава да ли је a веће или једнако b a <= b проверава да ли је a мање или једнако b a == b проверава да ли је a једнако b Резултат примене ових оператора је тачно или нетачно (кажемо да је резултат логичка тј. истинитосна вредност). a != b
проверава да ли је a различито од b
Хајде сада да решимо један једноставан проблем за који је потребно користити гранање. Задатак 1. Напиши програм који корисницима млађим од 15 година шаље посебну похвалу јер су кренули да програмирају веома рано. Решење овог задатка би могло да изгледа овако:
2
Програмирај! У преходном задатку команда за штампање се извршавала само у случају да је услов задовољен, док ако услов није задовољен сам програм неће урадити ништа додатно. Често се јавља потреба да је у случају да када неки услов није задовољен потребно изршити некакав други скуп корака. На пример, ако је корисник унео исправну лозинку треба му пожелети добродошлицу на сајт, а у супротном му треба јавити да унета лозинка није исправна. Такав облик организације извршавања програма се постиже наредбом if-else која у језику Python има следећи облик:
Примети да је двотачку потребно навести и иза else, као и да су оба блока наредби увучена. Задатак 2. Како би претходни програм требало да изгледа, ако би онима који имају 15 или више годинa било потребно рећи да никада није касно да крену са учењем програмирања? Решење би могло да изгледа овако:
Дакле, постоји када постоји услов који може и не мора бити испуњен и када се у зависности од његове испуњености извршава један или други скуп наредби, на месту испитивања услова у програму се јавља такозвано гранање. Једну грану чине кораци који се извршавају уколико је услов испуњен, а другу кораци који се извршавају уколико услов није испуњен. Зато се сама наредба назива наредбом гранања.
3
Програмирај!
Задатак 3. Напиши програм који након учитавања једног броја исписује коментар да ли је унети број позитиван или не.
Предлог решења
Задатак 4. Напиши програм који испитује да ли је унети број паран или непаран. Проверу да ли је један број дељив другим можемо извршити тако што израчунамо остатак при дељењу и упоредимо га са нулом. Подсетимо се, о целобројном дељењу је већ било речи на ранијим часовима и тада смо рекли да се остатак може израчунати коришћењем оператора %. Предлог решења
4
Програмирај! Поређење се може вршити и над нискама. Погледај наредни задатак. Задатак 5. У бајци браће Грим, патуљак се звао Цвилидрета и девојка је требало да погоди његово име. Ако принцеза промаши, потребно је исписати јој поруку да, нажалост, није погодила. Предлог решења
Задатак 6. Напиши програм који проверава да ли је корисник научио колико бајтова постоји у једном килобајту. Покушај да решиш овај задатак. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
5
Програмирај! Комбиновање више логичких услова (логички оператори) Постоје ситуације у којима сам услов који мора бити испуњен да би одређени кораци били извршени није могуће описати једноставним поређењем две вредности, већ је потребно проверити испуњеност више једноставних услова. На пример, учитељица жели да поклони књигу свим оним ученицима који су имали примерно владање током године и који су били одлични ђаци или су учествовали у украшавању учионице. И у говорном, а и у програмским језицима се за конструкцију сложених услова користе везници којима се се везију једноставнији услови. У програмским језицима се они називају логичким операторима.
Једноставније услове комбинујемо речима и, или и не. Сложени услов облика услов1 и услов2 је испуњен само ако су оба услова, услов1 и услов2 испуњени. На пример, да би реченица грмило је и севало била тачна, потребно је да је грмило и да је севало. Реч и се у језику Python записује помоћу речи and. Да би сложени услов облика услов1 или услов2 био испуњен довољно је да је бар један од услова услов1 и услов2 испуњен. На пример, реченица “ићи ћу за викенд у позориште или у биоскоп” је тачна ако одеш само у позориште, само у биоскоп, али и ако одеш и у позориште и у биоскоп. Реч или се у језику Python записује помоћу речи or. Да би услов облика не услов био испуњен потребно је да услов услов не буде испуњен. На пример, реченица “Данас не пада киша” је тачна само ако реченица “Данас пада киша” није тачна. Реч не се у језику Python записује помоћу речи not.
Наредбе1.које се понављају наводиш увучене неколико размака у односу на положај Задатак наредбепрограм for. Напиши у који за унети број година исписује коментар да је особа са датим бројем година тинејеџер или не, при чему се сматра да је особа тинејџер уколико има бар 12 и не више од 19 година.
Предлог решења
6
Програмирај! Када се дефинишу сложени услови могуће је користити и заграде којима се, као и у аритметичким изразима, утиче на редослед извршавања операција. Тако на пример, нека је услов да учитељица награди ученика задат овако: Ученик ће бити награђен ако
је имао примерно владање током године и ако
је одличан ђак или је учествовао у украшавању учионице.
Можеш уошити да се услов састоји из три једноставна услова: услов1 : има примерно владање услов2 : одличан је ученик услов3 : учествовао је у украшавању учионице који би на следећи начин морали да буду повезани да би на исправан начин описали наведени сложени услов: услов1 и (услов2 или услов3) На који начин би се променио услов за награђивање ако би његов запис изгледао овако: (услов1 и услов2) или услов3? Који би ученик могао да се нађе на списку награђених који је формиран на основу овако описаног услова, а не би могао да се нађе на основу првобитно дефинисаног услова? Одговор. Да би ученик задовољио услов дефинисан са (услов1 и услов2) или услов3 довољно је да је учествовао у украчавању учионице. Ако такав ученик иначе нема примерно владање, према првобитно описаном услову он не би могао да буде награђен.
Задатак 2. Кућни ред забрањује прављење буке пре 6 часова и између 13 и 17 часова, и након 22 часа. Напиши програм који радницима говори да ли у неком датом тренутку могу да изводе бучније радове. Покушај да решиш овај задатак. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
7
Програмирај!
Корњача графика Веома леп начин да се прикажу неки основни концепти програмирања је такозвана корњачаграфика у којој се неки замишљени лик креће по екрану остављајући притом траг који чини цртеж. Уколико си програмирао у Скречу, онда си већ имао прилику да црташ коришћењем корњача графике. Тема ове лекције је упознавање са корњача графиком у Python програмском окружењу. За почетак одгледај следећу видео-лекцију
Python – корњача графика Да бисмо у нашим програмима могли користити цртање уз помоћ корњаче, потребно је прво да укључимо библиотеку за рад са корњачом под називом turtle. Укључивање библиотеке се изводи тако што се пре позива било које наредбе из бибилотеке наводи import turtle. Након тога можемо издавати наредбе нашој корњачи. Свака наредба корњача бибилотеке почиње са turtle. На пример, наредба којом се корњачи говори да се помери напред (у смеру у ком је тренутно окренута) 100 корака гласи овако turtle.forward(100). Цртање корњача графиком се заснива на идеји да корњача, којој можемо издато команде за кретање на екрану, подразумевано са собом носи оловку којом црта. Оловка може бити спуштена, што значи да ће на екрану остављати траг којим исцртава путању којом се корњача креће. Уколико је оловка подигнута, не оставља траг. На почетку програм корњача се налази у центру екрана и окренута је надесно (у смеру истока), па од те тачке почиње свако њено кретање. За почетак испробај следећи једноставан проргам.
1
Програмирај!
Као што видиш резултат програма је исцртавање једне линије дужине 100 пиксела, почевши од центра поља у којем се врши исцртавање ка истоку.
Могуће је поставити различите параметре који одређују начин на који се врши исцртавање. Да бисмо видели нашу корњачу (уместо стрелице која се подразумевано приказује) можемо употребити наредбу turtle.shape("turtle"). Помоћу turtle.color можемо променити боју корњаче и њене оловке (и тако променити и боју трага тј. линија које се цртају). Као параметар ове наредбе у заградама под наводницима наводимо име жељене боје на енглеском језику. На пример, наредба turtle.color("red") поставља црвену боју. Помоћу turtle.width постављамо дебљину трага који корњача оставља, при чему се дебљина задаје као параметар. На пример, наредбом turtle.width(5) постижемо да линије које се цртају буду дебеле 5 пиксела. Да бисмо видели јасније како корњача ради, можемо јој променити брзину кретања. turtle.speed(0) нам даје најбржу корњачу (након покретања програма се одмах види готов цртеж), док turtle.speed(10) даје најспорију корњачу (могуће је навести и било коју целобројну вредност између 0 и 10). Да ли можеш да предвидиш шта ће се добити покретањем наредног програма?
Да ли се твоје предвиђање разликује од резултата који можеш видети на следећој слици?
2
Програмирај! Уколико ниси био у праву, проанализирај са наставником и осталим ученицима где си погрешио у закључивању. Корњача током свог кретања оставља траг. Међутим, некада је згодно да корњачу померимо без цртањa. Наредбом turtle.penup() корњача подиже своју оловку и након тога се креће по екрану не остављајући траг све док јој се не изда наредба turtle.pendown() након чега поново почиње да оставља траг током кретања. Можеш ли да предвидиш шта ће се исцртати наредним програмом?
Своје предвиђање упореди са резултатом извршавања датог програма приказаном на слици испод.
Као што видиш, корњача се три пута кретала напред у правцу истока, али је при другом померању оловка била подигнута, па није остављала траг. Зато је резултат испрекидана линија. Уколико те занима да научиш још неку корњача команду можеш да их потражиш у интерактивном уџбенику.
3
Програмирај! Понављање У програмима које задајемо корњачи често су облици правилни и неке се наредбе понављају. На пример у задатку који следи одређени кораци у извршавању програма су исти, тј. понављају се. Задатак 1. Напиши програм у којем корњача црта квадрат чија је дужина страница 100 корака. Предлог решења Квадрат се може нацртати тако што се четири пута корњачи зада да иде 100 корака напред и да се затим окрене за 90 степени (на пример, налево). Програм који исцртава квадрат се може написати овако:
Претходни програм можемо да скратимо ако уведемо наредбу којом постижемо да се неки задати низ наредби више пута понови. У језику Python најлакши начин да се то уради је наредба for. О њој ћемо много детаљније говорити касније. За сада само упамти да наредбу ponovi n puta можеш записати као for _ in range(n): Наредбе које се понављају наводиш увучене неколико размака у односу на положај наредбе for. Погледај како претходни пример изгледа уз коришћење наредбе понављања.
4
Програмирај!
Задатак 2. Уз коришћење наредбе понављања, напиши програм у којем корњача црта квадрат чија је дужина страница 100 корака, контура зелене боје и дебљине 5, а сама корњача оставља отисак корњаче. Да напоменемо, корњача показује отисак корњаче, а не стрелице, након позива команде turtle.shape(“turtle”). Опис команде можеш пронаћи у интерактивном уџбенику. Предлог решења Решење и резултат покретања програма могу изгледати овако:
Обрати пажњу још једном на следеће на чињеницу да све наредбе које се понављају у оквиру једне for наредбе мораш записати увучене неколико размака у односу на положај наредбе for. Погледај какав резултат даје претходни програм са малом изменом у којој није наредба у 7. линији програма увучена.
Да ли можеш да закључиш шта се десило па је резултат исцртавања линија, а не квадрат? Линија је добијена тако што је корњача четири пута направила корак дужине 100 у истом смеру. Дакле, неправилно назубљивање кода је дало нежељен резултат. Задатак 3. Са и без коришћење наредбе понављања, напиши програм у којем корњача црта једнакостранични троугао са страницом дужине 100. Покушај да решиш овај задатак. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника. 5
Програмирај!
Листе Поред појединачних вредности исказаних бројем или ниском карактера, често је потребно забележити већи скуп вредности које су на неки начин повезане, као, на пример, имена у списку путника у неком авиону. Један могући начин би био да уведеш пуно засебних променљивих:
Међутим, овакво представљање података није згодно, јер не можеш једноставно да одговориш на разна интересантна питања о путницима (на пример, колико укупно има путника, ко седи на месту чији се број уноси са улаза, на ком месту седи неки дати путник и слично). О томе какве могућности нуди Python када су у питању овакви захтеви говорићемо на овом часу. За почетак одгледај следећу видео-лекцију
Python – листе Python нуди могућност да читав списак буде представљен као посебна врста колекције названа листа. Појединачни чланови листе називају се елементи. Елементи листе могу бити ниске (као у овом примеру), али и бројеви, друге листе и било шта друго. Могуће је у исту листу поставити елементе различитог типа. Листу дефинишеш тако што између угластих заграда (заграда [ и ]) наводиш елементе раздвојене зарезима. Листу путника сада можеш дефинисати и овако:
1
Програмирај! Ниске и листе имају доста заједничког, па важи следеће:
Елементима листе приступа се на основу њихове позиције тј. индекса
Бројање креће од нуле, па је првом елементу листе могуће приступити са putnici[0].
Негативни индекси упућују на бројање од краја (с десна на лево), па је последњем елементу могуће приступити помоћу putnici[-1].
Елементима између позиција a и b укључујући позицију a, али искључујући позицију b могуће је приступити помоћу putnici[a:b].
Задатак 1. Познат је списак имена путника у авиону. Седишта су нумерисана од 1 па надаље. Ако стјуардеса унесе број седишта, напиши програм који одређује име путника на том седишту. Пошто се уносе бројеви од 1 до дужине листе, а индекси се крећу од 0 па до претходника дужине листе, након учитавања броја седишта приступиће се елементу листе чији је индекс за 1 мањи од броја седишта. Предлог решења
Овако написан програм би могао да да следећи испис при покретању:
2
Програмирај!
Задатак 2. Испиши имена путника са бројевима седишта од 2, 3 и 4, као и име путника који седи на последњем седишту. Када би се места у авиону бројала од 0, као што се броје индекси листе, потребно би било издвојити елементе у распону [2:5] (то обухвата тачно индексе 2, 3 и 4). Пошто се места броје од 1, потребно је вредности наведене у распону умањити за 1 тј. употребити распон [1:4]. Предлог решења
Претрага листе Python нуди могућност одређивања индекса (позиције) у листи на којој се налази тражени елемент. Један начин да то урадиш јесте да употребиш функцију index која враћа индекс првог појављивања траженог елемента. Уколико тражног елемента у листи нема, добићеш обавештење о грешци када се програм буде извршавао. Задатак 3. На ком броју седишта седи Мика Микић? Предлог решења
3
Програмирај! Функције за рад са листама За рад са листама Python нуди функције које ти могу бити од велике помоћи. Неке од њих су:
Функција len израчунава дужину листе,
Функција sum израчунава збир елемената листе,
Функција min одређује вредност најмањег елемента у листи,
Функција max одређује вредност највећег елемента у листи.
Задатак 4. Ако су дате Маркове оцене из неколико предмета, напиши програм који ће израчунати његову просечну оцену. За одређивање просечне оцене су ти потребне сума њихова сума и број. За те вредности употреби функције sum и len. Предлог решења
Задатак 5. Време се често мења и дешава се да се у једној недељи смењују и хладни и топли дани. Ако су дате су температуре у подне у данима током једне недеље, одреди колики је распон температура тј. разлика између највише и најниже подневне температуре. Предлог решења
4
Програмирај! Сортирање листе У раду са листама је често потребно елементе листе уредити, тј. сортирати. У језику Python уређивање листе од најмањег до највећег елемента, а и у обрнутом редоследу, је врло једноставно. Сортирање листе се изводи употребом функције sorted.
Функција се може применити и на листу која садржи ниске, при чему се ниске уређују на начин на који се уређују у речницима, према алфабетскм распореду (упоредиви су и специјални карактери, али о томе ћеш учити касније). Задатак 6. Наставница треба да у дневник унесе имена ученика, међутим, од педагога је добила списак ученика који није сортиран. Напиши програм који помаже наставници да добије ученике сортиране по абецедном реду. Предлог решења
Примети да је листа овом решењу била дуга, па је било једноставније и прегледније да буде записан кроз више редова. Да би нагласо да се нека наредба наставља и у следећој линији на крај линије постави симбол \. Задатак 7. Дата је листа цена производа. Колико коштају три најјефтинија, а колико три најскупља производа? Предлог решења
5
Програмирај!
Задатак 8. Дате су цене три производа. Ко купи сва три, најјефтинији ће добити за динар. Колико ће платити? Покушај да решиш овај задатак. Задатак можеш пронаћи и проверити сопствено решење у окружењу интерактивног уџбеника.
6
Програмирај!
Скупови, торке, речници Како смо већ говорили на неком од ранијих часова, Python нуди могућност да одређену колекцију података који су међу собом према неком смислу повезани сместиш по одређеном реду у листу. Сваком податку у листи се на основу позицијије, тј. индекса може приступити. Поред листа, постоје још неке врсте такозваних структура којима се могу бележити колекције података. Тема овог часа су те додатне структуре и то: скупови, торке и речници. За почетак одгледај следећу видео-лекцију
Python – скупови, торке, речници Скупови Са скуповима си се већ упознао у математици. Њих можеш направити и користи и у Python-у. Скуп се дефинише набрајањем елемената скупа између витичастих заграда, тј. { и }. На пример, скуп фудбалских стрелаца на неком турниру се може дефинисати овако: strelci = {"Mesi", "Ibrahimović", "Nejmar", "Ronaldo"} Ако би скуп био дефинисан овако strelci = {"Mesi", "Ronaldo", "Mesi", "Ibrahimović", "Ibrahimović", "Nejmar", "Nejmar"} резулатат команде којом се исписују елементи скупа print(strelci) би у оба случаја био исти, јер се сваки елемент исписује једанпут. Дакле реултат би био, {'Mesi', 'Ibrahimović', 'Nejmar', 'Ronaldo'} Скуп је могуће формирати и од елемената већ дефинисане листе употребом функције set. golovi = ["Mesi", "Ronaldo", "Mesi", "Ibrahimović", "Ibrahimović", "Nejmar", "Nejmar"] strelci = set(golovi)
1
Програмирај! Функцијом set можеш и од ниске добити скуп карактера. То може бити веома корисно у појединим задацима. На пример,
Резултат команде ће бити следећи: {'l', 'e', 'P', 'p', 't', 'k', 'o', 'a'} У језику Python можеш веома једноставно израчунати унију, пресек и разлику скупова. Ако су A и B скупови, онда је
A | B њихова унија,
A & B њихов пресек,
A - B њихова разлика.
Пронађи у интерактивном уџбенику следећи задатак и реши га
2
Програмирај!
Задатак 1. Један скуп садржи девојчице из одељења које тренирају ритмичку гимнастику, а други оне које тренирају одбојку. Одреди скуп девојчица које тренирају оба спорта, скуп девојчица које тренирају бар један од њих и скуп девојчица које тренирају само одбојку. Предлог решења
Торке Некада је за описивање неке појаве, догађаја, особе потребно навести неколико података. На пример, позиција фигуре на шаховској табли се може прецизно описати само ако имамо и ознаку врсте (слова од a до h) и ознаку колоне (броја од 1 до 8). Слично, позиције на географској карти се описују помоћу географске ширине и дужине тј. помоћу пара реалних бројева. Тако се град Париз налази на позицији која се може описати помоћу пара 48.8566 и 2.3522. За записивање овакве колекције података, колекције у којој позиција елемента одређује њено значење (као што у ознаци позиције фигуре а7, а представља врсту, а 8 колону) у Python-у се користи торка структура. Торка се дефинише набрајањем елемената скупа између малих заграда, тј. ( и ). На пример, позиција Париза би била дефинисана овако Pariz = (48.8566, 2.3522) Када торка има само два елемента назива се паром.
3
Програмирај! Индексирање елемената у торкама врши се на исти начин као индексирање листа (на позицији 0 налази се први елемент торке, на позицји 1 други и тако даље). Ево и примера
Торке могу да буду елементи листе. Ево једне meseci = [("јануар", 31), ("фебруар", 28), ("март", 31), ("април", 30), ("мај", 31), ("јун", 30), ("јул", 31), ("август", 31), ("септембар", 30), ("октобар", 31), ("новембар", 30), ("децембар", 31)] која представља списак месеци и боја дана у сваком од њих за годину која није преступна. Овакву листу можеш искористити за решавање следећег задатка. Задатак 2. Напиши програм који за унети редни број месеца исписује његов назив и број дана у години која није преступна. За почетак из листе мораш издвојити торку која се односи на одговарајући месец. Тек када имаш торку одговарајућег месеца, тј. један елемент из листе издвојен, тада одвајаш поједине податке из торке и то, као што си већ видео, преко индекса. Предлог решења
да напишеш програм који за унети редни број месеца исписује његов назив и број дана.
4
Програмирај! Речници Листе ти дају могућност да организујеш податке за које је познат неки редослед и у којима сваки податак има свој редни број (на пример, листу смо употребили да организујемо имена путника у авиону или податке о месецима у години) и приступ елементима листе врши се на основу њиховог индекса (редног броја, тј. позиције). Међутим, често се подаци организују тако да су прилагођени специјалној врсти претраге, као што је претрага у којој на основу датог кључа желимо да приступимо вредности која је придружена том кључу. На пример, аутомобили у каталогу имају придружене цене и ми желимо да у нашем програму можемо да одредимо цену аутомобила на основу његовог модела (то значи да модел представља кључ по којем вршимо претрагу). У тим ситуацијама је добро искористити другу врсту структуре коју нуди Python а то је речник (често се назива и мапа или асоцијативни низ). Ево примера једног речника cene_automobila = {"fiat 500l": 11990, "renault clio": 9650, "toyota corolla": 13990} Као што видиш, дефиниција речника личи на скуп чији су елементи парови кључева и вредности које су им придружене, облика кључ : вредност што су у претходном примеру марка и цена аутомобила. Приступ вредности са задатом вредношћу кључа, нпр. "renault clio", на датом примеру изгледа овако: cena = cene_automobila["renault clio"] Задатак 3. Напиши програм који за унети назив марке аутомобила исписује његову цену. Предлог решења
5
Програмирај! Вредности у речнику могу бити и торке, као што ће бити у наредном задатку. Задатак 4. Познате су географске координате неколико главних европских градова. За дато име града одреди њене географске координате. Одреди посебно географску дужину и посебно географску ширину. Предлог решења
6
Програмирај!
Наредбе понављања Како би на основу онога шти си до сада научио написао програм у којем се десет пута извршава наредба print("Zdravo"). То би могло да изгледа овако
Овај програм било напорно откуцати (чак иако смо користили технику копирања и лепљења). Ако сада замислимо да желимо да корисник прво унесе број колико пута жели да се испише поздрав, тада је јасно да тај програм не можеш испрограмирати на овај начин. Решење долази у облику петљи, тј. наредби које омогућавају да се нека наредба или неки блок наредби понове више пута. Тема овог часа су управо петље. На почетку одгледај следећу видео-лекцију
Python – понављање Као што си могао да видиш у видео-лекцији, начин да у програму нешто (на пример, команду print("Zdravo")) поновиш дати број пута (на пример, 10) јесте да употребиш наредни облик програма:
Обрати пажњу, наредба која се понавља је, слично као и код команде if, увучена чиме се наглашава да је она написана у склопу for команде и да ће бити извршена дати број пута. 1
Програмирај! Дакле, команда која се користи за поновљено извршавање команде print јесте наредба for. Облик команде је следећи for i in range(10): Komanda где се i назива бројачем који узима вредности из интервала од 0 до, у овом случају 9, који је дефинисан командом range(10). Да би се Komanda поновила 50 пута потребно је у функцији range уместо 10 навести 50. Наредба for заједно са командама које се у њеном склопу понављају чине такозвану петљу. Један пролаз кроз петљу чини једно извршавање понављајућих команди.
Задатак 1. Напиши програм који израчунава обиме пет једнакостраничних троуглова чије дужине страница корисник уноси.
Да би се израчунао и исписао обим једног троугла потребно је у програму навести команду за учитавање величине странице, затим израчунати обим и на крају исписати добијени обим. Како су све три потребне да би обавио задатак за један троугао, све три се морају наћи унутар наредбе for. Дакле, програм би могао да изгледа овако:
2
Програмирај!
Задатак 2. Напиши програм који учитава неколико имена ученика и сваког појединачно поздравља. Новина у овом задатку није само другачи скуп команди већ и то што се не зна унапред колико ће се пута команде понављати, већ потребно број понављања учитати. Предлог решења
Бројачке променљиве Откуцај следећи програм и покрени га.
Резултат извршавања овог програма јесте испис бројева од 0 до 9. Разлог томе јесте начин на који се for команда извршава. Наиме, i in range(10) значи да ће при сваком, од 10, пролаза кроз петљу, бројач i узима вредности из интервала од 0 до 9, при чему у првом пролазу узима вредност 0, другом 1, трећем 2 итд. Команда range() може да има и мало другачији. Наиме, уколико би написали овакву команду for i in range(4,10): print(i) ће резултирати исписом броје почевши од 4, па до 9.
3
Програмирај!
Задатак 2. Напиши програм који исписује све бројеве почевши од вредности првог учитаног броја до вредности другог учитаног броја.
Предлог решења
Пролазак кроз листу Команду for се можеш користити и за пролазак кроз листу. Уместо проласка кроз лист целих бројеве креирану командом range(), можеш се користити листу произвољних чланова. Понављања команди у петљи ће бити онлико колико има чланова листе. На пример, петља for i in [3, 5, 9]: print(i) ће имати три пролаза. На излазу ће бити исписаи бројеви 3, 5 и 9, јер су то вредности које ће и узети у првом, другом и трећем пролазу кроз петљу. Задатак 3. Дата је листа у којој се налази списак неколико оперативних система. Испиши све елементе ове листе (сваки у посебној линији). Предлог решења
Овај задатак можеш решити и на други начин, тако шт ћеш употребити бројачку променљиву и елементима листе приступати на основу индекса. На тај начин уз сваки систем можеш исписати и његов редни број. Бројачка променљива узима редом вредности од 0, па све до броја који је за један мањи од дужине листе. Ако редни бројеви иду од 1 па до дужине листе, редни број је у сваком кораку за један већи од вредности бројачке променљиве. 4
Програмирај! Решењи би у том случају могл да изгледа овако:
Пролазак кроз листу парова У петљи можеш проћи и кроз све елементе листе парова. Покушај да решиш наредни задатак. Задатак 4. Ако је дата листа која садржи парове имена и презимена неколико научника, напиши програм који прави њихов списак. Предлог решења Један начин решавања овог задатка јесте да прођеш кроз листу парова као кроз било коју другу листа тј. да уведемо променљиву која ће имати редом вредности једног по једног уређеног пара. Појединачним елементима пара (имену и презимену), онда можеш да приступити на основу индекса у оквиру пара.
Слично, можеш употребити и бројачку променљиву која ће пролазити кроз индексе листе и затим сваком пару приступати на основу његовог индекса у листи, а онда сваком елементу пара (имену и презимену) приступати на основу његовог индекса у пару.
Постоји још један начин проласка кроз листу парова, који у поједним ситуацијама може бити од велике помоћи.
5
Програмирај!
У овом сличају променљиве ime и prezime редом узимају имена и презимена научника.
Пролазак кроз речник У петљи можеш проћи и кроз речник. листе парова. Нека Покушај да решиш наредни задатак Задатак 5. Нека је дат речник који садржи називе неколико земаља и њихове површине. Испиши називе и површине свих земаља. Предлог решења
У овом решењу променљива zemlja редом узима вредности кључева у датом речнику, тј. назива земаља. Још један користан начин да се прође кроз елементе речника је да се употреби метода items() кроз чији се резултат може проћи на исти начин којим се пролази кроз све елементе листе парова.
6
Програмирај!
Уграђене функције min и max – примене у задацима Како си до сада имао прилике да се упознаш и научиш да користиш довољно појмова и Пајтон команди време је да се посветиш самосталном решавању задатака који захтевају мало више анализе и препознавања пута до њиховог решавања. За почетак одгледај следећи видео у којем ће ти бити представљени проблеми и дате назнаке за њихово решавање.
Python – Уграђене функције min и max – примене у задацима Прочитај сада пажљиво поставке задатака и покушај да напишеш програме уз помоћ којих се долази до њиховог решења. Задатак 1. Дата су два затворена интервала реалне праве [a1,b1] и [a2, b2]. Напиши програм којим се одређује: њихов најмањи интервал реалне праве која садржи дате интервале, пресек (највећи интервал реалне праве садржан у оба интервала) ако постоји и дужину њихове уније (дела праве који ти интервали покривају).
Најмањи интервал реалне праве који садржи дате интервале се у математици назива њиховим покривачем. Упутство за решавање Погледајмо на примеру распореда два интервала шта би тачно били покривач, унија и пресек интервала [a1,b1] и [a2, b2] (први интервал ћемо назвати плавим, а други црвеним).
Покривач би био интервал [a1,b2]. Ако мало погледаш уочићеш да је почетак траженог интервала минимум почетака плавог и црвеног интервала, тј. минимум између вредности a1 и a2. Слично, крај траженог интервала ће бити већи од крајева плавог и црвеног интервала, тј.
1
Програмирај! максимум између вредности b1 и b2. Дакле, твој програм треба да испише два броја, од којих је први једнак минимуму a1 и a2, а други максимуму b1 и b2. Што се пресека тиче, пресек представља заједнички део два интервала, тј. део праве који захватају и плави и црвени интервал, у нашем примеру. Примети да пресек не мора увек да постоји, нпр. Када би се плави интервал завршио пре почетка црвеног, тј. када би a2>b1. Вратимо се на пример на начој слици- У случају да су интервали распоређени као на слици коју видиш, пресек постоји. Чему је једнак? Очигледно, пресек је [a2,b1]. Овог пута, почетак траженог интервала ће бити једнак максимуму између вредности почетака плавог и црвеног интервала, док ће крај бити једнак минимуму вредности крајева црвеног и плавог интервала. Када будеш писао програм немој заборавити да у неком тренутку мораш утврдити да ли пресек постоји. Један од начина да утврдиш јесте да упоредиш вредности почетка и краја интервала које си рачунао онако како смо управо објаснили. Уколико добијеш да почетгак има већу ввредност од краја то значи да су интервали били без пресека. Покушај да нацрташ два интервала без пресека и провери да ли смо у праву. Када говоримо о дужини уније, оставићемо ти је да је сам одредиш. Води рачуна о томе да постоје два случаја. Наиме, ако интервали имају пресек дужина ће се осредити на један, а уколико немају на други начин. Размисли и пробај да решиш тај проблем. Задатак 2. На целобројној правој дат је интервал [a,b]. Напиши програм који одређује дужину дела тог интервала који припада позитивном делу праве.
Упутство за решавање Погледај пример једног интервала који обухвата и негативне и позитивне бројеве, тј. залази и у позитиван и у негативан део реалне праве.
2
Програмирај! Дакле, у овом случају дужина позитивног дела интервала ће бити дужина од О до b1. Чему је у ствари она једнака. Поред овог постоје још два случаја који ће се онда другачије решавати. Први је када је цео интервал у негативном делу. Колика је онда дужина позитивног дела? Други случај настаје када је цео интервал у позитивном делу реалне праве. Чему је тада једнака дужина позитивног дела интервала?
3
Програмирај!
Пресликавања Врло често се дешава да је у решавању различитих проблема потребно од једне колекције података добијеш другу. На пример, на основу листе површина учионица твоје школе добијеш процену капацитета сваке од учионица на основу правила које каже да је потребно оставити један квадратни метар за сваког ученика и 4 квадратна метра за таблу и катедру. Очекује се да за сваки елемент листе површина учионица одредиш процену и сместиш је у другу листу. Дакле, за сваки елемент прве листе се према задатом правилу одређује одговарајућа вредност, такозвана слика. Читав процес одређивања слике, тј. придруживања вредности слике полазној вредности, такозваном оригиналу, се у математици назива пресликавањем. На овом часу ћеш научити неколико начина на које у Пајтону можеш извести пресликавање једне листе у другу. За почетак одгледај следећи видео
Python – Пресликавања Пpочитај сада следећи задатак и покушај да изведеш задато пресликавање. Задатак 1. Дата је листа дужина страница. Формирај и испиши листу њихових површина. За почетак покушај да испишеш површине без формирања нове листе. Нека дужине страница буду 1, 2, ..., 9. То би могао да изведеш на следећи начин:
Поступак исписа се не би пуно разликовао ни када би листа величина страница била другачије задата, на пример навођењем вредности елемената.
1
Програмирај! Покушај сада да измениш свој код тако што ћеш посао који он треба да обави поделити на два мања и сваки појединачно описати сваки. Како поделити? У суштини проблем који се твојим кодом решава се може поделити на два потпроблема:
један јесте обрада колекције листе страница и испис добијених вредности, тј. површина за сваку страницу појединачно,
а други дефинисање начина на који ће се добити вредност у коју треба да буде пресликана задата вредност странице, тј. одређивање површине.
Што се првог потпроблема тиче његово решење ће бити готово идентично претходном коду, са том разликом што ћеш на месту на којем је потребно израчунавање површине за одређену страницу предвидети позив функције која израчунава површину квадрата на основу величине странице. Ту функцију би користио на начин на који си користио и уграђене функције, на пример апсолутну вредност. Нажалост, функција која одређује површину квадрата на основу дужине његове странице не спада у уграђене Пајтон функције, па ћеш морати сам да је напишеш. Део кода којим се решава први потпроблем би могао да изгледа овако:
Сада недостаје функција povrsina() којом се решава други потпроблем. Дефинисањем функције ћеш рећи Пајтон окружењу шта тачно треба да уради када наиђе на позив povrsina(a). Дефиниција функције обухвата:
њено име (у твом случају povrsina),
попис података које функција добија при позиву (у нашем случају један број који представља величину станице),
поступак којим се одређује вредност коју функција треба да израчуна (у нашем случају је то одређивање вредности израза a*a) и
позив специјалне команде return облика return vrednost којом се наглашава коју ће израчунату вредност (vrednost) функција да врати.
2
Програмирај! Дефиниција функције површина би могла да изгледа овако:
Обједињено у једном коду дефиниција саме функције и петља којом се исписују површине могу изгледати овако:
Обрати пажњу да је важно да прво дефинишеш функцију povrsina, па тек онда напишеш петљу у којој се функција користи. Уколико би редослед био обрнут Пајтон окружење у тренутку када буде извршавало петљу не би имало информацију о томе шта тачно треба да ради када добије позив функције povrsina. На погрешан редослед ћете упозорити само окружење обавештењем о грешци. Покушај сада да искористиш ово што си до сада урадио и да решиш задатак онако како је и тражено. Покушај да измениш код тако што ћеш направити нову листу од израчунатих површина, уместо да само да их испишеш. Један од начина за решавање овог задатка био би могао да буде овај:
Дакле, листа povrsine је дефинисана командом povrsine = [а*а for a in stranice]
3
Програмирај! којом се каже да ће за свако a из листе stranice бити израчуната вредност а*а која ће постати члан нове листе. Уколико напишеш и одговарајућу функцију твој коб могао да изледа и овако.
Погледај сада један сличан пример. Нека је дата функција def obim(a, b, c): return a + b + c и нека је дата листа торки које престављају величине страница троуглова, на пример: trouglovi = [(3, 4, 5), (5, 12, 13), (7, 24, 25)]
и нека је потребно исписати обим сваког од троугла из листе. Ако желиш да употребиш дату функцију за рачунање обима да би израчунао обиме троуглова описаних у листи потребно је да имаш у виду да није могуће да напишеш овако нешто for t in trouglovi: print(obim(t))
јер је t торка, док функција не очекује торку већ три броја, на пример исправан позив би био obim(5,6,7). Да би торку функција могла да прихвати, потребно је нагласити Пајтон окружењу да је мора да дати функцији у облику који функција може да прихвати, тј. у такозваном је развијеном облику, што се изводи следећим позивом print(obim(*t))
Покушај сада да дефинишеш листу која ће садржати обиме задатих троуглова.
Задатак 2. Напиши програм који би задати текст исписао тако што би сваку појаву самогласника заменио једним истим самогласником, на пример и. Упутство за решавање Овај задатак се решава на начин на који је решаван и претхони задатак. Наиме, текст се посматра као иста карактера. Сваки њен елемент треба пресликати посебном функцијом у одговарајућу слику. Функција ће одређивати слику тако што ће сваки сугласник сликати у исту вредност, а 4
Програмирај! самогласник у слово ‘i’. Дакле, твој задатак је да напише функцију која добија једно слово и одређује његову слику, и да је затим искористиш у пресликавању листе слова. Уклико се не сналазиш, помоћ потражи у интерактивном уџбенику.
5
Програмирај!
Филтрирање На овом часу ћемо се бавити решавањем проблема у којима је потребно да из неке задате листе извдвојимо елементе који задовољавају некакав услов. Такви захтеви су у реалном животу врло чести, па је неопходно да умеш успешно да направиш програмско решење за њихово испуњење. За почетак одгледај следећи видео
Python – Филтрирање Покушај сада да решиш следећи задатак. Задатак 1. Напиши програм који ће за дате висине у центиметрима Пере, Мике и Лазе исписати коментар да ли се свако од њих појединачно може спуштати низ велики тобоган, при чему је услов за спуштање низ велики тобоган висина која је најмање 140 центиментара. Ако унапред знамо висине три друга решење би могло да изгледа овако:
Уколико желиш да програм без преравки кода ради за било које задате висине три друга тада је потребно да за сваког од њих тројице, дакле у петљи чије ће се команде поновити три пута (Како ћеш то извести?), учиташ висину, а затим провериш испуњеност услова. У том случају код би могао да изгледа овако:
1
Програмирај!
У предложеном решењу, као што видиш, ако је услов испињен се не исписује име већ висина са коментаром да јесте за тобоган. Преправи код тако да поред висине буде тражено и име које ће бити исписано у коментару, уколико је услов испуњен.
Задатак 2. Напиши програм који за задату листу бројева исписује оне који су парни. Предлог решења
Често је потребно да филтриране податке, тј. елементе колекције који задовољавају услов, сместиш у нову листу. Прочитај следећи задатак. Задатак 3. Напиши програм који из списка забележених највећих дневних температура у јануару месецу у неком граду исписује само темепратуре које су биле испод нула степени. Подсети се како је вршено пресликавање елемената полазне листе у нову листу. На пример, нека нова листа треба да садржи дуплиране вредности елемената полазне листе. У том сличају њено дефинисање би могло да се изведе овако nova = [2*t for t in polazna] Да би при формирању нове листе само пробране елементе полазне листе искористио потребно је да након навођења имена полазне листе наведеш и услов који је потребно да испуни елемент полазне листе да би био преписан и пресликан у елемент нове листе. На пример, ако нова листа 2
Програмирај! садржи само дуплиране позитивне елементе полазне листе тада би њено дефинисање могло да изгледа овако nova = [2*t for t in polazna if t > 0]. Покушај сада да решиш задати задатак. Предлог решења
Задатак 4. Напиши програм који би задати текст исписао тако што би изоставио сваку појаву самогласника. Предлог решења
3
Програмирај!
Каладонт – завршни пројекат 1. део Твој последњи и највећи задатак за ову годину у оквиру теме програмирања у Пајтону јесте да напишеш програм који би омогућио играчу да игра игру Каладонт против рачунара. Каладонт је игра коју игра неограничен број играча, а најмање два, тако што се према унапред одређеном редоследу играчи изговарају по једну реч према одређеном правилу. Ко не може да пронађе реч која задовољава правило бива избачен из игре. Игра почиње тако што први играч изговра према сопстаеном избору једну реч. Као одговор на њу играч који је следећи по реу мора да пронађе реч чија су прва два слова уствари последња два слова речи коју је изговорио претходни играч. Игра би требало да тече овако: 1. Када играч покрене игрицу први на потезу је рачунар. Рачунар бира једну реч која се исписује на екрану. 2. Играч даје своју реч као одговор. 3. Реч играча се проверава по два основа: a. да ли је важећа, тј. да ли постоји у речнику којим рачунар/твој програм располаже, b. да ли се уклапа по датом правилу са оном коју је рачунар дао. 4. Уколико реч не постоји или се не уклапа са задатом тада се рачунар проглашава победником, а сама игра се завршава. 5. Уколико реч постоји и уклапа се задатом наставља се са игром, па је рачунар на потезу. У свом речнику он тражи реч која се уклапа. 6. Уколико рачунар не нађе у свом речнику одговарајући реч, тада се играч проглашава победником а игра завршава. 7. Уколико рачунар пронађе одговарајућу реч понавља се цео поступак (од корака 2.). За почетак одгледај следећи видео
Python – Игра каладонт
1
Програмирај! Програм можеш осмислити и сам. Размисли које све проблеме мораш решити програмски. Можеш ли цео посао поделити на мање послове, а затим их увезати у једну целину? Ако желиш, можеш да пратиш и наш предлог поступка за решавање овог задатка. Због обима, израду програма ћемо поделити у две фазе: I фаза – припрема речника, писање помоћних функција за решавање појединих потпроблема и њихово тестирање. II фаза – писање главног дела програма које подразумева контролу тока игре и уклапање помоћних делова у једну целину. На овом часу имаш задатак да испуниш прву фазу израде пројекта. Ево њеног описа.
I фаза У овој фази ћемо изоставити контролу тока целе игре. Занимају само појединачни задатаци и то: 1. Дефинисање речника. 2. Дефинсање функције за проверу уклапања две дате речи. 3. Дефинисање функције која дату реч тражи у речнику. 4. Дефинисање функције која за ће служити рачунару да за задату реч у речнику пронађе ону која се са датом уклапа. Сваку од функција треба проверити, тј. тестирати њихову исправност.
2
Програмирај!
Каладонт – завршни пројекат 2. део На прошлом часу си отпочео пројекат чији је циљ израда игре Каладонт. Подсетимо се шта према плану I фазе израде пројекта до сада урађено. 1. Дефинисање речника. 2. Дефинсање функције за проверу уклапања две дате речи. 3. Дефинисање функције која дату реч тражи у речнику. 4. Дефинисање функције која за ће служити рачунару да за задату реч у речнику пронађе ону која се са датом уклапа. Да би ти било лакше да наставиш, подсети се савета из видеа
Python – Игра каладонт На овом часу прелазимо на другу фазу.
II фаза У овој фази пишеш главни део програма у којем организујеш контролу тока целе игре, што подразумева следеће: 1. Позивом функције random се случајним избором добија индекс елемента из листе речи која представља речник. Реч са добијеним индексом ће бити реч којом рачунар започиње игру. 2. Од играча се тражи да унесе своју реч. 3. Позивају се функције за проверу постојања речи коју је играч дао и функције за проверу уклапања дате речи са речју коју је задао рачунар. 4. Уколико реч не постоји или се не уклапа исписује се порука о томе је да је рачунар победио и завршава се са игром. 5. Уколико реч постоји и уклапа се, позива се функција која у речнику тражи реч која се уклапа са речју коју је играч задао. 6. Уколико реч не постоји, играч се проглашава победником и програм завршава са радом. 7. Уколико реч постоји исписује се, па се затим цео поступак понавља од корака 2.
1
Програмирај! Темељно тестирај своју игру. Потруди се да речник учиниш што богатијим. Верујемо да ћеш добити пуно идеја како да унапредиш своју игру и учиниш је богатијом и забавнојом. Само напред! Уколико ти је потребна помоћ или су ти потребне идеје како поједине проблеме да решиш потражи их у интерактивном уџбенику и на странама Петље.
2