Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 4. OSA sisukord | järgmine > |
4.1 Sõned. Sisend ja väljund
Andmetüüpide juures rääkisime põgusalt ka andmete tekstilisest esitamisest ehk sõnedest. Vaatasime, et sõne esitatakse jutumärkide vahel ja sõne ingliskeelne vaste on string ning lühend str.
Tegelikult võib sõne panna ka ülakomade vahele. Näiteks saab sõne esitada nii "Sisenesid pangaautomaati!" kui ka 'Sisenesid pangaautomaati!'. Küll aga ei saa sõne ees olla üks märk (nt jutumärk) ja järel teine (nt ülakoma). Tuleks panna tähele, et jutumärgid ja ülakomad ise ei kuulu sõne sisu juurde. Seda saame proovida print käsuga:
- Esimene võimalus
print("Sisenesid pangaautomaati!")
- Teine võimalus
print('Sisenesid pangaautomaati!')
Mõlema võimaluse puhul väljastatakse ekraanile samasugune tekst:
Milleks need jutumärgid ja ülakomad on vajalikud? Neid on vaja selleks, et muidu võib Python sõned segamini ajada näiteks muutujanimede või arvudega. Proovige näiteks eelmist käsku ilma ülakomadeta. Mis juhtub?
AGA KUI TEKST SISALDAB JUBA JUTUMÄRKE VÕI ÜLAKOMASID?
Asi läheb veidi keerulisemaks, kui sõne sees on vaja kasutada jutumärke, ülakomasid või muid erisümboleid. Järgnevalt demonstreerime erinevaid viise selle probleemi lahendamiseks.
- 1. võimalus. Kui tekstis on ülakomasid, siis kõige lihtsam on kasutada piiritlejaks jutumärke ja vastupidi:
print("Rock 'n' roll") print('Jim ütles vaid: "Siin see on."')
Ülesanne
- 2. võimalus. Kui tekstis on vaja kasutada nii jutumärke kui ka ülakomasid, siis pole eelmisest soovitusest abi. Sellisel juhul tuleb üks neist (nt jutumärgid) ikkagi valida piiritlejaks, aga nende kasutamisel tekstis tuleb need spetsiaalselt märgistada langkriipsuga (sellist tegevust nimetatakse inglise keeles escaping) – see annab Pythonile märku, et tegemist pole veel teksti lõpuga, vaid sooviti kirja panna piiritlejaks valitud sümbolit ennast:
print("Jack vastas: \\"Rock 'n' roll\\".") print('Jack vastas: "Rock \'n\' roll".')
Mõlemal juhul väljastatakse ekraanile tekst:
(Juhime tähelepanu sellele, et langkriips \ ja kaldkriips / on erinevad märgid.)
Langkriipsu saab kasutada ka muul otstarbel, nt reavahetusi saab esitada kombinatsiooniga \n.
print("Seda kuupaistet!\nOh muutuksin sündides\nmänniks mäetipul!\n-Ryota")
Tulemus:
Nagu näha, on langkriips spetsiaalse tähendusega. Kuidas aga esitada langkriipsu ennast? Lihtne, see tuleb ära märgistada ... langkriipsuga!:
print("C:\\kaustanimi\\failinimi.txt")
Tulemus:
Ülesanne
- 3. võimalus. Kui tekstis on vaja kasutada palju reavahetusi, ülakomasid või jutumärke, siis võib tulemus muutuda kõigi nende \n, \' või \" tõttu väga kirjuks. Seetõttu on Pythonis veel üks sõne kirjapaneku viis – kolmekordsete ülakomade või jutumärkide vahel saab vabalt kasutada tavalisi reavahetusi, ülakomasid ja jutumärke. Katsetage iseseisvalt:
print("""Jack vastas: "Rock 'n' roll".""") print('''Jack vastas: "Rock 'n' roll".''') print("""Seda kuupaistet! Oh muutuksin sündides männiks mäetipul! --Ryota""") print(""" _____ / ____| | | __ __ _ _ __ ___ ___ _____ _____ _ __ | | |_ |/ _` | '_ ` _ \ / _ \ / _ \ \ / / _ \ '__| | |__| | (_| | | | | | | __/ | (_) \ V / __/ | \_____|\__,_|_| |_| |_|\___| \___/ \_/ \___|_| """)
Ülesanne
SISEND JA VÄLJUND
Programmis tuleb aeg-ajalt suhelda kasutajaga ehk tegeleda sisendi ja väljundiga.
Nagu olete juba õppinud, saab programmis väärtusi ekraanile kuvada käsuga print. Nüüd uurime seda käsku veidi lähemalt.
Vaatame näidet:
print(32 * 57)
See, mis ekraanile kuvatakse, antakse ette sulgudes - argumendina. Eelmises näites on 32 * 57 käsu print argumendiks. Kui kõik läheb ilusti, siis programm kuvab ekraanile 1824 ja lõpetab töö.
Käsule print võib ette anda ka mitu argumenti, sel juhul trükitakse ekraanile samale reale mitu asja järjest, kusjuures need asjad on eraldatud tühikutega. Järgnev näide demonstreerib kahte samaväärset viisi, kuidas trükkida ekraanile mitu infokildu korraga. Esimene variant kombineerib komponendid kõigepealt üheks sõneks ja kasutab seda print-i argumendina, teine variant annab kõik komponendid eraldi argumentidena.
eesnimi = "Peeter" perenimi = "Paan" vanus = 21 print(eesnimi + " " + perenimi + " vanus: " + str(vanus))
eesnimi = "Peeter" perenimi = "Paan" vanus = 21 print(eesnimi, perenimi, "vanus:", vanus)
Mõlemad programmid väljastavad ekraanile:
Eraldi argumentidega variant on küll lühem kirja panna (eriti mugav on see, et arve ei pea ise str käsuga sõneks teisendama), aga mõnikord see siiski ei sobi, näiteks siis, kui me ei soovi väljundis argumentide vahele tühikut. Niisiis on esimene variant pisut paindlikum, kuid teine pisut lihtsam (lihtsam nii kirjutada kui ka hiljem lugeda).
Seesuguseid dilemmasid tuleb programmeerijatel sageli ette: kas valida lihtsam või paindlikum tee? Kuidas nende vahel kompromissi leida? Ühe poole püüeldes jääb teine tihti unarusse.
Ülesanne
(Otto-Triin oli üheksakümnendate aastate keskel lastesaate tegelane.)
Kasutajalt andmete küsimiseks kõige lihtsam viis on käsk input, mis kõigepealt kuvab ekraanile teksti selle kohta, milliseid andmeid programm ootab ning seejärel võimaldab kasutajal sisestada vastavad andmed klaviatuurilt. Varem kasutasime input-i pigem nii:
print("Sisesta PIN-kood:") sisestatud_pin = input()
Käsule input saab anda argumendiks selle sõne, mida tahame, et kasutajale näidataks:
sisestatud_pin = input("Sisesta PIN-kood: ")
Katsetage eelnevaid näiteid! Kuidas need omavahel erinevad?
Mäletatavasti annab input sisestatud info alati sõne kujul. Enne kui saame sisestatud andmeid kasutada numbrilistes arvutustes, tuleb sisestatud tekst teisendada arvuks (näiteks täisarvuks saime funktsiooniga int, ujukomaarvuks aga funktsiooniga float.
TEHTED SÕNEDEGA
Sõnedega saab teha erinevaid tehteid. Me oleme neid juba liitnud. See käis plussmärgi abil.
"Tere " + "hommikust"
Lisaks on olemas funktsioonid, mis "ühendatakse" sõne külge punkti abil. (Neid nimetatakse ka meetoditeks.) Nende funktsioonide nime lõppu pannakse samuti sulud, mis võivad olla tühjad või mittetühjad. Selliste funktsioonidega saab palju huvitavat ja kasulikku korda saata!
print("tartu".capitalize()) print("Tartu".endswith("tu")) print("Tartu".lower()) print("Tartu".upper()) print("Tartu".startswith("tu")) print("Kauneim linn on Eestis Tartu".title())
Katsetage seda programmi ja püüdke aru saada, mida need funktsioonid teevad.
Funktsioonid töötavad ka muutujatega, mille väärtuseks on sõne.
linn = "Tartu" print(linn.lower())
Kõikide sõnemeetoditega saab tutvuda aadressil http://docs.python.org/3/library/stdtypes.html#string-methods.
< eelmine | 4. OSA sisukord | järgmine > |