Viikko 5
OHjelmoinnin PErusteet
30.9.2024
Viikolla 4
Palautteesta:
Kurssin tehtävistä
Ohjelmointitaidon kehittyminen edellyttää vahvaa rutiinia ja myös omaa soveltavaa oivaltamista. Tämän takia kurssilla on paljon tehtäviä. Osa tehtävistä on kohtuullisen suoraviivaisesti materiaalia hyödyntäviä ja osa taas aivan tarkoituksella haastavampia soveltavia tehtäviä.
Ei kannata huolestua vaikka osa kurssin tehtävistä tuntuisikin ensiyrittämällä liian vaikealta. Kaikkia tehtäviä ei ole missään nimessä pakko tehdä, kuten arvosteluperusteet toteavat: Kurssin läpipääsyyn vaaditaan vähintään 25% jokaisen osan ohjelmointitehtävien pisteistä.
Kurssin osien tehtävät eivät etene vaikeusjärjestyksessä. Jokaisessa aliosassa esitellään yleensä muutama uusi konsepti, joita harjoitellaan sekä helpommilla että soveltavimmilla tehtävillä. Jos törmäät liian haastavan tuntuiseen tehtävään, hyppää seuraavaan. Voit palata vaikeimpiin tehtäviin osan lopuksi jos aikaa vielä jää.
Lohdutuksen sanana todettakoon että tällä viikolla mahdottomalta vaikuttava tehtävä näyttää melko varmasti neljän viikon päästä helpolta.
Muut kuin lukulistat
Listoihin voi tallentaa mitä tahansa arvoja, esimerkiksi merkkijonoja...
Muut kuin lukulistat (2)
...tai vaikka liukulukuja
Sisäkkäiset listat
Listan alkiot voivat olla myös listoja:
Matriisit
Sisäkkäiset listat ovat mainio tapa mallintaa matriisia:
Alkioihin viittaaminen
Matriisin alkioon viittaamiseen tarvitaan kaksi indeksiä
Ensimmäisellä poimitaan rivi, toisella alkio riviltä
print(m[1][1])
Alkioihin viittaaminen
Matriisin alkioon viittaamiseen tarvitaan kaksi indeksiä
Ensimmäisellä poimitaan rivi, toisella alkio riviltä
print(m[0][2])
Alkioihin viittaaminen
Matriisin alkioon viittaamiseen tarvitaan kaksi indeksiä
Ensimmäisellä poimitaan rivi, toisella alkio riviltä
print(m[2][0])
Matriisin iterointi
Matriisin voi iteroida kätevästi kahdella for-silmukalla
Yhdellä silmukalla iteroidaan rivit…
...ja tarvittaessa toisella sisäkkäisellä rivien alkiot
Alkioiden muuttaminen
Jos alkoiden arvoja halutaan muuttaa, voidaan käyttää kahta for-lausetta range-funktioilla
Viittaukset
Pythonissa kaikki muuttujat ovat viittaustyyppisiä
Muuttujan arvo on siis oikeasti viittaus olioon
Merkkijonot ovat muuttumattomia
Listat ovat muuttuvia
Listat ovat muuttuvia (2)
Listan kopiointi
Listan voi kopioida ottamalla siitä "alilistan", joka sisältää kaikki alkiot
...eli lista[0 : len(lista)]
...tai paljon helpommin lista[:]
Lista funktion parametrina
Koska parametrin arvo on viittaus, funktio voi muuttaa parametrinaan saamaansa listaa
Sivuvaikutukset
Jos funktio muuttaa listaa ilman, että tämä on funktion varsinainen tarkoitus, puhutaan funktion sivuvaikutuksesta
Sanakirja (eli dictionary)
Sanakirjassa jokainen alkio muodostuu avain-arvo-parista
Sanakirja on kätevä (ja nopea), kun halutaan tietyn avaimen perusteella hakea arvo
Alkioiden asetus
Sanakirja alustetaan aaltosulkeilla
Alkion arvon asetus joko lisää tai vaihtaa arvon
Alkioon viitataan kuten listassakin, mutta indeksin sijasta käytetään avainta
Alkioista
Sanakirjan avaimen tulee olla mutatoitumaton
Niinpä esim. lista ei käy avaimeksi
Sanakirjan iterointi
Sanakirja voidaan iteroida läpi for-silmukalla
for-lause poimii sanakirjan avaimet yksi kerrallaan
Metodi items
Jos halutaan iteroida sekä avaimet että arvot, voidaan käyttää metodia items
Alkioiden poisto
Joko del-lauseella…
tai metodilla pop
Sanakirja tiedon ryhmittelyssä
Yksittäisellä sanakirjalla voidaan yhdistää samaan asiaan liittyvää tietoa
Tuple (eli "monikko")
Listan tapainen tietorakenne
Olennaiset erot ovat
Miksi tuple?
Tuple on kokoelma toisiinsa liittyviä arvoja
Lista taas sisältää peräkkäisiä alkoita, ja sen koko (tai alkioiden järjestys) voi muuttua
Ensi viikolla
Tiedostojen lukeminen ja kirjoittaminen
Virheiden käsittely
Paikalliset ja globaalit muuttujat