Ehtolauseet ovat tärkeä osa ohjelmakoodia. Ilman ehtolauseita kaikki ohjelmat rullaisivat aina samalla kaavalla alusta loppuun asti. Kuvittele esimerkiksi, että pelaat videopeliä, jossa ei ole mahdollista hävitä. Tai jos salasanaasi ei tarkistettaisi ennen kirjautumista. Ehtolauseet muuttavat siis ohjelman toimintaa, niin että erilaisiin tilanteisiin voidaan reagoida eri tavoin. Esimerkki konkreettisesta oikeaan elämään liittyvästä ehtolauseesta voisi olla:
jos ulkona sataa vettä, niin laita kumisaappaat.
Syntaksiltaan Pythonissa ehtolause eli if-rakenne näyttää kaikessa yksinkertaisuudessaan tältä:
x = 2 # Muuttujaan "x" sijoitetaan luku 2
if x < 0: # Tarkistetaan onko muuttuja "x" pienempi, kuin luku 0
print("luku on negatiivinen") # Jos edellisen rivin ehto piti paikkansa, niin tulostetaan "luku on negatiivinen"
Jos edellisen esimerkin ehto ei toteudu, niin sisennettyä koodilohkoa ei suoriteta. Toteutuessaan se taas suoritetaan. Jos taas halutaan tehdä jotain ainoastaan siinä tapauksessa, että ehto ei toteudu, voidaan käyttää "else"-rakennetta. Toisin sanoen ja taas oikean elämän esimerkkiä hyödyntäen:
jos jotain, niin... muuten näin...
Else-rakennetta käytetään Pythonissa näin:
x = 2 # Muuttujaan "x" sijoitetaan luku 2
if x < 0: # Tarkistetaan onko muuttuja "x" pienempi, kuin luku 0
print("luku on negatiivinen") # Jos edellisen rivin ehto piti paikkansa, niin tulostetaan "luku on negatiivinen"
else: # Jos äskeinen ehto ei pitänyt paikkaansa niin suoritetaan seuraavan rivin sisennys
print("luku on positiivinen") # Tulostetaan "luku on positiivinen"
Lisäehtoja "jossitteluun" voi lisätä elif-rakenteella (else if):
x = 2
if x < 0:
print("luku on negatiivinen")
elif x > 0:
print("luku on positiivinen")
else:
print("luku on nolla")
Yleensä ohjelmakoodissa ehtolauseita käytetään osana muita rakenteita, jotta ohjelmakoodi osaa tehdä päätöksen siitä, mitä tehdään. Kuten tulet varmasti huomaamaan if-rakenne on todella tärkeä. Vertailuoperaattoreita, joilla muuttujia voi vertailla on Pythonissa muutama:
1. Välitehtävä: Tehtävänäsi on koodata ohjelma, joka kysyy salasanaa käyttäjältä. Jos käyttäjä syöttää oikean salasanan, hänelle tulostetaan teksti "Tervetuloa!". Jos salasana on väärin, niin tulostetaan "Väärä salasana". Oikea salasana on "katapultti13".
ss = input("Anna salasana: ")
if ss == "katapultti13":
print("Tervetuloa!")
else:
print("Salasana on väärin")
Silmukat eli toistorakenteet vähentävät koodin kirjoittamista huomattavasti. Lisäksi ne ovat oiva tapa käydä läpi suurempiakin datamääriä. Toistorakenteella tarkoitetaan ohjelmakoodin rakennetta, jossa ohjelmakoodi toistaa samaa koodinpätkää, kunnes sille asetettu ehto käy toteen. Taas käytännön elämästä johdettu esimerkki:
syödään lounasta niin kauan, kunnes maha on täynnä.
Listat ovat Pythonin vastine taulukoille. Etenkin kun käsittelyssämme on silmukat, on oikea hetki mainita listoista, sillä listoja usein käydään läpi silmukoilla. Edellisen kappaleen lopulla oli esimerkki, jossa ohjelma laski listasta löytyvien alkioiden keskiarvon. Tässäkin esimerkissä lista suhattiin läpi silmukkaa hyödyntäen. Pythonissa lista esitellään ilmoittamalla listan alkiot hakasulkeissa:
juomat = ["Kahvi", "Kokis", "Tee", "Mehu"]
Listan alkioon pääsee käsiksi hakasulkeilla ja ilmoittamalla indeksin
hakasulkeiden sisään. Toisin sanoen missä kohtaa listaa alkio on.
Esimerkiksi: kohdasta juomat[0]
löytyy "Kahvi". Mitä
löytyy paikasta juomat[2]
?
MUISTA taulukon indeksointi alkaa Pythonissa aina nollasta!
Listoille on myös paljon erilaisia metodeja, aivan kuten merkkijonoillekin. Voisikin ajatella, että merkkijonotkin ovat kuin listoja merkeistä, joissa jokainen merkki on yksi listan alkio. Esimerkkejä listoihin liittyvistä metodeista:
2. Välitehtävä: Kopioi yllä esitelty "juomat"-lista tekstieditoriisi. Ja 1) Lisää listaan alkio "Vesi" 2) Poista listasta alkio "Kokis" 3) Tarkista kuinka monta alkiota listassa on?
juomat = ["Kahvi", "Kokis", "Tee", "Mehu"]
# Luodaan uusi muuttuja, jonka arvona on "Vesi"
lisattava = "Vesi"
# Lisätään muuttuja uudeksi alkioksi listaan
juomat.append(lisattava)
# Poistetaan listasta "Kokis"
juomat.remove("Kokis")
# Otetaan alkioiden määrä talteen uuteen muuttujaan
alkioiden_maara = len(juomat)
print(alkioiden_maara) # 4 (Tulostetaan alkioiden määrä)
print(juomat) # ['Kahvi', 'Tee', 'Mehu', 'Vesi'] (Tulostetaan listan sisältö)
For-silmukka on yksi Pythonin silmukkarakenteista. For-silmukka on erityisen käytännöllinen silloin, kun tarkoituksena on käydä läpi listaa ja sen alkioita yksi kerrallaan. Alla olevassa esimerkkissä on luotu kymmenen alkion mittainen lista, joka sisältää luvut 1-10. Silmukka käy alkiot läpi yksi kerrallaan ja tulostaa
numerotaulukko = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for numero in numerotaulukko:
print(numero)
Ymmärrätkö miten for-silmukka toimii? Kokeile "vipeltää" aikaisemmin
luodun
juomat = ['Kahvi', 'Tee', 'Mehu', 'Vesi']
-listan läpi ja
tulostaa jokainen alkio yksi kerrallaan.
Range-silmukka on myös erittäin käytännöllinen silmukka-rakenne. Se
toimii lähes samalla periaatteella kuin for-silmukka.
range()
-funktioon on kuitenkin mahdollista etukäteen
ilmoittaa, kuinka monta kierrosta silmukassa pyöritään. Alla oleva
esimerkki tulostaa luvut 1-10:
for x in range(10):
print(x)
Pääsetkö jyvälle? range()
-funktio voi ottaa sisäänsä myös
3 argumenttia, missä argumentit toimivat näin: range(alku, loppu,
väli). Esimerkiksi range(0, 10, 3)
, mikä tulostaisi
0 3 6 9. Kokeile tulostaa
range()
-silmukkaa hyödyntäen joka kymmenes luku välillä
0-100.
While-silmukka on mahdollisesti kaikistä yleisin silmukka-rakenne ja vastaavanlainen toiminnallisuus löytyy kielestä, kuin kielestä. While-silmukan logiikka perustuu siihen, että ohjelma pyörii silmukassa siihen asti, kunnes while-avainsanan jälkeinen ehto ei enää ole tosi (True). Alla esimerkki:
askel = 0
while askel < 10:
print(askel)
askel += 1 # Tämä on sama asia, kuin askel = askel + 1
Huomaat varmaan, että askel-muuttujaa pitää kokoajan korottaa, jotta
saavutamme joskus ehdon ja teemme siitä epätotta (askel < 10
). Eli, kun askel-muuttuja saavuttaa arvon 10, ei while-avainsanan
jälkeinen ehto enää pidä paikkaansa ja silmukan suoritus loppuu. Jos
koodin viimeistä riviä askel += 1
ei olisi, niin ohjelma
tulostaisi lukua 0 loputtomasti. Kyseessä olisi niin
kutsuttu ikuinen silmukka.
While-silmukka on erittäin hyödyllinen apuväline, kun sitä oppii käyttämään. Kun emme ennalta tiedä, kuinka monta kertaa jokin asia tulee tehdä, on while-silmukka tässä kohtaa ainut vaihtoehto.
break ja continue käskyillä voimme ohjailla silmukan käyttäytymistä. break-käsky nimensä mukaisesti poistuu silmukasta, kun taas continue:lla voimme siirtyä silmukassa seuraavalle "kierrokselle". Alla olevassa esimerkissä on kaksi ohjelmaa, jotka auttavat avaamaan, miten käskyt toimivat Pythonissa:
# Ohjelma tulostaa parittomat luvut alueella 1-10
askel = 0
while askel < 10:
askel += 1
if askel % 2 == 0: # Tarkistetaan onko luku parillinen
continue # Jos on niin siirrytään seuraavalle kierrokselle
else:
print(askel) # Tulostetaan luku
# Ohjelma tulostaa luvut alueella 1-5. Huomaatko miksi luku 5 ei tulostu?
for luku in range(10):
if luku == 5: # Tarkistetaan onko luku 5
break # Jos edellinen piti paikkansa, niin poistutaan ohjelmasta
print(luku)