Kirjoittaja: Antti Laaksonen (2015).
Tietokoneohjelma ottaa vastaan, käsittelee ja välittää eteenpäin tietoa. Esimerkiksi käyttäjä voi antaa ohjelmalle tietoa näppäimistöltä tai ohjelma voi lukea tietoa tiedostosta tai Internetistä. Vastaavasti ohjelma voi esittää tietoa tietokoneen näytöllä tai tallentaa tietoa tiedostoon.
Tietokoneohjelman kiinnostava osa on tiedon käsittely eli miten ohjelman saamat tiedot vaikuttavat sen tuottamiin tietoihin. Esimerkiksi jos ohjelma laskee käyttäjän antamien lukujen keskiarvon, ohjelman tulokseen vaikuttavat tietysti lukujen määrä ja niiden suuruudet.
Kaikki tämän opassarjan ohjelmat ovat tekstipohjaisia. Niissä ohjelma voi tulostaa näytölle tekstiä ja lukea käyttäjältä tekstiä. Tekstipohjaisten ohjelmien etuna on yksinkertaisuus: ne sopivat hyvin ohjelmoinnin harjoitteluun.
Kaikki tietokoneen käsittelemät tiedot ovat pohjimmiltaan lukuarvoja. Kuvan sijainti näytöllä ja pelaajan pistemäärä ovat luontevasti lukuja, mutta myös tekstiä ja kuvia voi esittää lukuina: tekstissä jokaista merkkiä vastaa tietty luku, ja kuvassa jokaisen kuvapisteen väriä vastaa tietty luku.
Ohjelmoijan olisi kuitenkin hankalaa käsitellä kaikkea tietoa lukuina, minkä vuoksi ohjelmointikielissä on valmiita tietotyyppejä erilaisille tiedoille. Sopivan tietotyypin avulla ohjelmoija voi esimerkiksi käsitellä tekstiä peräkkäin olevina merkkeinä välittämättä merkkien esitystavasta tietokoneen sisällä.
Python-kielen tärkeimmät tietotyypit ovat merkkijono, kokonaisluku, liukuluku ja totuusarvo. Merkkijono tarkoittaa tekstiä, kokonaisluku ja liukuluku ovat lukuarvoja ja totuusarvo ilmaisee, pitääkö jokin asia paikkansa. Tässä oppaassa käsitellään merkkijonoja ja lukuarvoja, ja totuusarvoihin palataan seuraavissa oppaissa.
Merkkijonoja ovat esimerkiksi "abc"
, "Uolevi"
ja "kas vain!"
. Merkkijonoa ympäröivät lainausmerkit ("
) tai heittomerkit ('
). Merkkijonoja voi yhdistää +
-merkillä: "esi" + "merkki"
tarkoittaa samaa kuin "esimerkki"
.
Seuraava ohjelma tulostaa joukon merkkijonoja:
print("Ohjelma alkaa...") print("eka", "toka", "kolmas") print("esi" + "merkki") print("t" + "e" + "s" + "t" + "i") print("Ohjelma päättyy...")
Ohjelman tulostus on seuraava:
Ohjelma alkaa... eka toka kolmas esimerkki testi Ohjelma päättyy...
Kenoviivalla (\
) on erikoismerkitys merkkijonossa: Jos merkkijonon sisällä on merkki, joka myös ympäröi merkkijonoa, sen eteen täytyy kirjoittaa kenoviiva. Lisäksi merkintä \n
tarkoittaa rivinvaihtoa ja merkintä \\
tarkoittaa kenoviivaa.
Seuraava ohjelma esittelee kenoviivan käyttöä:
print("\"abc\" on merkkijono") print("eka\ntoka\nkolmas") print("c:\\python\\testi.py")
Ohjelman tulostus on seuraava:
"abc" on merkkijono eka toka kolmas c:\python\testi.py
Kokonaisluvun ja liukuluvun ero on siinä, että liukuluvussa on desimaaliosa. Kokonaislukuja ovat esimerkiksi 12
, -275
ja 32700
, ja liukulukuja ovat esimerkiksi 1.25
, 124.0
ja -9239.11
. Suurin osa ohjelmissa esiintyvistä luvuista on kokonaislukuja.
Lukuarvoilla voi laskea seuraavien laskutoimitusten ja sulkujen avulla:
merkintä | selitys | esimerkki | tulos |
---|---|---|---|
a + b | yhteenlasku | 3 + 4 | 7 |
a - b | vähennyslasku | 7 - 20 | -13 |
a * b | kertolasku | 11 * 8 | 88 |
a / b | jakolasku | 17 / 4 | 4.25 |
a // b | jakolaskun kokonaisosa | 17 // 4 | 4 |
a % b | jakojäännös | 17 % 4 | 1 |
a ** b | potenssilasku | 2 ** 5 | 32 |
Seuraava ohjelma suorittaa joukon laskutoimituksia:
print(1 + 2 + 3 + 4 + 5) print(0.01 + 12.783 * (89 - 13)) print("Vuodessa on:") print(365, "päivää") print(365 * 24, "tuntia") print(365 * 24 * 60, "minuuttia") print(365 * 24 * 60 * 60, "sekuntia") print("Jos 6 lasta saavat 45 karkkia,") print("kukin lapsi saa", 45 // 6, "karkkia") print("ja", 45 % 6, "karkkia jää yli.")
Ohjelman tulostus on seuraava:
15 971.5179999999999 Vuodessa on: 365 päivää 8760 tuntia 525600 minuuttia 31536000 sekuntia Jos 6 lasta saavat 45 karkkia, kukin lapsi saa 7 karkkia ja 3 karkkia jää yli.
Toisen laskutoimituksen tulos näyttää erikoiselta, koska liukuluvut eivät ole aivan tarkkoja ja laskussa tapahtuu pyöristysvirhe.
Muuttuja on tietokoneen muistissa oleva kohta, johon ohjelma voi tallentaa tietoa myöhempää käyttöä varten. Muuttujan nimi on tunnus, jolla muuttujaan viitataan, ja muuttujan arvo tarkoittaa muuttujan sisältöä. Muuttujassa voi olla merkkijono, lukuarvo tai jonkin muun tyyppistä tietoa.
Muuttujalle annetaan aluksi arvo =
-merkinnällä. Tämän jälkeen muuttujan arvoa voi käyttää myöhemmin ohjelmassa tai muuttujalle voi antaa uuden arvon. Muuttujan nimi on ohjelmoijan päätettävissä, ja hyvä nimi kertoo, mitä muuttuja sisältää. Muuttujan nimessä voi olla kirjaimia, numeroita ja alaviivoja, mutta se ei saa alkaa numerolla.
Seuraava ohjelma antaa muuttujille nimi
, vuosi
ja ika
arvot "Henrikki"
, 1672
ja 25
. Tämän jälkeen ohjelma käyttää muuttujien arvoja tulostuskomennoissa.
nimi = "Henrikki" vuosi = 1672 ika = 25 print(nimi, "on urhea ritari,") print("syntynyt vuonna", vuosi, "kaukana täältä.") print(nimi, "on tämän pelin sankari.") print("Nyt", nimi, "on", ika, "vuotta vanha,") print("eletään vuotta", vuosi + ika, "siis.")
Ohjelman tulostus on seuraava:
Henrikki on urhea ritari, syntynyt vuonna 1672 kaukana täältä. Henrikki on tämän pelin sankari. Nyt Henrikki on 25 vuotta vanha, eletään vuotta 1697 siis.
Muuttujan arvon voi kysyä käyttäjältä funktiolla input
. Seuraava ohjelma toistaa käyttäjän nimen ja kolmesti hänen viestinsä.
nimi = input("Nimi: ") viesti = input("Viesti: ") print(nimi, "sanoo:") print(viesti) print(viesti) print(viesti)
Ohjelman tulostus voi olla seuraava:
Nimi: Antti Viesti: Python on hauskaa! Antti sanoo: Python on hauskaa! Python on hauskaa! Python on hauskaa!
Seuraava ohjelma toistaa käyttäjän nimen ensin kerran, sitten kahdesti ja lopuksi neljästi. Esimerkiksi jos käyttäjän nimi on Antti, muuttujan nimi
arvo on ensin "Antti"
, sitten "AnttiAntti"
ja lopuksi "AnttiAnttiAnttiAntti"
.
nimi = input("Nimi: ") print(nimi) nimi = nimi + nimi print(nimi) nimi = nimi + nimi print(nimi)
Ohjelman tulostus voi olla seuraava:
Nimi: Antti Antti AnttiAntti AnttiAnttiAnttiAntti
Funktion tehtävänä on palauttaa arvo sille annettujen tietojen perusteella. Seuraavassa ohjelmassa funktio len
kertoo merkkijonon merkkien määrän:
print("Merkkien määrä:", len("python"))
Ohjelman tulostus on seuraava:
Merkkien määrä: 6
Tässä tapauksessa funktio len
ottaa vastaan merkkijonon ja palauttaa sen merkkien määrän.
Joskus funktion palautusarvoon vaikuttavat muutkin asiat kuin sille annetut tiedot. Esimerkiksi funktio input
palauttaa käyttäjän kirjoittaman tekstin merkkijonona.
Tässä on muutamia hyödyllisiä Python-kielen funktioita:
funktio | toiminta |
---|---|
len | laskee merkkijonon merkkien määrän |
int | muuttaa arvon kokonaisluvuksi |
float | muuttaa arvon liukuluvuksi |
str | muuttaa arvon merkkijonoksi |
round | pyöristää luvun halutulle tarkkuudelle |
abs | laskee luvun itseisarvon |
Funktiot int
, float
ja str
ovat tarpeellisia, koska luvuille ja merkkijonoille voi tehdä erilaisia asioita. Esimerkiksi +
-merkintä laskee lukuja yhteen tai liittää merkkijonoja toisiinsa. Funktiolle len
voi antaa vain merkkijonon, kun taas funktiolle abs
voi antaa vain luvun.
Seuraava ohjelma laskee kertolaskun ja ilmoittaa, kuinka monta numeroa tuloksessa on.
eka = int(input("Anna 1. luku: ")) toka = int(input("Anna 2. luku: ")) tulo = eka * toka print("Lukujen tulo:", tulo) print("Numeroita:", len(str(tulo)))
Ohjelman tulostus voi olla seuraava:
Anna 1. luku: 1832 Anna 2. luku: 5755 Lukujen tulo: 10543160 Numeroita: 8
Funktion input
palauttamat merkkijonot täytyy muuttaa kokonaisluvuiksi, jotta kertolasku voidaan suorittaa. Lopuksi laskun tulos taas täytyy muuttaa merkkijonoksi, jotta sen numeroiden määrän laskeminen onnistuu.
Seuraava ohjelma laskee tuotteen alennetun hinnan:
hinta = float(input("Alkuperäishinta: ")) alennus = float(input("Alennusprosentti: ")) hinta = hinta - hinta * (alennus / 100) print("Alennushinta:", round(hinta, 2))
Ohjelman tulostus voi olla seuraava:
Alkuperäishinta: 78 Alennusprosentti: 12 Alennushinta: 68.64
Ohjelma käsittelee lukuja liukulukuina, koska hinnat ja alennusprosentti eivät ole välttämättä kokonaislukuja. Funktio round
pyöristää alennushinnan kahden desimaalin tarkkuudelle.
Esimerkissä merkkijonoista
on tälläinen:
print("esi" + "merkki")
miksi käyttää plusmerkkiä, kun sama tulos tulee ilmankin?
Tombatshivo: Esimerkin tarkoitus on näyttää, että merkkijonojen kohdalla plusmerkki yhdistää jonot, mikä on tärkeää, koska monissa muissa kielissä plusmerkki ei toimi merkkijonoilla. Kuten olet huomannut, kahden valmiiksi kirjoitetun merkkijonon välissä ei ole tarvetta käyttää plusmerkkiä. Jos kuitenkin arvot ovat muuttujissa, plusmerkki on yhdistämisessä tarpeen.
Metabolix kirjoitti:
Tombatshivo: Esimerkin tarkoitus on näyttää, että merkkijonojen kohdalla plusmerkki yhdistää jonot, mikä on tärkeää, koska monissa muissa kielissä plusmerkki ei toimi merkkijonoilla. Kuten olet huomannut, kahden valmiiksi kirjoitetun merkkijonon välissä ei ole tarvetta käyttää plusmerkkiä. Jos kuitenkin arvot ovat muuttujissa, plusmerkki on yhdistämisessä tarpeen.
Esimerkki:
# Kysytään käyttäjältä nimeä ja tallennetaan se muuttujaan. nimi = input("Kirjoita tähän nimesi: ") # Tulostetaan muuttuja ja muuta tekstiä näytölle (Nyt + -merkkiä tarvitaan). print("Hei", nimi + "!")
Lisäys:
Ohjelman tulostus voi näyttää tältä:
Kirjoita tähän nimesi: Koodi123 Hei Koodi123!
Helppoa kuin heinänteko!
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.