5 Sisend kasutajalt: input()

Eelnevates näidetes kirjutasime andmed programmiteksti sisse. Sageli on meil vaja andmeid programmi töö vältel juurde saada. Failides (sh internetis) olevatele andmetele juurdepääsust räägime hilisemates peatükkides. Praegu vaatame, kuidas programm saaks kasutajalt andmeid küsida ja neid kasutada. Programmi poolt vaadates on kasutajalt saadavad andmed sisend. Vastava funktsiooni nimi input tõlkes sisendit tähendabki.

Alustame programmist, mis küsib kasutajalt nime ja siis tervitab teda nimepidi. Nagu tavaliselt, 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:

Näiteprogramm. Sisendiga tervitus

print("Palun sisestage nimi")
nimi = input()
print("Tere, " + nimi + "!")

Programmi Thonnys käivitades ilmub küsimus Thonny allosas asuvale Shell-paneelile ja sinna tuleb ka vastus kirjutada. Klaviatuuri reavahetusklahviga (Enter) sisestus kinnitatakse. Proovi 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 on meil vaja kasutajalt küsida näiteks hoopis arve.

Küsime näiteks kasutaja vanust. Muutujale paneme nimeks vanus:

vanus = input("Palun sisestage oma vanus: ")
print(type(vanus))

Proovi programmi kü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.

Kuniks meil pole vaja teha arvulisi tehteid, võime vanust sõne kujul hoida:

vanus = input("Palun sisestage oma vanus: ")
print("Teie vanus on " + vanus)

Näiteks kui sisestame vastuseks 31, siis oleks tulemus sama, kui programmis oleks rida vanus = "31". Tegelikult on meil olemas vahendid mingi väärtuse teise andmetüübina 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 kasutame kaht tüübiteisendust: vanus peab olema täisarv, et saaks teha arvutusi, aga väljatrükkimiseks on vaja hoopis sõnet.

Kui selle programmi puhul sisestada midagi, mida int ei saa täisarvuks teisendada, siis ilmub veateade. Selle kursuse materjalides eeldame reeglina, et kasutaja sisestab seda tüüpi asju, mida küsitakse. Päriselt muidugi nähakse suurt vaeva, et kasutaja (kas siis kogemata või meelega) ei saaks sisestada midagi sellist, mis pole oodatud ja võib-olla programmi 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 üksiku arvu väljastamisega toime. Varasemates näidetes oli str vajalik, sest arvu ja sõnet ei saa lihtsalt kokku liita.

Siin programmis küsitakse kahte arvu. See, millises järjekorras neid sisestatakse, pole siin oluline. Kui kaks esimest rida ära vahetada, siis tulemus jääb samaks:

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)

Tegelikult võime siin ära vahetada ka muutujate nimed. See, mis kasutajalt küsitakse esimese arvuna, on programmis hoopis muutujas teine_arv ja vastupidi.

teine_arv = int(input("Sisesta esimene liidetav täisarv: "))
esimene_arv = int(input("Sisesta teine liidetav täisarv: "))
arvude_summa = esimene_arv + teine_arv
print(arvude_summa)

Üldiselt on muidugi mõistlik, et muutuja nimi oleks vastavuses sisuga.

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 me saame muutujale anda väärtuse tehtega, milles kasutame sedasama muutujat ennast (nt tulemus = tulemus + 9). Tegelikult on see täiesti lubatud ja sageli kasutatav. Nii saabki muutuja väärtust muuta.

Proovi programmi erinevate arvudega! Milliseid tulemusi saad?

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 sammsammulise 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).

Katseta sammhaaval käivitamist! Millal saab muutuja tulemus väärtuseks ujukomaarvu?

Proovige, mis muutub, kui jagamismärgi / asemel kasutada hoopis kahekordeset jagamismärki //, mis tähistab täisarvulist jagamist. Kahe arvu jagamisel on tulemuseks alati täisarv (või sellele vastav ujukomaarv). Näiteks 5 // 3 väärtuseks on 1, tehte 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.

Enesekontroll (1 küsimus)

Video

Vaata ka teemat tutvustavat videot.

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut