2. nädala õpijuhis
Eesmärk
[edit]Selle nädala õppimise eesmärgiks on:
- Tundma õppida Pythoni käske andmete sisestamiseks ja tulemuste väljatrükkimiseks.
- Saada teada, kuidas saab panna arvutit arvutama ja arvutamise tulemusi meelde jätma.
- Teada saada, kuidas kavandatud algoritmist saab programm, kuidas viimane valmis kirjutada ja käivitada.
- Kogeda mõningaid esmaseid veateateid, mis tihtipeale ette tulevad ja õppida nende teadetega midagi kasulikku tegema - nende alusel oma programmist vigu otsima ja kõrvaldama.
Lugemiseks ja proovimiseks
[edit]Loe läbi kursuse avalehel viidatud materjalid ja proovi kindlasti läbi tekstis toodud näited:
- Üldist Pythonist - veidi tausta ja ajalugu tasub alati tunda
- Kompileerimine ja interpreteerimine - mõtle enda jaoks läbi, mille jaoks neid tegevusi üldse vaja on. Mis on nimetatud kahe mõiste erinevus. Millised olulised toimingud mõlema protsessi vältel läbi viiakse. Leia lisaks näiteid programmeerimiskeelte hulgast, mis on kompileeritavad ja mis on interpreteeritavad.
- Töökeskkonna IDLE kasutamine - proovi järgi tekstis kirjeldatud näited.
- Sisend ja väljund - loe tekst läbi, kopeeri näited eraldi programmideks, salvesta need ning proovi läbi nende käitumine.
- Lihtandmetüübid ja muutujad annavad aluse arvutamisel toimuva mõistmiseks ning kõige keerulisemate tehete esitamiseks.
Ülesanded
[edit]Ülesanne 1
[edit]Töökeskonna proovimiseks kopeeri sinna järgmine näide:
# -*- coding: ISO-8859-4 -*- # Programm leiab kolmnurga pindala, kui on teada alus ja kõrgus # Sisend: a - alus # h - kõrgus # Väljund: S - pindala print("Programm aitab Sul leida kolmnurga pindala.") a = float(input("Sisesta kolmnurga alus ")) # Sisend teisendatakse ujukomaarvuks h = float(input("Sisesta kolmnurga kõrgus ")) S = a * h / 2 # Arvutatakse tulemus print("Kolmnurga pindala on ", S) # Trükitakse ekraanile vastus
- NB! Enne koodi kopeerimist ava töökeskkonnas redigeerimisaken:
File - New Window
. - Salvesta programm ja ära unusta laiendit - näiteks võid nimeks panna
kolmnurk.py
. Laiendi lisamine tagab koodi värvimise, mis mugavdab lugemist. - Käivita programm:
Run - Run Module (F5)
. Programm töötab IDLE käsurežiimi aknas. - Sisesta kolmnurga mõõtmed vastuseks programmi küsimustele (NB! Pane tähele, et ekraanile kuvatakse sama tekst, mis on
input()
-funktsiooni järel sulgudes) - Vaata tulemust ja veendu, et see on õige.
- Loe programm kuni detailideni läbi ja proovi kõigi lausete tähendusest aru saada.
Ülesanne 2
[edit]Tee eelmises ülesandes vaadeldud programmi sihilikult järgmised vead.
Kustuta esimese intput()
-funktsiooni juures ära üks sulgev sulg:
a = float(input("Sisesta kolmnurga alus ")
Käivita programm ja vaata interpretaatori reaktsiooni: avaneb dialoogiaken teatega "Syntax error" ning järgmise rea esimene sümbol värvitakse punaseks. Pane tähele, et vigast kohta pead otsima märgistusest eespoolt.
Pane sulg tagasi ja kustuta samas lauses stringi lõpust jutumärk.
a = float(input("Sisesta kolmnurga alus ))
Nüüd kuvatava dialoogiakna tekst on "EOL while scanning string literal". Veateade vihjab sellele, et string ei taha kuidagi lõppeda.
Kustuta samas lauses ära sõna float
. Nüüd puudub funktsiooni väljakutse, mis kolmnurga aluse stringist arvuks teisndaks:
a = (input("Sisesta kolmnurga alus "))
Seekord kuvatakse viga alles peale aluse ja kõrguse küsimist, st süntaksiviga (ingl syntax error) ei olnud, kuid tekkis täitmisaegne viga (ingl runtime error).
Traceback (most recent call last): File "D:/inga/primus/best_kursuse_materjalid/n2ited/kolmnurk.py", line 10, in <module> S = a * h / 2 # Arvutatakse tulemus TypeError: can't multiply sequence by non-int of type 'float' >>>
Selles veateates tuleks kõigepealt pöörata tähelepanu vea tekke kohale (NB! see ei tähenda, et just omistuslauses midagi parandada oleksk vaja). Ja edasi lugeda viimast rida koos vea kirjeldusega: TypeError
- rehkendust proovitakse teha sobimatute andmetüüpidega. Ehk stringi ja float-i (ujukomaarvu) korrutamine ei ole parim mõte.
Käivitades töötava programmi, kuid sisestades mingid sümbolid, mis ei ole arvude moodi, satub float()
-funktsioon teisendamisel hätta ja sellest tulenev veateade on järgmine:
Traceback (most recent call last): File "D:/inga/primus/best_kursuse_materjalid/n2ited/kolmnurk.py", line 9, in <module> h = float(input("Sisesta kolmnurga kõrgus ")) ValueError: could not convert string to float:
Järgmiseks muuda pindala leidmise valemis a suureks. Selgituseks - Python on tõstutundlik keel ja a ei ole sama mis A. Peale andmete sisestamist ilmub ekraanile teade:
Traceback (most recent call last): File "D:/inga/primus/best_kursuse_materjalid/n2ited/kolmnurk.py", line 10, in <module> S = A * h / 2 # Arvutata NameError: name 'A' is not defined >>>
Teade tähendab seda, et muutujanime A ei ole olemas. Sarnane teade tekib ka juhul, kui muutuja nimi lihtsalt kogemata veidi valesti kirjutada või püüda kasutada muutujat enne kui ta tekitatud on (omistamislause läbi).
Ülesanne 3
[edit]Aritmeetika avaldistest - siin ei tohiks olla üllatusi, kuid järgi võiks proovida tehted //
ja %
, mida vastavalt täisarvuliseks jagamiseks (floor division) ja jäägi leidmiseks kasutatakse.
Proovi nüüd läbi nende toime Pythoni käsureal:
>>> 7//3 2 >>> 7 % 2 1
Ja saa aru, mida need tehted tähendavad.
Ülesanne 4
[edit]Kirjuta programmiks eelmisel nädalal käsitletud probleemi lahendus pindala ja ümbermõõdu leidmisest. Algoritm üleskirjutatuna oli järgmine:
Sisesta kaatetid a ja b Leia pindala S = a * b /2 Leia hüpotenuus c = ruutjuur(a2 + b2) Leia ümbermõõt P = a + b + c Trüki pindala S ja ümbermõõt P.
Vaata eelnevalt käsitletud kolmnurga näidet. Sisesta programmi kood töökeskkonda ja tee läbi eespool kirjeldatud sammud. Ruutjuure asemel tuleks kasutada funktsiooni sqrt()
.
Siiski ei taha interpretaator sqrt-d
ära tunda ning teatab veast NameError
. Probleemi lahendamiseks tuleb programmi algusesse lisada käsk:
from math import sqrt
Selle abil võetakse kasutusse üks funktsioon matemaatikafunktsioonide moodulist.
Ülesanne 5
[edit]Lahenda iseseisvalt järgmised ülesanded:
- Remont
Kodus on vaja teha remonti. Värvimist vajab ristkülikukujulise toa põrand. Vaja on leida, kui palju värvi kulub. Teada on toa mõõtmed (pikkus ja laius meetrites) ja värvikulu ruutmeetri kohta. Koosta ülesande lahendamiseks algoritm ja seejärel programm.
- Sisseastumine
Gümnaasiumi lõpetanud soovivad astuda TLÜsse informaatika erialale. Sissesaamisel kehtib lävend, mille ületanud on vastuvõetud. Lävend arvutatakse emakeele ja matemaatika RE tulemuse ning vastuvõtueksami punktide põhjal. Kumbki riigieksam annab vastuvõtupalli 25% ning vastuvõtueksam 50%. Kui palju peaks üliõpilaskandidaat saama sisseastumiseksamil punkte (maks on 100), et vastuvõtulävend ületatud saaks?
Algandmetena on teada emakeele ja matemaatika riigieksamite tulemused ning lävendi suurus.
Veel ülesandeid
[edit]Järgnevalt on toodud veel mõned ülesanded, mille lahendamisega harjutada sisendi, väljundi ja aritmeetikaavaldiste koostamist.
Ülesanne 1 Bussireis
[edit]Lähteandmeteks on bussi väljumisaeg ja saabumisaeg tundides ja minutites. Sisestame tunnid ja minutid kohe eraldi muutujatesse, et vältida täiendavaid muresid andmete teisendamistega. Eeldame, et kõik mahub ühe ööpäeva sisse. Leia bussi teeloleku aeg.
Lahenduskäigu osas olgu vihjeks, et anna esialgu tulemus minutites. Edasi teisenda minutid tundideks ja minutiteks.
Ülesanne 2 Inimene
[edit]Uurime inimest. On valemid, mille abil saab leida inimese ideaalkaalu, rasvasuse protsendi, tiheduse, ruumala ja pindala. Osa valemeid on meeste ja naiste kohta erinevad. Igaüks otsustab ise, millised valemid ta oma programmi valib.
Uuri kõigepealt valemeid ja mõtle järgi, millised on kasutaja sisestavad algandmed, mida oma tööks vajad.
Eraldi pööra tähelepanu pindala valemile. See sisaldab kümnendlogaritmi leidmist, mille jaoks on funktsioon (nagu ka ruutjuure leidmiseks). Abistav link info leidmiseks on http://docs.python.org/py3k/library/math.html
Kontrollimiseks testandmed:
kaal: 75 pikkus: 178 vanus: 22 ------------------- ideaalkaal mehele: 71.5 naisele: 64,35 rasvasuse % mehele: 19.7 naisele: 36.20 tihedus mehele: 1058.70 naisele: 1023.98 ruumala mehele: 0.071 naisele: 0.073 pindal mehele: 1,93 naisele: 1.93 -------------------
Ülesanne 3 Rahatagastaja
[edit]Oled poes ja ostad kaupa n krooni eest. Vastavalt Sinu poolt makstud summale tuleb raha tagasi anda. Milliseid rahatähti ja kui palju tuleks tagastada? Eeldame, et arveldatakse ainult kroonides.
Programm küsib, kui palju maksab kaup ja kui palju ostja raha annab. Eeldame, et on ideaalne olukord - kassas on piisavalt kõiki rahatähti.
Väljatrükk võiks olla näiteks
Sa maksid 500 krooni, kaup maksis 133 krooni. Saad tagasi 367 krooni: 0 viiesajalist 3 sajalist 1 viiekümnelist 0 kahekümneviielist 1 kümnelist 1 viielist 1 kahelist 0 ühelist
Programm ei pea kontrollima, kas maksti õige summa raha ja võib väljastada ka (nagu näites näha) koguse 0 tükki. Kui juba on teadmisi valiku kasutamiseks, saab eelmainitud probleeme vältida.