Totuusarvot

Tähän mennessä meillä on ollut kahdenlaista tietoa: lukuja ja merkkijonoja eli tekstiä. Niiden lisäksi yleisin tietotyyppi on totuusarvo, joka kertoo onko jokin totta vai ei. Totuusarvolla on vain kaksi mahdollista arvoa: True eli tosi tai False eli epätosi.

Totuusarvoja tuottava muun muassa vertailut. Luvuille on paljon vertailuja, jotka ovat mahdollisesti tuttuja myös matematiikantunneilta. Pythonissa on seuraavat lukujen vertailut, joista tulee aina tulokseksi joko True eli totta tai False eli epätotta.

luku1 == luku2 ovatko luvut yhtä suuret
luku1 != luku2 ovatko luvut erisuuret
luku1 < luku2 onko luku1 pienempi kuin luku2
luku1 <= luku2 onko luku1 pienempi tai yhtä suuri kuin luku2
luku1 > luku2 onko luku1 suurempi kuin luku2
luku1 >= luku2 onko luku1 suurempi tai yhtä suuri kuin luku2

Myös muita asioita kuin lukuja voidaan vertailla. Esimerkiksi merkkijonoja voidaan vertailla, joskin ei yhtä monipuolisesti kuin lukuja. Pythonissa lähes kaikkea voi vertailla kahdella seuraavalla tavalla, joista tulee aina tulokseksi joko True eli totta tai False eli epätotta.

asia1 == asia2 ovatko asiat samat
asia1 != asia2 ovatko asiat eri

Ehtoja voi myös yhdistellä komennoilla and ja or. And on englantia ja tarkoittaa ja. Or on englantia ja tarkoittaa tai.

Esimerkkejä

koodi mitä tekee
1 > 2 vertaa ovatko 1 isompi kuin 2 ja saa arvon False
“lapio” == “lapio” vertaa ovatko merkkijonot samat ja saa arvon True
muuttuja == “sana” vertaa onko muuttujaan tallennettu arvo sama kuin merkkijono sana
x > 2 and x < 5 vertaa onko muuttujan x arv suurempi kuin 2 ja pienempi kuin 5
sana == “aa” or sana == “bb” tarkistaa onko muuttujan sana sarvo joko “aa” tai “bb”

Ehtolauseet

Kun haluamme, että ohjelma tekee jotain vain tietyssä tilanteessa, tarvitsemme ehtolauseita. Ehtolauseet aloittaa Pythonissa aina if. Se on englantia ja tarkoittaa jos. Käytämme sitä, kun haluamme, että ohjelmamme tekee jotain vain jos tietty ehto toteutuu. Muita ehtolauseita ovat else, eli muussa tapauksessa, ja elif, eli tai jos.

if (jos)

Tehdään ohjelma, joka kysyy käyttäjältä vihannesta ja jos vihannes on sipuli, tulostaa terminaaliin silmiä kirvelee. Tämä tehdään seuraavasti:

vihannes = input("sano vihannes")
if vihannes == "sipuli":
    print("silmiä kirvelee")

if-rakenteessa on ensin komento if ja sitä seuraa vertailu. Vertailun jälkeen on kaksoispiste.

Jos annettu vihannes oli sipuli, siirrytään if-rakenteen sisään ja toteutetaan print("silmiä kirvelee"). Jos vihannes ei ollut sipuli, hypätään sisennetyn koodin yli ja terminaaliin ei tulostu mitään.

Sisennys on tärkeä, koska se kertoo tietokoneelle, että print("silmiä kirvelee") on if-rakenteen sisällä.

else (muussa tapauksessa)

Entäs jos haluamme, että jotain tapahtuu silloinkin, kun vihannes ei ollut sipuli? Silloin käytämme komentoa else. Se on englantia ja tarkoittaa muussa tapauksessa. Else seuraa aina if:iä ja sen sisällä oleva koodi toteutuu, jos if:n koodi ei toteudu. Muutetaan hiukan aikaisempaa ohjelmaa.

vihannes = input("sano vihannes")
if vihannes == "sipuli":
    print("silmiä kirvelee")
else:
    print("tuntematon vihannes")

Nyt jos vihannes on sipuli, terminaaliin tulostuu silmiä kirvelee, mutta jos vihannes ei ollut sipuli, tulostuu terminaaliin tuntematon vihannes.

elif (tai jos)

Viimeinen ehtolause on elif. Se tulee englannin sanoista else if, joka tarkoittaa tai jos. Se seuraa aina if:ä. Se toimii muuten kuin if, mutta jos sitä edeltävän ehtolauseen sisälle on siirrytty, se hypätään yli. Ehtolause alkaa siis aina if:llä ja sitä seuraa haluttu määrä elif:ejä. Viimeisenä on else, jos sellaisen haluaa.

Listään vihannesohjelmaamme muutama lisäehto.

vihannes = input("sano vihannes")
if vihannes == "sipuli":
    print("silmiä kirvelee")
elif vihannes == "porkkana":
    print("se on oranssi")
elif vihannes == "kurkku":
    print("namskis")
else:
    print("tuntematon vihannes")

Nyt jos vihannes on sipuli, tulostuu terminaaliin silmiä kirvelee. Tai jos vihannes on porkkana, tulostuu se on oranssi. Tai jos vihannes on kurkku, tulostuu namskis. Muussa tapauksessa tulostuu tuntematon vihannes.

Tehtävät

  1. Kirjoita ohjelma, joka kysyy salasanaa, ja jos se saa syötteen “salasana”, vastaa “oikea salasana”.

  2. Kirjoita ohjelma, jossa pitää arvata suosikki jäätelömakusi. Jos arvaa oikein, tulostuu “oikein”. Jos arvaa väärin, tulostuu “väärin”.

  3. Alla on kivi-sakset-paperipelin koodi. Kopioi alla oleva koodi ja täydennä puuttuvat kohdat.



Toistamisen alkeet

while-silmukka

Jos haluaa toistaa saman tyylistä asiaa monta kertaa, käytetään toistorakennetta. Pythonissa on kaksi erilaista toistorakennetta ja niistä yksinkertaisempi on while. While on englantia ja tarkoittaa “niin kauan kuin”.

while-komentoa käytetään niin, että sille annetaan ehto ja se toistaa sen sisäistä koodia niin kauan kuin ehto on totta. Koodin sisällä voidaan muun muassa muuttaa muuttujien sisältöä niin, että toisto loppuu, kun muuttujat saavat jonkin tietyn arvon.

Silmukasta voi myös poistua pakotetusti komennolla break. Tämä välittömästi lopettaa toiston ja siirtyy suorittamaan sen jälkeistä koodia.

Muista sisentää koodi, joka kuuluu toiston sisään!

Silmukan ehdoksi voi myös antaa suoraan totuusarvon True. Tällöin silmukka toistuu ikuisesti, kunnes siitä poistutaan break-komennolla.

Esimerkkejä

Esimerkki 1

luku = 0
while luku <10:
    print(luku)
    luku = luku + 1

Mitä tekee: Luodaan muuttuja luku, johon tallennetaan ensin nolla. Sen jälkeen niin kauan kuin luku on alle 10, tulostetaan luku ja sen jälkeen kasvatetaan lukua yhdellä.

Esimerkki 2

while True:
    print("sammutat minut komennolla: pois")
    syöte = input()
    if syöte == "pois":
        break
    else:
        print("en tunne tuota komentoa")

Mitä tekee: While toistaa sisältööä niin kauan kuin sen saama ehto on totta. Ehdon paikalle voi myös asettaa vain totuusarvon True. Tämä “ehto” on aina totta, koska se on kirjaimellisesti totuusarvo “totta”.

Toisto siis toistaa ikuisesti sisäistä koodiaan, jossa se tulostaa terminaaliin “sammutat minut komennolla: pois”. Jos sen saama syöte on “pois”, toisto lopetetaan break-komennolla. Jos taas syöte on jotain muuta, tulostetaan “en tunne tuota komentoa”.

Esimerkki 3

vastaus = ""
while vastaus != "moi":
    print("sano mulle moi")
    vastaus = input()
print("jee!")

Mitä tekee: Luodaan muuttuja vastaus, johon tallennetaan ensin tyhjä merkkijono. Sen jälkeen ohjelma tulostaa terminaaliin “sano mulle moi” ja tallentaa käyttäjän syötteen vastaukseen, niin kauan kuin vastauksen arvo ei ole “moi”. Kun vastaus on “moi”, poistutaan toiston sisältä ja tulostuu terminaaliin “jee!”

Tehtävät

  1. Tee ohjelma, joka tulostaa luvut yhdestä kahteenkymmeneen.

  2. Tee ohjelma, joka tulostaa kaikki parilliset luvut väliltä 0–20.

  3. Tee ohjelma, joka ikuisesti kysyy käyttäjän nimeä ja vastaa aina “niin varmaan”.

  4. Muokkaa edellistä ohjelmaa niin, että vastaus on “niin varmaan, nimi”, jossa nimi on käyttäjän antama syöte.

  5. Fibonaccin lukujono on 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, jne. Lukujonon alussa on luvut 0 ja 1, ja sen jälkeen jokainen luku on kahden edellisen luvun summa. Tee ohjelma, joka tulostaa Fibonaccin lukujonon 100 ensimmäistä lukua.