1 Sissejuhatus
THONNY JA PYTHONI PAIGALDAMINE ARVUTISSE
Selleks, et programmeerimiskeeles Python programmeerima hakata, on vaja Python oma arvutisse saada. Pythoni saab paigaldada eraldi, aga meie kasutame oma kursusel keskkonda Thonny, millega Python juba kaasas on. Tegelikult on olemas ka veebipõhiseid võimalusi Pythonis programmeerimiseks ja mitmeid teisi keskkondi peale Thonny. Materjalides siiski eeldame, et kasutatakse Thonnyt, sest see võimaldab meil teemasid teatud Thonny abivahenditega illustreerida. Näiteks kasutame Thonny võimalusi muutujate väärtuste näitamiseks ja programmi sammhaaval läbimiseks.
Niisiis palun paigaldage enda arvutisse Thonny. Juhise selleks leiate siit. Palume uue versiooni paigaldada ka neil, kel vana versioon on varasemast juba arvutis olemas. Põhimõtteliselt saab kursuse praktiliselt kõiki ülesandeid lahendada ka nt keskkonna IDLE või mõne teise keskkonna abil, aga materjalid on koostatud Thonnyt silmas pidades.
Üks põhjus, miks Python on esimese keelena suhteliselt sobiv, on see, et päris esimese programmi kirjutamine on lihtne. Nii saame teha näiteks üherealise programmi
print("Tere!")
See programm toob ekraanile sõna "Tere!".
Tavaliselt muidugi on programmis rohkem ridu. Täiendame meiegi oma programmi.
print("Tere!") print("Head aega!")
Püüdke nende juhiste abil eespool olnud lühike Tere-programm käivitada. Tegemist on selle kursuse jaoks väga olulise etapiga. Kui saate esimese programmi tööle, siis on suur võimalus, et saate järgmisedki! Esialgu võivad need sammud võõrad tunduda, aga lähinädalatel hakkate programme koostama, käivitama, parandama ja jälle käivitama kümneid ja sadu kordi.
Pythoni (nagu mistahes teisegi keele) programm on ühelt poolt täiesti tavaline tekstifail, mida võime kirjutada tavalise tekstiredaktoriga (näiteks Notepadi või Wordiga). Siiski on seda mugavam teha spetsiaalse redaktoriga, näiteks Thonnyga. Tavaliselt on Pythoni programmide failidel laiendiks py, Thonny lisab selle salvestamisel ise.
Lühema programmiga saime hakkama, püüame natuke pikemaga ka. Selle võite ise sisse kirjutada või siit kopeerida. Proovige programm käima saada!
arv = 1 if arv > 0: print("positiivne") else: print("mittepositiivne")
Pythonis on programmi struktuuri korraldamisel äärmiselt oluline õige taandamine ehk tühikutega mingi rea paremale poole lükkamine. (Teistes keeltes võivad selles rollis olla näiteks looksulud { } ). Proovige näiteks taanet niimoodi muuta:
arv = 1 if arv > 0: print("positiivne") else: print("mittepositiivne")
Kui mitte varem, siis nüüd juhtus selline asi, et me tahtsime käivitada vigast programmi. Seda juhtub programmeerimisel alatihti ja seda ei tohi sugugi karta. Proovige programmi parandada ja uuesti käivitada.
Koostada programm, mis väljastaks ekraanile teksti Tere, maailm! täpselt sellisel kujul - koma ja hüüumärgiga.
Näide programmi tööst:
>>> %Run lahendus.py
Tere, maailm!
Lahendused tuleb esitada Lahenduses, kus need kontrollitakse automaatselt. Automaatkontroll on nii korraldatud, et tõesti pole vähimadki kõrvalekalded tekstis lubatud. Nii võib teil programm täiesti töötada Thonnys ilma igasuguste veateadeteta, aga kui väljastatakse näiteks tere, maailm, siis automaatkontroll seda õigeks ei loe.
Eks seda tuleb ette ka edaspidi, et programm teeb põhimõtteliselt nõutud asja, aga väljastab midagi rohkem või vähem või kuidagi teisiti ning ei vasta täpselt ülesandele. (Näiteks on lahendus hoopis vingem kui ülesandes nõutud.) Sellisel juhul võib automaatkontroll teie lahenduse valeks lugeda.
Üleval oli meil programm
arv = 1 if arv > 0: print("positiivne") else: print("mittepositiivne")
Selles on näha mitut tüüpi andmeid. Paistavad arvud 1
ja 0
ning tekstilised suurused "positiivne"
ja "mittepositiivne"
. Pythonis (nagu ka teistes programmeerimiskeeltes) ongi võimalik kasutada erinevaid andmetüüpe. Meie jaoks on esialgu olulised järgmised Pythoni andmetüübid:
- Täisarvud (näiteks
10
,-4
,0
); - Ujukomaarvud (näiteks
2.5
,3.14
,-7.23
,2.0
); - Sõne / tekst (näiteks
"kass"
(või'kass'
),"koer ja hobune"
(või'koer ja hobune'
)); - Tõeväärtused (
True
võiFalse
).
Täisarvude kasutamine Pythonis on ehk kõige sarnasem (kooli)matemaatikale.
Oma tüüp on koma sisaldavatele arvudele, selliseid arve nimetatakse ujukomaarvudeks. Koma rollis kasutatakse Pythonis punkti (näiteks 3,2 kirjutatakse Pythonis 3.2). Tekstide jaoks on sõnetüüp, mille tunnuseks on jutumärgid või ülakomad. Sõne ingliskeelne vaste on string (lühendatult ka str). Tõeväärtuste tüübis on vaid kaks võimalikku väärtust - True
(tõene) ja False
(väär).
Konkreetse väärtuse tüübi saab teada käsku type()
kasutades. Täisarvu tüüpi märgitakse Pythonis int
, ujukomaarvu tüüpi float
, sõne tüüpi str
ja tõeväärtuse tüüpi bool
.
Proovige näiteks:
print(type(4)) print(type(4.5)) print(type("Maria")) print(type(True))
Ülesanne
Ülesanne
Tüüpidega samanimeliste funktsioonide abil saame leida konkreetse väärtuse teist tüüpi vaste. Vahest on siin tulemus selgesti ettearvatav, vahel aga võib see suhteliselt ootamatu tunduda. Nii on näiteks int("1")
väärtuseks täisarv 1
, sest sõnele "1"
on just täisarvudest 1
loomulik vaste. Samuti vastupidi - str(1)
väärtuseks on sõne "1"
. Kontrollige ka, mida Python ise nende andmete tüüpidest arvab:
print(type(str(1))) print(type(int("1")))
Mõnedel juhtudel pole tüübiteisenduse funktsiooni väärtuse ennustamine nii lihtne. Proovige näiteks järgmisi näiteid.
print(bool(7)) print(bool(0)) print(float(True)) print(int(1.7))
Vaatame viimast rida, mis andis int(1.7)
väärtuseks 1
. Nagu näeme ei ole tegemist ümardamisega, kuna ümardamisreeglite järgi peaks väärtus olema 2
. Ümardamiseks on Pythonis eraldi funktsioon round
. Näiteks round(1.7)
on tõesti 2
.
Tuleme teiste näidete juurde tagasi hiljem, kui vastavaid tüüpe põhjalikumalt käsitleme.
Erinevat andmetüüpi väärtusi on vaja erinevates olukordades, nendega arvutused toimuvad erinevalt. Erinevate tüüpidega saab teha erinevaid tehteid. Ka näiliselt sama tehtemärgiga võivad erinevad tüübid erinevalt käituda. Oluline on ka see, et erinevat tüüpi väärtusi kujutatakse arvuti mälus erinevalt - ka ruumi võtavad nad mälus erinevalt.
Kui need andmed juba mälus on, siis on loomulik tahtmine neid ka kasutada. Konkreetsele mälupiirkonnale, kus teatud väärtus on, saab anda eraldi nime. Sellist nimega mälupiirkonda kutsutakse muutujaks. Muutujal on nimi ja muutujale väärtuse andmine käib Pythonis võrdusmärgi abil.
Tinglikult võiks muutujaid võrrelda maitseainete topsidega. Selleks, et maitseaineid lihtsamini üles leida, on mõistlik topsid vastavalt sildistada. Sildi järgi leitakse vastav maitseaine paremini üles.
Enne oli juttu, et erinevat tüüpi väärtusi kujutatakse mälus erinevalt. Laias laastus on seegi võrreldav maitseainetopsidega - need võivad näiteks olla erineva suurusega.
Muutuja on kasulik siis, kui talle anda mingi väärtus - määratakse andmed, mida muutujale vastavas mälupiirkonnas hoitakse. Umbes nii, et topsis, mille peale on kirjutatud kaneel, on hoiul kaneel.
Pythonis muutuja nime valimisel on omad reeglid ja tavad nagu ka näiteks tavaelus lapsele nime panemisel. (Reeglid ise on küll lapsele nimepanemise omadest mõnevõrra erinevad.) Pythonis muutujale nime panemisel tuleb silmas pidada, et nimi ei tohi sisaldada tühikuid. Tühiku asemel kasutatakse vajadusel alakriipsu (nt vanima_lapse_vanus
) või jäetakse vahe üldse ära (nt vanimaLapseVanus
). Lisaks on tavaks, et muutuja nimi on kirjutatud väikeste tähtedega (va sõnade algustähed alates teisest). Nimi ei tohi alata numbriga, aga alates teisest sümbolist võib numbreid olla küll. Nimedena ei saa kasutada mõningaid Pythonis eritähendusega sõnu, näiteks and
, def
, elif
, else
, for
, from
, if
, import
, in
, not
, or
, pass
, return
, while
ja tõeväärtusi True
ja False
.
Erinevalt mitmetest teistest programmeerimiskeeltest (nt Java) ei määrata Pythonis programmeerija poolt ilmutatult, mis tüüpi väärtused antud muutujale sobivad ehk mis tüüpi muutuja on. Python saab ise aru, et kui väärtuseks on 12
, siis on tegemist täisarvuga, kui 12.1
, siis ujukomaarvuga, kui "Kaua Sa kannatad kurbade naeru"
, siis sõnega.
Soovi korral saab lugeda erinevate nimevaliku soovituste kohta ingliskeelsest Wikipedia artiklist.
Vaatame nüüd näidet, kus väärtustame erinevaid muutujaid. Anname muutujale poisi_vanus
väärtuseks 12
. Selleks käivitame Thonny ning trükime uude programmiaknasse (File -> New) esimesele reale:
poisi_vanus = 12
Toome mängu vanaema, andes teisel real muutujale vanaema_vanus
väärtuseks 59
:
vanaema_vanus = 59
Talletatud infot saame kasutada samade muutujate abil. Võime näiteks leida poisi ja vanaema vanuste summa, trükkides programmi kolmandale reale:
vanuste_summa = poisi_vanus + vanaema_vanus
Ekraanile väljastamiseks tuleks lisada käsk print
.
print(vanuste_summa)
Kokku saime järgneva programmikoodi:
poisi_vanus = 12 vanaema_vanus = 59 vanuste_summa = poisi_vanus + vanaema_vanus print(vanuste_summa)
Programmi käivitades (Run -> Run current script) peaks tulemus olema selline:
Nuputa! Kuidas leida poisi ja vanaema keskmine vanus?
Muutujatega tegutsemisel tuleb meeles pidada, et muutuja peab enne selle kasutamist olema väärtustatud. Proovige käivitada juba varasemalt vaadeldud näidet sellisena:
poisi_vanus = 12 vanuste_summa = poisi_vanus + vanaema_vanus vanaema_vanus = 59 print(vanuste_summa)
Millise teate väljastas Python? Miks selline veateade ilmnes ja kuidas viga parandada saab?
ARVULISTE VÄÄRTUSTE OMISTAMINE MUUTUJALE
Muutujale arvulise väärtuse omistamist juba vaatasime. Käib see siis näiteks nii:
lemmik_arv = 7 print(lemmik_arv)
Lisaks sellele on võimalik arvudega sooritada erinevaid tehteid. Vaadake tähelepanelikult, sest mõned märgid tähendavad teisi asju kui me harjunud oleme:
+
liitmine-
lahutamine/
jagamine*
korrutamine**
astendamine%
jäägi leidmine//
täisosa leidmine
Lisaks tehtemärkidele on olulisel kohal erinevad funktsioonid, nii saame näiteks funktsiooniga max
leida mitmest suurusest suurima. Näiteks max(23, 56)
väärtus on 56
.
Võimalusi on veel hulga rohkem, võite nendega tutvuda Pythoni dokumentatsioonis.
Ülesanne
Järgmine näide on ujukomaarvude omistamisest kahele muutujale, nende summa arvutamisest ja ekraanile väljastamiseks:
esimene_arv = 3.2 teine_arv = 10.15 arvude_summa = esimene_arv + teine_arv print(arvude_summa)
Muutuja väärtust saab programmis ka muuta. Proovige järgi, mis tulemus tuleb sellisel juhul:
esimene_arv = 3.2 teine_arv = 10.15 esimene_arv = 5 arvude_summa = esimene_arv + teine_arv print(arvude_summa)
Ülesanne
TEKSTILISE VÄÄRTUSE ANDMINE MUUTUJALE. SÕNE
Eelmistes näidetes andsime muutujale väärtuseks arvu (täisarvu või ujukomaarvu).
Nüüd vaatame, kuidas muutujale anda väärtuseks tekst sõnena. Tekstiline väärtus omistatakse muutujale jutumärkide (või ülakomade) vahel. Mitu teksti saame kokku panna, kasutades +
märke.
Proovige näiteks, kuidas töötab järgnev programm:
nimi1 = "Mihkel" nimi2 = "Mari" tervitus = "Tere, " + nimi1 + " ja " + nimi2 + "!" print(tervitus)
See on üks nendest näidetest, kus üks ja sama tehtemärk tähendab erinevate andmetüüpide puhul erinevaid asju:
- Arvude puhul tähendab
+
märk kahe arvu liitmist (5 + 3
annab tulemuseks8
). - Sõnede puhul tähendab
+
märk kahe sõne ühendamist üheks sõneks ("tere" + "tore"
annab tulemuseks"teretore"
.) Sel tehtel on ka peenem nimi - konkatenatsioon.
Nagu eelmisest programminäitest näha, siis sõned kirjutatakse jutumärkidega, muutujanimed aga ilma.
NB! Sellisel viisil saab omavahel ühendada ainult sõnesid. Arvu lisamiseks antud lausesse peaks kasutama funktsiooni str()
, et arv esmalt sõneks teisendada. Näiteks kui muutuja arv
sisaldaks väärtust 5
, siis str(arv)
annaks väärtuse "5"
(sõnena), mida saaks juba teiste sõnedega liita.
Ülesanne
TÕEVÄÄRTUSE OMISTAMINE MUUTUJALE
Kui arvud ja sõned on tuttavamana tunduvad andmetüübid (oleme ju arvude ja tekstiga ikka tegutsenud), siis tõeväärtused on võib-olla mõnevõrra võõramad.
Nimelt saab muutujale väärtuseks anda ka väärtusi True
(tõene) või False
(väär):
liigaasta = False print(liigaasta)
Tõeväärtuste tüüpi nimetatakse algebralise loogika looja George Boole'i järgi inglise keeles boolean tüübiks. Kohata võib ka sõna boolean lühendatud varianti bool. Põhjalikumalt vaatame tõeväärtuste rakendusi tingimuslausete peatüki juures.
Koostada programm, mille
- 1. real luuakse muutuja nimega
aasta
ning antakse sellele väärtuseks 2022 (arvuna); - 2. real luuakse muutuja nimega
loom
ning antakse sellele väärtuseks "pruunkaru" (sõnena); - 3. real luuakse muutuja nimega
lause_keskosa
ning antakse sellele väärtuseks ". aasta loom on " (sõnena); - 4. real luuakse muutuja nimega
lause
, mille väärtuse saamiseks ühendatakse üheks sõnaks muutujadaasta
,lause_keskosa
jaloom
(vajadusel tuleb kasutada funktsiooni, mis teisendab arvu sõneks); - 5. real väljastatakse muutuja
lause
väärtus ekraanile.
Kuigi tegelikult pannakse lause lõppu punkt, siis siin ärge pange. (Automaatkontroll isegi annab punkti või mõne muu üleliigse osa eest veateate.)
Näide programmi tööst:
>>> %Run lahendus.py
2022. aasta loom on pruunkaru
Pruunkaru kohta võib lugeda siin.
Varasemad näited olid meil sellised, kus andmed kirjutati programmiteksti sisse. Sageli on aga vaja andmed programmi töö vältel juurde saada. Failides (sh internetis) olevatele andmetele juurdepääsust räägime mõne nädala pärast. Praegu aga arutame seda, kuidas programm saaks kasutajalt andmeid küsida ja siis neid ka kasutada. Kui vaatame programmi poolt, siis on kasutajalt saadavad andmed sisendiks. Vastava funktsiooni nimi input
just tõlkes sisendit tähendabki.
Alustame programmist, mis küsib kasutajalt nime ja siis tervitab teda nimepidi. Nagu ikka, saab siingi programmi mitmel viisil koostada. Alustame sellest variandist, kus kõigepealt väljastatakse ekraanile küsimus, siis väärtustatakse muutuja kasutajalt saadud vastusega ning lõpuks väljastatakse tervitus.
print("Palun sisestage nimi") nimi = input() print("Tere, " + nimi + "!")
Programmi Thonnys käivitades ilmub küsimus Thonny allosas asuvasse Shell-paneelile ja sinna tuleb ka vastus kirjutada. Klaviatuuri reavahetusklahviga (Enter) sisestus aktsepteeritakse. Proovige programm käivitada!
Programmis saab küsimuse teksti esitada ka koos funktsiooniga input
:
nimi = input("Palun sisestage nimi") print("Tere, " + nimi + "!")
See programm ei tööta siiski täpselt samamoodi kui eelmine. Nüüd oodatakse kasutaja vastust küsimusega samal real. Selleks, et küsimus ja vastus eralduksid, lisame küsimuse teksti taha kooloni ja tühiku:
nimi = input("Palun sisestage nimi: ") print("Tere, " + nimi + "!")
Juba varasemast teame, et Pythonis on erinevat tüüpi andmeid. Selgitame, mis tüüpi väärtuse saame funktsiooni input
abil:
nimi = input("Palun sisestage nimi: ") print(type(nimi))
Näeme, et tegemist on sõnega (str
). Tänu sellele saime ka programmis selle plussmärgi abil sujuvalt teiste sõnedega (nt "Tere, " ja "!") ühendada. Paljudel juhtudel aga on meil vaja kasutajalt küsida näiteks hoopis arve.
Küsime siis näiteks hoopis vanust. Muutujale paneme nimeks vanus
.
vanus = input("Palun sisestage oma vanus: ") print(type(vanus))
Proovige programmiküsimusele mingi arvuga vastata.
Näeme endiselt, et tegemist on sõnega. Sellest, et muutuja nime vahetasime, ei muutunud tegelikult programm üldse. Muutujate nimede sisulisus on tähtis programmeerijale, Python tegelikult nime konkreetsest tähendusest aru ei saa.
Senikaua kui meil pole vaja teha n-ö arvulisi tehteid, kõlbavad sõne kujul arvud ka.
vanus = input("Palun sisestage oma vanus: ") print("Teie vanus on " + vanus)
Näiteks, kui sisestate vastuseks 31, siis oleks see sama, kui programmis oleks rida vanus = "31"
.
Tegelikult on meil ju olemas vahendid mingi väärtuse teises andmetüübis kujutamiseks. Näiteks str
sõnena kujutamiseks, int
täisarvuna kujutamiseks, float
ujukomaarvuna kujutamiseks. Kui tahame sisestatut täisarvuna käsitleda, siis võime kirjutada vanus = int(input("Palun sisestage oma vanus: "))
. Sellisel juhul on vanus juba täisarv ja sellega saame teha vastavaid tehteid.
vanus = int(input("Palun sisestage oma vanus: ")) vanus_viie_aasta_pärast = vanus + 5 print("Teie vanus 5 aasta pärast on " + str(vanus_viie_aasta_pärast))
Selles näites kasutatakse kaht tüübiteisendust: vanus
peab olema täisarv, et saaks teha arvutusi ja väljatrükkimiseks jälle on vaja hoopis sõnet.
Kui selle programmi puhul sisestada midagi, mida int
ei saa täisarvuks teisendada, siis tekib veateade.
Selle kursuse materjalides eeldame reeglina, et kasutaja sisestab seda tüüpi asju, mida küsitakse. Päriselt muidugi nähakse väga suurt vaeva, et kasutaja (kas siis kogemata või meelega) ei saaks sisestada midagi sellist, mis pole oodatud ja võib-olla programmi hoopis katki teeb.
Järgmises programmis küsitakse kasutajalt täisarvud ja need liidetakse kokku.
esimene_arv = int(input("Sisesta esimene liidetav täisarv: ")) teine_arv = int(input("Sisesta teine liidetav täisarv: ")) arvude_summa = esimene_arv + teine_arv print(arvude_summa)
Siin me väljastamisel sõneks teisendamist ei kasutanud, sest print
tuleb arvude väljastamisega toime küll. Varasemates näidetes oli str
vajalik just sõnede ühendamiseks.
Siin programmis küsitakse kahte arvu. See, millises järjekorras neid sisestatakse, pole siin oluline. Kui kaks esimest rida ära vahetada, siis tulemus on ikka sama.
teine_arv = int(input("Sisesta teine liidetav täisarv: ")) esimene_arv = int(input("Sisesta esimene liidetav täisarv: ")) arvude_summa = esimene_arv + teine_arv print(arvude_summa)
Küll aga võib sisestuse järjekord olla oluline mitmete teiste programmide korral. Meie kursusel võib õige sisestamise järjekord olla oluline lahenduste automaatkontrolli puhul. Sel juhul on see ka ülesande püstituses kirjas.
Lõpetuseks koostame programmi, mis küsib kasutajalt täisarvu ning seejärel
- liidab talle temast suuruse poolest järgmise arvu;
- liidab tulemusele arvu 9;
- jagab tulemuse arvuga 2;
- lahutab tulemusest esialgse arvu.
Eeltoodud tingimustele vastab järgmine programm.
algne_arv = int(input("Sisestage täisarv: ")) järgmine_arv = algne_arv + 1 tulemus = algne_arv + järgmine_arv tulemus = tulemus + 9 tulemus = tulemus / 2 tulemus = tulemus - algne_arv print(tulemus)
Võib tunduda kummaline, et kuidas me saame muutujale väärtuse anda tehtega, milles kasutame sedasama muutujat ennast (nt tulemus = tulemus + 9
). Tegelikult on see aga täiesti lubatud ja sageli kasutatav! Nii saabki muutuja väärtust muuta.
Proovige programmi erinevate arvudega! Milliseid tulemusi saate?
Tulemus paistab olevat ujukomaarv. Mis hetkel see tekib? Thonnyga võime jälgida muutujate väärtusi programmi jooksutamise ajal. Selleks tuleb muutujate paneel avada (View --> Variables). Kui tavalisel moel programm käivitada (Run --> Run current script või vastav rohelise ringiga nupp või klahv F5), siis tehakse programmi töö pärast kasutajalt sisendi saamist ühe hooga ära ja paistavad muutujate lõppväärtused.
Kui aga kasutada Thonny samm-sammulise läbimise võimalusi, siis näeme muutujate väärtuste muutumist ka samm-sammult. Selleks tuleb programm käivitada silumisrežiimis (Run --> Debug current script või putukaga nupp või Ctrl + F5). Näeme, et programmi esimene rida on esiletoodud. Nüüd saame sammukaupa programmis edasi minna (Run --> Step over või vastav noolega nupp või klahv F6).
Proovige! Millal saab muutuja tulemus
väärtuseks ujukomaarvu?
Proovige, mis muutub, kui jagamismärgi /
asemel kasutada hoopis kahte jagamismärki kõrvuti //
. Tegemist on täisarvulise jagamisega. Kahe arvu jagamisel on tulemuseks alati täisarv (või sellele vastav ujukomaarv). Näiteks 5 // 3
väärtuseks on 1
, 5.1 // 3
väärtuseks aga 1.0
. Tuleb tähele panna, et tulemuse saamiseks jagatist ei ümardata, vaid tulemuseks on kõige suurem täisarv, millest jagatis ei ole väiksem.
Vastake enesetesti küsimusele ning katsetage ka vastava programmiga.
Ülesanne
1. praktikumi ülesandeks 1.3 on ringi ümbermõõdu arvutamise programmi koostamine. Ülesandega kohanemiseks võiks lihtsalt erinevaid astmeid leida.
print(3 ** 2) print(10 ** 100)
Teine arv on siis 1 saja nulliga. Lõpetame siin aga enesetesti küsimusega, mille eest meie kursusel ei saa punktigi, sest enesetesti küsimuste eest meil punkte ei saadagi. 2001. aastal aga Suurbritannia telemängus "Kes tahab saada miljonäriks?" oli see miljoni naela küsimus.
Ülesanne
Sellest arvust ja ka sellest küsimusest on juttu siin. Vastajast (inglise keeles) siin.
Ülesanne 1.3. Ringi ümbermõõdu arvutamine
Koostada programm, mis
- küsib kasutajalt ringi raadiuse (ujukomaarv) ja väljastab ringi ümbermõõdu (
2 * pii * raadius
).
Näiteks kui kasutaja sisestab raadiuseks 4, siis väljastab programm talle 2 * 3.14 * 4 = 25.12. Pii tegelik väärtus ei ole päris täpselt 3.14, kuid kokkuleppeliselt on ta kahe komakohani ümardades sellise väärtusega.
Näide programmi tööst:
>>> %Run lahendus.py
Sisesta ringi raadius: 4
Ringi ümbermõõt on 25.12
Järgmised ülesanded ei ole kohustuslikud, aga kui aega ja tahtmist on, siis võiks proovida lahendada.
Kui on teada sammu pikkus ja läbitav vahemaa, siis on võimalik jagamistehtega arvutada, mitu sammu vahemaa läbimiseks on tarvis teha. Näiteks kui on teada, et sammupikkus on 0.8 meetrit ja läbitav vahemaa on 10000 meetrit, siis on tehtavate sammude arv 10000 / 0.8 = 12500.
Koostada programm, mis
- küsib esimesena kasutajalt sammu pikkuse (meetrites, ujukomaarv);
- küsib teisena kasutajalt läbitava vahemaa (meetrites, täisarv);
- väljastab ekraanile tehtavate sammude arvu, mis on ümardatud täisarvuni.
Täisarvuks ümardamisel saab kasutada funktsiooni round
, näiteks round(sammude_arv)
väärtuseks on 14194, kui kasutaja on sisestanud sammu pikkuseks 0.93 ja läbitavaks vahemaaks 13200. Funktsioon int ei ole siin sobiv, kuna ümardab arvu alla, kuigi sellisel juhul jääks meil pool sammu puudu.
Näide programmi tööst:
>>> %Run lahendus.py
Sisesta sammu pikkus: 0.85
Sisesta läbitav vahemaa: 12355
Selle vahemaa läbimiseks on tarvis teha 14535 sammu.
Ülesanne 1.5 Kergejõustiku kahevõistlus
Tegelikkuses kergejõustikus kahevõistlust ei eksisteeri ja kahevõistluseks nimetatakse talispordiala, mis koosneb suusahüpetest ja murdmaasuusatamisest. Loeme siinkohal kergejõustiku kahevõistluseks ala, mis koosneb klassikalise kümnevõistluse kahest alast: 100 meetri jooksust ja kaugushüppest. Kümnevõistluse aladel on omamoodi punktisüsteem, mida on üsna keeruline pähe õppida, kui tahta näiteks sõpradega staadionil mõõtu võttes punktid välja arvutada. Valemeid rakendades, eriti programmi näol, mis arvutuse sinu eest ära teeb, muutub asi märksa lihtsamaks.
Kümnevõistluse alade punkte arvutatakse kahe erineva valemi alusel:
- Ajalist sooritust nõudvad alad (100 meetri jooks):
int(A(B - P)**C)
- Distantsilist sooritust nõudvad alad (kaugushüpe):
int(A(P - B)**C)
Valemeid vaadates tekib ilmselt mõte, et mida need tähed täpselt tähistavad. Selleks on loodud kümnevõistluse punktide arvutamise tabel, mida on 1984. aastast sellisel kujul üleilmselt kasutatud. P tähistab valemites võistleja sooritust. 100 meetri jooksu puhul on see sekundites, kaugushüppe puhul sentimeetrites.
Spordiala | A | B | C |
---|---|---|---|
100 meetri jooks | 25.4347 | 18 | 1.81 |
Kaugushüpe | 0.14354 | 220 | 1.4 |
Koostada programm, mis
- küsib esimesena kasutajalt 100 meetri jooksu tulemust (ujukomaarv, sekundites). Arvestame sellega, et jooksualadel võetakse aega kahe komakoha täpsusega;
- küsib teisena kasutajalt kaugushüppe tulemust (täisarv, sentimeetrites);
- arvutab mõlemalt alalt saadud punktid (pidada meeles, et punktid on täisarvulised), liidab need kokku ja väljastab kasutajale.
Näide programmi tööst:
>>> %Run lahendus.py
Sisesta 100 meetri jooksu tulemus: 9.88
Sisesta kaugushüppe tulemus: 843
Kahevõistlusest koguti 2298 punkti.
Kodune ülesanne!
- Kontrollige, kas teie kodu- või sülearvutis on olemas Thonny. Vajadusel paigaldage või uuendage.
- Thonny saate nt. veebilehelt siit.
- Proovige, kas toimib.
- Kontrollige, kas Teil on moodle.ut.ee-s juurdepääs Programmeerimise alused kursusele.
- Lõpetage poolelijäänud ülesanded.
- Tehke kodus enne järgmist praktikumi läbi 2. nädala materjal ja lahendage koduülesanded 2.1, 2.2 ja 2.3.