Osa 1

Lisää muuttujista

Vastaa seuraavaan kyselyyn ennen osion aloittamista. Saat vastaamisesta yhden tehtäväpisteen.

:
Loading...
:
Loading...

Log in to view the quiz

Muuttujia tarvitaan ohjelmissa moniin tarkoituksiin. Voimme tallentaa muuttujiin mitä tahansa sellaista tietoa, jota tarvitaan ohjelmassa myöhemmin.

Muuttuja luodaan Pythonissa seuraavasti:

muuttujan_nimi = ...

Tässä ... tarkoittaa arvoa, joka tallennetaan muuttujaan.

Esimerkiksi kun luemme input-komennolla merkkijonon käyttäjältä, sijoitamme merkkijonon muuttujaan, jotta voimme käyttää sitä myöhemmin ohjelmassa:

nimi = input("Anna nimesi: ")
print("Moi, " + nimi)
Esimerkkitulostus

Anna nimesi: Kummitus Moi, Kummitus

Muuttujille voidaan antaa arvoja myös esimerkiksi näin:

etunimi = "Pekka"
sukunimi = "Pythonen"

nimi = etunimi + " " + sukunimi

print(nimi)
Esimerkkitulostus

Pekka Pythonen

Tässä tapauksessa muuttujan arvo ei tule käyttäjältä vaan se on sama ohjelman jokaisella suorituskerralla.

Muuttujien arvon muuttaminen

Muuttujan arvo voi nimensä mukaisesti muuttua. Niin kuin edellisessä osassa todettiin, uusi arvo ylikirjoittaa vanhan arvon.

Esimerkiksi seuraavassa ohjelmassa muuttuja sana saa kolme eri arvoa:

sana = input("Anna sana: ")
print(sana)

sana = input("Anna toinen sana: ")
print(sana)

sana = "kolmas"
print(sana)
Esimerkkitulostus

Anna sana: eka eka Anna toinen sana: toka toka kolmas

Muuttujan sisältö siis vaihtuu jokaisen sijoituksen yhteydessä.

Muuttujan uusi arvo voi myös perustua sen vanhaan arvoon. Esimerkiksi seuraavassa muuttuja sana saa ensin arvoksi käyttäjän syötteen. Tämän jälkeen muuttuja saa arvoksi vanhan arvonsa, jonka perään on lisätty kolme huutomerkkiä:

sana = input("Anna sana: ")
print(sana)

sana = sana + "!!!"
print(sana)
Esimerkkitulostus

Anna sana: testi testi testi!!!

Kokonaisluvut

Tähän mennessä olemme tallentaneet muuttujiin vain merkkijonoja. Usein ohjelmissa halutaan kuitenkin tallentaa myös muun tyyppistä tietoa. Tarkastellaan aluksi kokonaislukuja.

Seuraava ohjelma luo muuttujan ika, jonka sisältönä on kokonaisluku.

ika = 24
print(ika)

Ohjelma tulostaa arvon

Esimerkkitulostus

24

Kokonaisluvun ympärille ei kirjoiteta lainausmerkkejä. Itse asiassa luvun ympärille kirjoitettavat lainausmerkit tarkoittavat, että kyseessä ei ole luku vaan merkkijono (joka tosin saattaa sisältää numeroita).

Mitä eroa muuttujan tyypeillä siis on, kun seuraava ohjelma tulostaa samat arvot?

luku1 = 100
luku2 = "100"

print(luku1)
print(luku2)
Esimerkkitulostus

100 100

Tyypeillä on merkitystä, koska erilaiset operaatiot vaikuttavat eri tavalla erityyppisiin muuttujiin. Tarkastellaan seuraavaa esimerkkiä:

luku1 = 100
luku2 = "100"

print(luku1 + luku1)
print(luku2 + luku2)

Ohjelman tulostus on seuraava:

Esimerkkitulostus

200 100100

Kahdelle lukuarvolle +-operaattori siis merkitsee yhteenlaskua, merkkijonoille taas yhdistämistä peräkkäin.

Arvojen yhdistäminen tulostettaessa

Seuraava ohjelma ei toimi, koska "Tulos on " ja tulos ovat erityypisiä:

tulos = 10 * 25
# seuraava rivi tuottaa virheen
print("Tulos on " + tulos)

Ohjelma ei tulosta mitään, vaan antaa virheen

Esimerkkitulostus

TypeError: unsupported operand type(s) for +: 'str' and 'int'

Python kertoo, ettei kahden erityyppisen arvon yhdistäminen toimi. Tässä tapauksessa arvon "Tulos on" tyyppi on merkkijono ja arvon tulos tyyppi on kokonaisluku.

Jos haluamme tulostaa yhdellä komennolla merkkijonon ja luvun, yhdistäminen onnistuu kuitenkin muuttamalla luku merkkijonoksi str-funktiolla. Esimerkiksi

tulos = 10 * 25
print("Tulos on " + str(tulos))
Esimerkkitulostus

Tulos on 250

Toinen mahdollisuus on käyttää pilkkua print-komennossa. Tällöin komento tulostaa kaikki pilkuilla erotetut arvot riippumatta niiden tyypistä:

tulos = 10 * 25
print("Tulos on", tulos)
Esimerkkitulostus

Tulos on 250

Huomaa, että tässä tapauksessa arvojen väliin ilmestyy automaattisesti yksi välilyönti tulostuksessa.

Tulostaminen f-merkkijonojen avulla

Niin sanotut f-merkkijonot tarjoavat kolmannen ja edellisiä joustavamman ja jopa helppokäyttöisemmän tavan tulostuksen muotoiluun.

Aiempi tekstin ja kokonaisluvun tulostava esimerkki tehtäisiin f-merkkijonojen avulla seuraavasti:

tulos = 10 * 25
print(f"Tulos on {tulos}")

Tulostettavan merkkijonon alussa on kirjain f, joka tarkoittaa, että kyseessä on f-merkkijono. Merkkijonon sisälle on sijoitettu aaltosuluissa muuttuja tulos, jonka arvo tulee tulostuvan merkkijonon osaksi. Tulostus on täsmälleen sama kuin aiemmissa esimerkeissä eli

Esimerkkitulostus

Tulos on 250

Yksittäisen f-merkkijonon sisälle on mahdollista laittaa useampiakin muuttujia. Esimerkiksi koodi

nimi = "Arto"
ika = 39
kaupunki = "Espoo"
print(f"Hei {nimi}, olet {ika}-vuotias. Asuinpaikkasi on {kaupunki}.")

tuottaa seuraavan tuloksen:

Esimerkkitulostus

Hei Arto, olet 39-vuotias. Asuinpaikkasi on Espoo.

Huomaa, että täsmälleen tämän esimerkin kaltaista tulostusta on mahdotointa saada aikaan käyttämällä print-komennossa pilkkua:

nimi = "Arto"
ika = 39
kaupunki = "Espoo"
print("Hei", nimi, ", olet", ika, "-vuotias. Asuinpaikkasi on", kaupunki, ".")

Tulostus on seuraava:

Esimerkkitulostus

Hei Arto , olet 39 -vuotias. Asuinpaikkasi on Espoo .

Tulostuksessa on nyt välilyönti jokaisen erillisen osan välissä ja muutamassa kohdassa se aiheuttaa ongelman.

Vaikka pilkullinen muoto print-komennosta on joskus kätevä, aiheuttaa se välillä harmaita hiuksia ja silloin on parempi käyttää f-merkkijonoja. Osassa 4 opimme lisää f-merkkijonojen käteviä ominaisuuksia tulosteen muotoilussa.

Liukuluvut

Liukuluku on ohjelmoinnissa esiintyvä termi, joka tarkoittaa käytännössä desimaalilukua. Liukulukuja voidaan käyttää melko samalla tavalla kuin kokonaislukuja. Huomaa, että desimaalierottimena käytetään pistettä (kuten englannissa yleensä).

Esimerkiksi seuraava ohjelma laskee kolmen liukuluvun keskiarvon:

luku1 = 2.5
luku2 = -1.25
luku3 = 3.62

keskiarvo = (luku1 + luku2 + luku3) / 3
print(f"Keskiarvo: {keskiarvo}")
Esimerkkitulostus

Keskiarvo: 1.6233333333333333

Kertauskysely tämän osan asioihin liittyen:

:
Loading...
:
Loading...

Log in to view the quiz

Seuraava osa: