Tutoriaaliläsnäoloista

Samankaltaiset tiedostot
Muistutus aikatauluista

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteet

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmointiharjoituksia Arduino-ympäristössä

1. Omat operaatiot 1.1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

7. Näytölle tulostaminen 7.1

Ohjelmoinnin perusteet Y Python

Palautetta viime luennosta

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin peruskurssi Y1

Kysymyksiä koko kurssista?

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin peruskurssi Y1

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

1. Mitä tehdään ensiksi?

5/20: Algoritmirakenteita III

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

11. Javan toistorakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin perusteet Y Python

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Osoitin ja viittaus C++:ssa

Tietojenkäsittelyn perusteet I kurssijärjestelyt. 3op tai 5op

Tieto- ja tallennusrakenteet

Ehto- ja toistolauseet

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta Toteuta Pythonilla seuraava ohjelma:

Algoritmit 2. Luento 13 Ti Timo Männikkö

Luento 5. Timo Savola. 28. huhtikuuta 2006

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Ohjelmoinnin perusteet Y Python

Tietueet. Tietueiden määrittely

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssi Y1

12. Javan toistorakenteet 12.1

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

Harjoitus 3 -- Ratkaisut

811120P Diskreetit rakenteet

Johdatus Ohjelmointiin


Ohjelmoinnin peruskurssi Y1

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Transkriptio:

Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus on vähentää sähköpostin kautta näiden käsittelyä, joka on todella aikaavievää 249

Palautteista Miksei slideja saa etukäteen? Koska niistä saadaan mukava määrä virheitä pois luennon aikana ;> Tarvitseeko muuttujat definiitissä toistossa alustaa? Ei. Tai ainakaan ohjelmoijan ei tarvitse, muuttujan hallinta hoidetaan automaattisesti Voiko muuttujan nimetä muuten kuin i:ksi? Voi: for sateenvarjo in range(100, 5252): 250

Palautteista Miksi definiittejä ja indefiniittejä lauseita opetetaan, jos indefiniitillä pärjää? Luettavuus paranee, kun käytetään tilanteeseen sopivia lauseita i = 1 while i < n: toimintoja i = i + 1 for i in range(n): toimintoja

Palautteita Miten oikea toistolause valitaan? Ei ole yhtä oikeaa toistolausetta Jos se toimii, valinta ei ollut väärä Mutta jotkin toistot näyttävät elegantimmilta (subjektiivista) Älkää stressatko, sopivat lauseet alkavat tulla luonnostaan kokemuksen kautta i = 1 while i < n: toimintoja i = i + 1 for i in range(n): toimintoja

Palautteista Älkää antako luentopalautetta, jos ette ole paikalla Vitosen voi saada ilmankin Katsokaa, että annatte tutoriaalipalautteen tutoriaaleista, ettekä luennoista 253

Päivän sisältö Lisää moduuleista Funktiot Proseduurit

Pikakertaus moduulin määrittelystä ja kutsusta Yksinkertainen moduulin määrittely: def moduulinnimi(): toimintoja Yksinkertainen moduulin kutsu: moduulinnimi()

Proseduurit ja funktiot

Moduulit ja parametrit

Moduulin parametrit Viime tutoriaalin moduulit olivat hyvin tarkkaan rajattuja Esim. käänny, liiku neljä askelta Parametrisoinnilla voidaan huomattavasti parantaa uudelleenkäytettävyyttä Esim. samankaltaisista operaatioista koostuvat toimenpiteet: Käänny oikealle, liiku 3 askelta eteenpäin, käänny vasemmalle, 5 askelta eteen Käänny oikealle, liiku 5 askelta eteenpäin, käänny vasemmalle, 2 askelta eteen Käänny oikealle, liiku 1024 askelta eteenpäin, käänny vasemmalle, 65536 askelta eteen Voitaisiin abstrahoida moduuliin: Käänny oikealle, liiku N askelta eteenpäin, käänny vasemmalle, liiku M askelta eteenpäin

Moduulin parametrit Käänny oikealle, liiku N askelta eteenpäin, käänny vasemmalle, liiku M askelta eteenpäin def kaannyjaliiku(n, m): turnright() for i in range(n): moveforward() turnleft() for i in range(m) moveforward() kaannyjaliiku(3, 5) kaannyjaliiku(5, 2) kaannyjaliiku(1024, 65536)

Moduulin parametrit Moduulin määrittelyssä olevia parametreja (edellä n) kutsutaan moduulin muodollisiksi parametreiksi Muodolliset parametrit ovat muuttujia Ne osoittavat abstraktin toiminnan osaa, joka voi olla kutsukerroilla erilainen Moduulin kutsussa nämä osat kiinnitetään tapauskohtaisilla todellisilla parametreilla (edellä esim. 1024, 65536) Prosessori korvaa ensin muodolliset parametrit todellisten parametrien arvoilla Sitten prosessori suorittaa moduulin rungon (lohkon) eli toiminnot Rungon suorittamisen jälkeen palataan sille riville, josta moduulia kutsuttiin Todelliset parametrit sisältävät moduulille välitettävän tiedon

Proseduurit ja funktiot Matemaattisesti ajateltuna moduuli on funktio jolla on m syöttöparametria n tulosta

Proseduurit ja funktiot Tulosten määrän perusteella moduulit voidaan jakaa kahteen luokkaan tietojenkäsittelytieteen kannalta: Proseduaalinen moduuli (eli proseduuri) Moduulilla ei ole tulosta (n = 0) Funktionaalinen moduuli (eli funktio) Moduulilla on yksi tulos (n = 1) Merkitys perustuu parametrien perusteella laskettuun arvoon

Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Kutsussa olevat todelliset parametrit tp1, tp2,..., tpn ovat lausekkeita, joille voidaan laskea arvot ennen moduulin suoritusta

Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Parametrien lukumäärän ja järjestyksen oltava sama kuin moduulin määrittelyssä Kutsussa olevia todellisia parametreja kutsutaan myös argumenteiksi

Moduulin kutsu parametreilla Kaikkien moduulien kutsu on muotoa: moduulinnimi(tp1, tp2,..., tpn) Esimerkkejä kutsusta: asetasalasana( aoeuhtns ) tulostaviikonpaiva(22,9,2015)

Proseduurit

Proseduraalisen moduulin määrittely Proseduraalisen moduulin yleinen muoto on: def moduulinnimi(mp1, mp2,, mpn) moduulin runko mp1, mp2,..., mpn ovat moduulin muodolliset parametrit, jotka ovat muuttujia Moduulin nimen voi valita itse nimen tulee kuvata moduulin tehtävä

Proseduraalisen moduulin määrittely Muodollisilla parametreilla ei ole arvoa ennen moduulin kutsua todellisilla parametreilla (joilla pitää olla arvo) Määrittelyä ei voi suorittaa sellaisenaan Moduuli suoritetaan vasta kutsuttaessa Todelliset parametrit välittyvät muodollisten parametrien arvoiksi summaa(5, 3) def summaa(n, m): print (n+m)

Ks. Esim 1 Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6)

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Moduulin määrittely, vielä ei suoriteta mitään kolmellajaollinen(6)

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6) Kutsu, siirrytään suorittamaan moduulia!

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Aloitetaan moduulin suoritus, todellinen parametrin luku arvo on 6. kolmellajaollinen(6)

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Suoritetaan moduulia. Nyt luku siis 6, joten ehto on tosi. kolmellajaollinen(6)

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" Suoritetaan moduulia. Tulostetaan Kolmella jaollinen. If-rakenne päättyy kolmellajaollinen(6)

Proseduraalinen moduuli - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: print Kolmella jaollinen" else: print Ei kolmella jaollinen" kolmellajaollinen(6) Moduulin toiminnot suoritettu, palataan kutsun tehneelle riville. Kutsulla kolmellajaollinen(6) moduuli tulostaa siis Kolmella jaollinen

Moduulin runko Runko koostuu lauseista, joissa viitataan muodollisiin parametreihin Muodollisilla parametreilla on moduulia suoritettaessa todellisten parametrien arvot Rungon sisäiset (paikalliset) muuttujat ja niiden arvot eivät (yleensä) näy moduulin rungon ulkopuolelle Eri moduuleissa voidaan siis käyttää saman nimisiä muuttujia

Muuttujien näkyvyys - Esimerkki def asetaluku(): luku = 3 asetaluku() print luku Virhe, muuttujaa luku ei ole määritelty moduulin ulkopuolella!

Moduulin runko - miniesimerkki def tulostasumma(a, b): summa = a + b print summa Kutsuttaessa todellisten parametrien arvot moduulin sisällä: a = 4 b = 8 a = 4 c = 8 tulostasumma(a, c)

Parametrien välityksestä Pythonissa muuttujat ovat nimiä, joihin on liitetty jokin arvo Arvo sijaitsee jossain muistissa, eikä usein voi muuttua (tyyppikohtaisesti) Esimerkkejä tällaisista tyypeistä: Kokonaisluvut, liukuluvut, merkkijonot... Eli kaikki käsitellyt Sen sijaan muuttujat voivat vaihtaa osoitettavaa arvoa, Esim: x=3 x=2 Tästä johtuen jos annamme parametrina moduuliin arvon, emme voi vaikuttaa moduulin ulkopuolella olevan muuttujan arvoon Myöhemmin näemme esimerkkejä tyypeistä, jotka voivat muuttua itsessään

Moduulin runko esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b a = 4 b = 8 eimuutaarvoja(a, b) print a, b Kutsutaan moduulia

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Aloitetaan moduulin suoritus. Todelliset parametrit a=4, b=8. a = 4 b = 8 eimuutaarvoja(a, b) print a, b

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Muutetaan paikallisen muuttujan a arvoksi 5. Moduulin ulkopuolisen a:n arvo ei muutu a = 4 b = 8 eimuutaarvoja(a, b) print a, b

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Muutetaan paikallisen muuttujan b arvoksi 16. Moduulin ulkopuolisen b:n arvo ei muutu a = 4 b = 8 eimuutaarvoja(a, b) print a, b

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Tulostetaan 5 16. a = 4 b = 8 eimuutaarvoja(a, b) print a, b

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b Suoritus palaa kutsuneelle riville. a = 4 b = 8 eimuutaarvoja(a, b) print a, b

Moduulin runko - esimerkki def eimuutaarvoja(a, b): a = a + 1 b = 2 * b print a, b a = 4 b = 8 eimuutaarvoja(a, b) print a, b Tulostetaan 4 8. Moduulin suoritus ei siis muuttanut näiden muuttujien arvoja.

Moduulin alkuehto Kaikkia moduuleja ei ole suunniteltu toimimaan kaikilla arvoilla Moduulille olisi hyvä kirjoittaa alkuehto kommenttina ennen määrittelyä Alkuehto kertoo ne olosuhteet, joissa moduuli toimii oikein Yleensä tämä tarkoittaa hyväksyttyjä parametrien arvoja Ei yleensä vaikuta moduulin suoritukseen, vaan on ohje moduulin käyttäjälle Moduuli suoritetaan myös virheellisillä parametrien arvoilla Esim. # alkuehto: n >= 0 def kertoma(n)

Funktiot

Fuktionaalisen moduulin määrittely Pythonissa funktiot määritellään samoin kuin proseduurit def moduulinnimi(mp1, mp2,,mpn): moduulin runko Funktion ainut ero on, että se palauttaa arvon moduulin rungossa

Funktion palautusarvo Funktion rungossa on oltava yksi (tai useampia) return-lauseita jolla määritellään moduulin palauttama arvo Return-lauseen yleinen muoto on: return-lause: return lauseke Päättää moduulin suorituksen Antaa moduulin kutsulle lausekkeen määräämän arvon ja Palauttaa kontrollin kutsukohtaan

Funktion palautusarvo - esimerkki def summa(a, b): return a + b Moduulin määrittely, ei vielä suoriteta. print summa(2, 5)

Funktion palautusarvo - esimerkki def summa(a, b): return a + b print summa(2, 5) Funktiota kutsutaan parametreilla 2 ja 5.

Funktion palautusarvo - esimerkki def summa(a, b): return a + b Aloitetaan funktion suoritus, todelliset parametrit 2 ja 5. print summa(2, 5)

Funktion palautusarvo - esimerkki def summa(a, b): return a + b Lasketaan a + b (eli 7) ja palautetaan arvo 7. Moduulin suoritus päättyy. print summa(2, 5)

Funktion palautusarvo - esimerkki def summa(a, b): return a + b print summa(2, 5) Suoritus palaa kutsun riville, joka tulostaa funktiokutsun palautusarvon 7.

Funktion palautusarvo - esimerkki def kolmellajaollinen(luku): if luku%3 == 0: return True else: return False Funktio palauttaa True, mikäli parametri luku on kolmella jaollinen Muuten funktio palauttaa arvon False

Funktion palautusarvo Muissa ohjelmointikielissä kirjoitetaan usein palautusarvon tyyppi moduulin määrittelyyn Esim. Javassa int jos moduuli palauttaa kokonaisluvun Pythonissa ei tarvitse määrittelyssä erottaa proseduuria ja funktiota Itse asiassa Pythonissa proseduurit ovat myös funktioita, ja proseduureja ei ole Ero on muissa ohjelmointikielissä tärkeämpi, ja siksi osana kurssia Pythonissa proseduuri, jonka suoritus päättyy ilman return-lausetta, palauttaa arvon None automaattisesti Monissa muissa kielissä funktiosta ei voi poistua ilman return-lausetta

Funktion palautusarvon käyttö - esimerkkejä Funktion palautusarvo voidaan sijoittaa muuttujaan jaollinen = kolmellajaollinen(n) Funktion totuusarvoista palautusarvoa voidaan käyttää lausekkeessa if kolmellajaollinen(n): print Kolmella jaollinen Funktiokutsu on siis lauseke!

Funktion palautusarvon käyttö Funktion palautusarvoa voidaan käyttää moduulikutsuissa print max(a, max(b, c)) Tässä ensin suoritettaisiin kutsu max(b, c) Sitten tämä arvo on a:n lisäksi toinen todellinen parametri Lopuksi tulostetaan toisen kutsun palautusarvo

Ks. Esim 2 Tulostaminen ja palauttaminen ovat eri asioita! Yleinen virhe: tulostaminen ja palauttaminen sekoitetaan print-käsky tulostaa jotain ruudulle return-lause palauttaa arvon funktion kutsujalle def tulostakolme(): print 3 def palautakolme(): return 3 a = palautakolme() a = tulostakolme() a:n arvo on tämän rivin jälkeen 3 Ja tämän rivin jälkeen None, mutta ruudulle tulostettiin 3 301

Milloin sulkeita () tarvitaan? Sulkeita tarvitaan funktion/proseduurin parametrien ympärillä määriteltäessä: def range(a, b, c): Ja kun funktiota kutsutaan: n = onkoparillinen(24) for i in range(a, b, c): Huomaa, että print ja return eivät ole funktioita, siksi niihin ei tarvita sulkeita, mutta range on 302

Modulaarisuuden edut Moduulit selkeyttävät algoritmeja ja helpottavat niiden ymmärtämistä Muiden (ja alkuperäisen kirjoittajan) helpompi muuttaa myöhemmin Helpottaa virheiden etsimistä ja oikeellisuuden toteamista Käytettäessä moduulia tarvitsee ainoastaan tietää mitä se tekee, ei miten se tehtävänsä täyttää Kerran hyvin suunniteltu ja toteutettu moduuli on käytettävissä muuallakin Lähes kaikki ohjelmointikielet sisältävät laajan kirjastot moduuleja

304