Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 1. nädala sisukord | järgmine > |
1.5 Sisend kasutajalt: input()
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.
Võite kohe edasi lugeda või vaadata hoopis videot, mis ka sama teemat tutvustab.
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. nädala kontrollülesandeks 1.3 on astendamise 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.
< eelmine | 1. nädala sisukord | järgmine > |