Osa 1

Laskentaa luvuilla

Aiemmissa osissa nähtiin esimerkkejä peruslaskutoimituksista. Seuraavaan taulukkoon on koottu Pythonin yleisimmät laskuoperaattorit esimerkkeineen:

OperaattoriMerkitysEsimerkkiTulos
+Yhteenlasku2 + 46
-Vähennyslasku10 - 2.57.5
*Kertolasku-2 * 123-246
/Jakolasku (liukuluku)9 / 24.5
//Jakolasku (kokonaisluku)9 // 24
%Jakojäännös9 % 21
**Potenssi2 ** 38

Laskujärjestys noudattaa matematiikasta tuttuja sääntöjä: aluksi lasketaan potenssilaskut, sitten kerto- ja jakolaskut ja lopuksi yhteen- ja vähennyslaskut. Järjestystä voidaan muuttaa sulkujen avulla.

Esimerkki:

print(2 + 3 * 3)
print((2 + 3) * 3)

Ohjelma tulostaa

Esimerkkitulostus

11 15

Operandit, operaattorit ja tyypit

Laskutoimituksen osana on yleensä operandeja ja operaattoreita:

1 5

Yleensä operandien tyyppi ratkaisee lopputuloksen tyypin: jos lasketaan yhteen kaksi kokonaislukua, myös tulos on kokonaisluku. Jos taas vähennetään liukuluku toisesta liukuluvusta, myös tulos on liukuluku. Itse asiassa tulos on liukuluku, jos edes yksi operandeista lausekkeessa on liukuluku.

Jakolasku / muodostaa Pythonissa poikkeuksen sääntöön: sen tulos liukuluku, vaikka operandit olisivatkin kokonaislukuja (esim. 1 / 5 tuottaa liukuluvun 0.2).

Esimerkki:

pituus = 172.5
paino = 68.55

# painoindeksi lasketaan jakamalla paino pituuden neliöllä
# pituus ilmoitetaan kaavassa metreinä
bmi = paino / (pituus / 100) ** 2

print("Painoindeksi on", bmi)

Ohjelman tulostus on seuraava:

Esimerkkitulostus

Painoindeksi on 23.037177063642087

Huomaa, että Pythonissa on myös kokonaislukujakolaskuoperaattori //, joka tuottaa kokonaisluvun, jos sen operandit ovat kokonaislukuja. Vastaus pyöristetään alaspäin kokonaisluvuksi, eli esim.

x = 3
y = 2

print("/-operaattori", x/y)
print("//-operaattori", x//y)

tulostaa

Esimerkkitulostus

/-operaattori 1.5 //-operaattori 1

Lukuarvojen lukeminen

Aikaisemmin käytettiin input-komentoa lukemaan käyttäjältä merkkijonoja. Samaa funktiota voidaan käyttää myös lukuarvojen lukemiseen. Tällaisessa tapauksessa muunnos merkkijonosta lukutyyppiin on kuitenkin tehtävä itse. Logiikka on samanlainen kuin edellisessä osassa opitussa str-funktiossa, vain funktion nimi vaihtuu.

Esimerkiksi voimme muuttaa merkkijonon kokonaisluvuksi funktiolla int. Seuraava ohjelma lukee käyttäjältä syntymävuoden muuttujaan syote ja luo sitten toisen muuttujan vuosi, jossa on vuosi kokonaisluvuksi muutettuna. Tämän jälkeen voimme suorittaa laskun 2020-vuosi, jossa on mukana käyttäjän antama vuosi.

syote = input("Minä vuonna olet syntynyt? ")
vuosi = int(syote)
print("Ikäsi vuoden 2020 lopussa:", 2020 - vuosi)
Esimerkkitulostus

Minä vuonna olet syntynyt? 1995 Ikäsi vuoden 2020 lopussa: 25

Yleensä ei kannata luoda kahta muuttujaa (tässä syote ja vuosi) lukuarvon lukemista varten, vaan voimme samalla kertaa lukea merkkijonon input-funktiolla ja muuttaa sen kokonaisluvuksi int-funktiolla:

vuosi = int(input("Minä vuonna olet syntynyt? "))
print("Ikäsi vuoden 2020 lopussa:", 2020 - vuosi)

Vastaavasti voimme muuttaa merkkijonon liukuluvuksi funktiolla float. Seuraava ohjelma kysyy käyttäjän painon ja pituuden ja laskee näiden tietojen avulla painoindeksin:

pituus = float(input("Anna pituus: "))
paino = float(input("Anna paino: "))

pituus = pituus / 100
bmi = paino / pituus ** 2

print("Painoindeksi on", bmi)

Ohjelman tulostus voisi näyttää vaikka seuraavalta:

Esimerkkitulostus

Anna pituus: 163 Anna paino: 74.45 Painoindeksi on 28.02137829801649

Muuttujien käyttöä

Tarkastellaan ohjelmaa, joka laskee kolmen käyttäjän syöttämän luvun summan:

luku1 = int(input("Ensimmäinen luku: "))
luku2 = int(input("Toinen luku: "))
luku3 = int(input("Kolmas luku: "))

summa = luku1 + luku2 + luku3
print("Lukujen summa:", summa)

Ohjelman esimerkkisuoritus:

Esimerkkitulostus

Ensimmäinen luku: 5 Toinen luku: 21 Kolmas luku: 7 Lukujen summa: 33

Ohjelma käyttää nyt neljää muuttujaa. Tässä tilanteessa tultaisiin toimeen myös vähemmällä:

summa = 0

luku = int(input("Ensimmäinen luku: "))
summa = summa + luku

luku = int(input("Toinen luku: "))
summa = summa + luku

luku = int(input("kolmas luku: "))
summa = summa + luku

print("Lukujen summa:", summa)

Nyt kaikki käyttäjän syötteet luetaan muuttujaan luku, jonka arvolla kasvatetaan muuttujan summa arvoa joka kerta sen jälkeen kun käyttäjältä on saatu uusi syöte.

Seuraava komento siis kasvattaa muuttujassa summa olevaa arvoa muuttujan luku arvolla:

summa = summa + luku

Eli esimerkiksi jos ennen komentoa summa on 3 ja luku on 2, niin komennon suorittamisen jälkeen muuttujan summa arvona on 5.

Koska muuttujan arvon kasvattaminen on usein tarvittava toiminto, voimme kirjoittaa sen myös lyhyemmin näin:

summa += luku

Tämän avulla saamme kirjoitettua ohjelman koodin tiiviimmin:

summa = 0

luku = int(input("Ensimmäinen luku: "))
summa += luku

luku = int(input("Toinen luku: "))
summa += luku

luku = int(input("kolmas luku: "))
summa += luku

print("Lukujen summa:", summa)

Itse asiassa apumuuttujaa luku ei välttämättä tarvita ollenkaan. Käyttäjän antamat syötteet voitaisiin lisätätä yksi kerrallaan muuttujaan summa myös seuraavasti:

summa = 0

summa += int(input("Ensimmäinen luku: "))
summa += int(input("Toinen luku: "))
summa += int(input("Kolmas luku: "))

print("Lukujen summa:", summa)

Riippuu toki tilanteesta, montako muuttujaa ohjelmassa tarvitaan. Jos käyttäjän kaikkien syötteiden arvo tulee muistaa, ei ole mahdollista "uusiokäyttää" samaa apumuuttujaa kaikkien syötteiden lukemiseen. Näin on seuraavassa esimerkissä:

luku1 = int(input("Ensimmäinen luku: "))
luku2 = int(input("Toinen luku: "))

print(luku1, "+", luku2, "=", luku1 + luku2)
Esimerkkitulostus

Ensimmäinen luku: 2 Toinen luku: 3 2 + 3 = 5

Toistaalta tässä ohjelmassa ei ole omaa muuttujaa summan arvon tallettamiseen.

Kannattaa kuitenkin huomata, että yhtä muuttujaa ei kannata "uusiokäyttää" kuin samankaltaisiin asioihin, esim. summattavien lukujen tilapäiseen tallentamiseen.

Esimerkiksi seuraavassa on uusiokäytetty muuttujaa tieto nimen ja iän tallentamiseen ja tämä ei ole missään nimessä järkevää:

tieto = input("Mikä on nimesi? ")
print("Hei " + tieto + "!")

tieto = int(input("Mikä on ikäsi? "))
# ohjelma jatkuu...

Parempi on siis käyttää molempaa tarkoitusta varten omaa kuvaavasti nimettyä muuttujaa:

nimi = input("Mikä on nimesi? ")
print("Hei " + nimi + "!")

ika = int(input("Mikä on ikäsi? "))
# ohjelma jatkuu...

Kertauskysely tämän osan asioihin liittyen:

:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.

Seuraava osa: