Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 4. nädala sisukord | järgmine > |
4.1 Sõned
JUTUMÄRGID VÕI ÜLAKOMAD?
Andmetüüpide juures rääkisime põgusalt ka andmete tekstilisest esitamisest ehk sõnedest. Oli ka juttu, et sõne esitatakse jutumärkide (või ülakomade) vahel ja sõne ingliskeelne vaste on string ning lühend str.
Vaatleme nüüd sõnesid lähemalt. Nagu öeldud, võib sõne panna ka jutumärkide või ü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?
Seejuures väärib märkimist, et jutumärkide või ülakomade ümberpanemine muutujanimele ei muuda selle muutuja väärtust sõneks. Vastava sõne saamiseks on funktsioon str()
.
Ülesanne
Tegelikult saab programmeerimisel üsna sageli sama tulemuse saamiseks erinevaid võimalusi kasutada. Iseküsimus on, kui põhjalikult neid erinevaid võimalusi saab ja tuleb õpetamisel välja tuua. Sellel kursusel otsustasime mõlemaid variante (nii jutumärke kui ülakomasid) küllaltki põhjalikult tutvustada. Kui ülesande tekstis ei ole eraldi märgitud, siis võib ülesannete lahendamisel ükskõik kumba varianti kasutada.
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. Kui neid on aga vaja tekstis kasutada, siis tuleb kasutada langkriipsu jutumärkide ees. 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
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.
Sõne koosneb sümbolitest ja neid saab eraldi käsitleda. Näiteks tavamõttes esimene sümbol on indeksiga 0.
linn = "Tartu" print(linn[0])
Leedu perenimede kontrollülesandes juba tegelikult sümbolite abi kasutasime ka, aga põhjalikumalt räägime neist järgmisel nädalal.
KORRUTADA SAAB KA
Sõnedega saab veel erinevaid toredaid asju teha. Näiteks saab sõnesid "korrutada".
lause = "mull " * 20 print(lause)
Tulemuseks saame:
Ülesanne
VÄLJUND
Programmis tuleb aeg-ajalt suhelda kasutajaga ehk tegeleda sisendi ja väljundiga. Me oleme eespool funktsioone input
ja print
juba kasutanud, aga räägime nüüd just viimasest põhjalikumalt. 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öö. Funktsioonid ja nende argumendid on programmeerimises väga tähtsal kohal. Põhjalikumalt käsitleme neid kahe nädala pärast. Oleme neid aga kasutanud ja kasutame edasi juba praegu.
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.)
< eelmine | 4. nädala sisukord | järgmine > |