Ohjelmoinnin peruskurssien laaja oppimäärä

Koko: px
Aloita esitys sivulta:

Download "Ohjelmoinnin peruskurssien laaja oppimäärä"

Transkriptio

1 Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Poikkeukset, tiedostot ja tietovirrat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista)

2 Sisältö 1 Poikkeukset 2 Poikkeusten käsittely 3 Tietovirrat

3 (ei-laajan kurssin kalvo: luento 4 sivu 2) Poikkeukset Ohjelmassa on lähes aina lukuisia kohtia, joissa yritetty toimenpide voi tavalla tai toisella epäonnistua. Hyvän ohjelman tulisi käyttäytyä jollain tapaa mielekkäästi silloinkin, kun jokin menee pieleen Ohjelma ei saisi kaatua kuin äärimmäisessä hädässä Esimerkkejä poikkeukseen johtavista toimista: Yritetään jakaa nollalla Tiedostoa, jota yritetään lukea, ei ole olemassa tai siihen ei ole lukuoikeuksia Yritetään hakea listasta indeksillä, jota ei ole Yritetään muuntaa merkkijono luvuksi, vaikka se ei ole lukuarvoksi kelpaava ('kissa') Tietokoneen muisti loppuu kesken Joku ohjelman luokkatiedostoista on tuhoutunut tai siihen ei pääse 11:36 käsiksi

4 (ei-laajan kurssin kalvo: luento 4 sivu 3) Mihin poikkeuksia käytetään? Usein poikkeustilanteeseen ei voida reagoida mielekkäästi juuri siellä (siinä metodissa), missä poikkeustilanne syntyy. Esimerkiksi mitä int()-funktion pitäisi tehdä, jos sen parametri on kelvoton? Metodin yleishyödyllisyys laskisi ratkaisevasti, jos se itse päättäisi. Metodin palautusarvoa käytetään joskus erikoistilanteiden kuvaamiseen mutta sillä on rajoituksensa. Metodi palauttaa listan pienimmän arvon. Entä jos lista on tyhjä? Poikkeusten käsittely Pythonissa perustuu siihen, että on mahdollista nostaa poikkeus (raise an exception), eli välittää poikkeustilanneilmoitus eteenpäin sellaisen ohjelmakohdan huoleksi, joka määrittelee, miten poikkeustilanne selvitetään Ellei metodi voisi nostaa poikkeusta, jouduttaisiin erikoistilanteisiin aina reagoimaan joko sen metodin sisällä, jossa ne syntyvät, tai välittämään tieto tilanteesta eteenpäin jollain vähemmän luonnollisella tavalla (paluuarvona). 11:36

5 (ei-laajan kurssin kalvo: luento 4 sivu 6) Poikkeusten nostaminen (raise) Poikkeuksen luomiseen on Pythonissa erikseen määritelty raise-käsky raise-lauseelle annetaan nostettavaksi poikkeusolio raise-lause keskeyttää ohjelman normaalin suorituksen. Suoritusta jatketaan ensimmäisestä löydetystä ohjelmakohdasta, johon on kirjattu menettely kyseisenlaisten poikkeusten käsittelyyn. if homma_ei_toiminut: Tässä luodaan poikkeusolio ja nostetaan raise SomeError('Juttu X meni pieleen') se saman tien. Nämä kaksi asiaa tehdäänkin hyvin usein yhdessä. # Näille riveille ei mennä, jos poikkeus nostettiin. # Sen sijaan hypätään sellaiseen ohjelmakohtaan, # johon on merkitty erityisiä # poikkeuksenkäsittelykäskyjä. Ei onnistunut! Sä annoit tän tehtävän, joten tiedät kai sitten mitä tälle tehdään! Poikkeuksenkäsittelijärakennetta katsotaan tarkemmin kohta. Tavallisesti tällaista poikkeuksenkäsittelijärakennetta ei löydy samasta metodista raise-lauseen kanssa. Tällöin poikkeus nostetaan ylöspäin, eli ohjelman suoritus keskeytyy kokonaan ja poikkeukselle lähdetään etsimään käsittelijää kutsuvasta metodista. 11:36

6 (ei-laajan kurssin kalvo: luento 4 sivu 7) Poikkeusten eri lajit Luokasta Exception on tarkoitus periä erilaisia poikkeustapauksia kuvaavia luokkia. Tämä mahdollistaa eri poikkeusten erottemisen, jos jostain toiminnasta voisi syntyä erilaisia poikkeustilanteita. Lisäksi poikkeusoliot voivat erota muutenkin kuin nimeltään. Monet moduulit määrittelevät omia poikkeuksia, jotka raportoivat moduulin funktioissa sattuneista virheistä. Kun tarkoitukseen räätälöityä poikkeusluokkaa ei ole valmiina, on sellainen helppo periyttää Exception-luokasta, tai jostain muusta. Sellainenkin Exception-luokan aliluokka, joka ei määrittele mitään uusia toimintoja voi hyvin olla perusteltu. Pelkästään tieto siitä, että kyseessä on Exceptionin alityyppi, jota on tarkoitus käyttää tietynlaisissa poikkeustilanteissa, on hyödynnettävissä. 11:36

7 (ei-laajan kurssin kalvo: luento 4 sivu 8) Oma poikkeustyyppi Pyritään laatimaan luokalle Opiskelija alustusmetodi, jolle voi antaa parametrina merkkijonon muotoa Teemu Teekkari ja joka alustaa opiskelijaolion kentät tästä merkkijonosta saamiensa tietojen perusteella. (Tämä esimerkki on hieman keinotekoinen. mutta voisi kenties olla perusteltavissa esim. jos tiedettäisiin opiskelijaolioita haluttavan luoda sellaisten tekstitiedostojen perusteella, joissa opiskelijoiden tietoja olisi tallennettu riveittäin em. tavalla esitettyinä.) opiskelija = Opiskelija('Teemu Teekkari 12345') print opiskelija.kerro_opiskelijanumero() 11:36

8 (ei-laajan kurssin kalvo: luento 4 sivu 9) init metodi ja poikkeus Mitä jos alla esitetty alustusmetodi saakin parametrinaan vaikkapa kissa tai vain Teemu Teekkari? Alustusmetodilla ei edes ole palautusarvoa, jota käyttää viestintään ja tavallisen metodinkin tapauksessa parempi ratkaisu voisi olla poikkeusolioiden käyttö class Opiskelija(object): def init (self, data): osat = data.split() self.etunimi = osat[0] self.sukunimi = osat[1] self.opiskelijanumero = osat[2] def kerro_opiskelijanumero(self): return self.opiskelijanumero Merkkijonolle on split-metodi, joka jakaa merkkijonon osiin käyttäen annettua parametria erottimena (oletus=tyhjä) 11:36

9 (ei-laajan kurssin kalvo: luento 4 sivu 10) Oma poikkeustyyppi Kehitetään edelliselle esimerkille oma poikkeustyyppi Peritään luokasta Exception class VirheellinenOpiskelijadata(Exception): def init (self, kuvausviesti, virhedata): super(virheellinenopiskelijadata, self). init (kuvausviesti) self.virhedata = virhedata def kerro_virheellinen_data(self): return self.virhedata Tallennetaan kaikkiin tämäntyyppisiin poikkeuksiin Kuvausviestin lisäksi tieto siitä, mikä virheen aiheuttanut datamerkkijono oli. 11:36

10 (ei-laajan kurssin kalvo: luento 4 sivu 11) Nostetaan poikkeus Katsotaan aluksi, vaikuttaako data oikealta. Ellei, nostetaan poikkeus. def init (self, data): osat = data.split() if len(osat)!= 3: viesti = 'Opiskelijadatassa ei ollut tasan kolmea osaa.' raise VirheellinenOpiskelijadata(viesti, data) self.etunimi = osat[0] self.sukunimi = osat[1] self.opiskelijanumero = osat[2] Nämä sijoitukset voidaan suorittaa turvallisesti tietäen, että dataa riittää. (Mikään ei kuitenkaan takaa, että annettu data on järkevää) Koska samaan metodiin ei ole merkitty rakennetta, joka käsittelisi poikkeuksen, tulee poikkeus nostetuksi ulos kutsujametodille ja tämän metodin suoritus päättyy raise-lauseeseen. (Uutta opiskelija-oliota ei synny) 11:36

11 Sisältö 1 Poikkeukset 2 Poikkeusten käsittely 3 Tietovirrat

12 (ei-laajan kurssin kalvo: luento 4 sivu 12) Poikkeuksiin reagoiminen Jos jokin metodi kutsuu toista metodia, joka voi nostaa poikkeuksen, on kutsuvan metodin koodiin erikseen merkittävä, miten se suhtautuu tähän mahdollisuuteen. Vaihtoehdot ovat: käsittely: reagoin suorittamalla nämä ja nämä koodirivit eteenpäin syöttäminen: reagoin välittämällä homman muiden ohjelman osien huoleksi. No, okei, tää on mun homma. Python ei pakota poikkeusten käsittelyyn, joten pitää olla tarkkana Vrt. palautusarvojen käyttö erikoistilanteista tiedottamiseen. En minäkään tiedä mitä sille tehdään! Hoida sinä siellä! Huomattava osa käytössä olevien ohjelmien bugeista johtuu siitä, ettei erilaisiin erikoistilanteisiin ole varauduttu huolella. 11:36

13 (ei-laajan kurssin kalvo: luento 4 sivu 13) Poikkeusten käsittely Metodi, joka kutsuu poikkeuksen mahdollisesti nostavaa metodia, voi ilmoittaa itse hoitelevansa eli sieppaavansa (engl. catch) syntyvät poikkeukset (tai ainakin tietyntyyppiset poikkeukset). Tämä toteutetaan try-except-lauseella: yritän tehdä nämä hommat, mutta jos niitä suorittaessa jokin menee pieleen, niin sieppaan poikkeusolion ja katson mitä sillä teen. try: Koodia, jonka ainakin yhdestä kohdasta kutsutaan poikkeuksen mahdollisesti nostavaa metodia. except jonkintyyppinen poikkeus: Koodia, jonka suorittamalla reagoidaan tällaiseen poikkeukseen. except toisenlainen poikkeus: Koodia, jonka suorittamalla reagoidaan tähän toisenlaiseen poikkeukseen. Jne. Jos jostain try-lohkossa kutsutusta metodista nostetaan poikkeus, hypätään loppuosa lohkosta ohi ja siirrytään except-lohkoon. Jos try-lohkon suoritus onnistuu mutkitta, ei mitään except-lohkoa suoriteta. catch-lohkoja voi olla usealle eri poikkeustyypeille. Usein yksikin riittää. Kun jonkin lohkoista loppu saavutetaan, jatkuu ohjelman suoritus tavalliseen tapaan try-except-lauseen jälkeisiin lauseisiin. 11:36

14 (ei-laajan kurssin kalvo: luento 4 sivu 14) Try-except esimerkki Yritetään luoda uusi opiskelijaolio ja tulostaa sen opiskelijanumero Opiskelijaluokan init voi nostaa poikkeuksen. Varautumiseen on syytä. Sijoitetaan lauseet trylohkoon. Jos init nostaa poikkeuksen, ei tulostuslausetta suoriteta, vaan hypätään exceptosioon. Tämä lohko sieppaa luokan VirheellinenOpiskelijadata olioita (mahdollisten aliluokkien ilmentymät mukaan lukien). Kun lohko aktivoituu ja sieppaa poikkeuksen, sijoittuu nostettu olio automaagisesti paikalliseen muuttujaan (tässä nimeltä dataongelma), jonka käyttöalueena on except-lohko. Vrt. metodien parametrit. try: opiskelija = Opiskelija('Teemu Teekkari12345') print opiskelija.kerro_opiskelijanumero() except VirheellinenOpiskelijadata as dataongelma: opiskelija = None print dataongelma.message print 'Virheellinen datarivi oli ' \ + dataongelma.kerro_virheellinen_data()\ + '.' Kuvausviesti saadaan Exception- luokasta perityllä messagemuuttujalla. Opiskelijadatassa ei ollut tasan kolmea sanaa. Virheellinen datarivi oli Teemu Teekkari :36

15 Toinen tryexcept -esimerkki Esimerkkikoodi ja sen tulostus except.py def f(x): if x == 0: raise Exception('foo') return x + 10 z = 2 try: y = f(1) x = f(0) except Exception as e: print e z = 3 pass # foo print "y = " + repr(y) # y = 11 print "z = " + repr(z) # z = 3 print "e = " + repr(e) # e = Exception('foo',) print "x = " + repr(x) # virhe

16 (ei-laajan kurssin kalvo: luento 4 sivu 15) print_exc -metodi Luokan traceback metodi print_exc tulostaa luettelon, josta käy ilmi, minkä metodien kutsujen seurauksena poikkeustilanne on syntynyt. Tulostuu poikkeusta luotaessa tallennettu kutsupino (engl. call stack). print_exc ja message-metodia sekä muita kyseiselle poikkeustyypille määriteltyjä metodeita käyttäen voidaan edesauttaa virheiden etsintää ohjelmasta. Eräs poikkeuksien vahvuuksista on se, että niillä voi kätevästi välittää kuvauksia ja lisätietoja ongelmatilanteista. from traceback import print_exc try: opiskelija = Opiskelija('Teemu Teekkari12345') print opiskelija.kerro_opiskelijanumero() except VirheellinenOpiskelijadata as dataongelma: opiskelija = None print_exc() File opiskelija_trace_back.py", line 30, in <module> opiskelija = Opiskelija('Teemu Teekkari12345') File opiskelija_trace_back.py", line 20, in init raise VirheellinenOpiskelijadata(viesti, data) VirheellinenOpiskelijadata: Opiskelijadatassa ei ollut tasan kolmea osaa. 11:36

17 (ei-laajan kurssin kalvo: luento 4 sivu 16) Poikkeuksen siirtäminen eteenpäin Metodi, joka kutsuu poikkeuksen mahdollisesti nostavaa metodia, voi käsittelemisen sijaan suhtautua kutsumastaan metodista nostettuihin poikkeuksiin passiivisemminkin ja siirtää ne (tai ainakin tietyntyyppiset niistä) eteenpäin sitä itseään kutsuneelle metodille. Tämä edellinen kutsuja voi sitten puolestaan jälleen joko käsitellä poikkeuksen tai siirtää sen yhä aikaisemmalle tasolle kutsujen sarjassa. Eteenpäin siirtäminen tapahtuu automaattisesti, jos poikkeus jätetään käsittelemättä. Funktio main vain siirtää VirheellinenOpiskelijadata-poikkeuksia, eikä itse määrittele niille käsittelytapaa. def main(): opiskelija = Opiskelija('Teemu Teekkari12345') print opiskelija.kerro_opiskelijanumero() Jos Opiskelijan init nostaa poikkeuksen, keskeytyy funktion suoritus Opiskelija(...) -kutsuun samaan tapaan kuin jos siinä kohdassa olisi raise-lause. init :n luoma poikkeusolio siirretään ulos myös main-funktiosta. 11:36

18 (ei-laajan kurssin kalvo: luento 4 sivu 18) Poikkeuksen siirtäminen ulos ohjelmasta Poikkeuksen siirtäminen ulos metodista on ongelmanratkaisun siirtämistä tuonnemmaksi. Jossakin on lopulta ilmoitettava, miten pulmaan reagoidaan tai ohjelman suoritus ei voi jatkua. Poikkeuksen voi periaatteessa siirtää aina ohjelman käynnistyskäskyyn saakka. Myös käynnistysmoduuli voi siirtää poikkeuksen, mutta tällöin vastaanottajaksi jää loppujen lopuksi enää käynnistysmoduulia tulkkiohjelman välityksellä kutsunut ohjelman käyttäjä, jonka syliin ongelma kippautuu. Tämä johtaa normaalisti ohjelman (säikeen) kaatumiseen ja virtuaalikoneen tulostamaan poikkeustilanneilmoitukseen. Erittäin huonoa tyyliä 11:36

19 Useita except-lohkoja Kun try-lohkon perässä on useita exceptlohkoja siirtyy suoritus poikkeuksen sattuessa ensimmäiseen lohkoista, jonka tyyppiä heitetty poikkeus on. vain yksi except-lohko suoritetaan jos mahdolliset poikkeukset ovat keskenään hyvin erilaisia ei järjestyksellä ole väliä jos sen sijaan jokin poikkeustyyppi on toisen tyypin aliluokka, tulee aliluokan käsittelevä except-lohko sijoittaa ensin. Jos näin ei tee, käsittelee yliluokan tyyppinen lohko kaikki aliluokallekin kuuluvat poikkeukset (tai itse asiassa kääntäjä kieltäytyy yhteistyöstä) Tähän törmää usein tietovirtojen käsittelyssä (käytännön esimerkki maanantaina) 11:36 (ei-laajan kurssin kalvo: luento 4 sivu 19)

20 try:n else ja finally try:ssa voi olla exceptien lisäksi myös else- ja finally-osat else-osa suoritetaan try-osan jälkeen jos poikkeusta ei tullut finally-osa suoritetaan lopuksi kaikissa tilanteissa (myös jos try-osa esim. palaa returnilla) yleensä finally:a käytetään erilaisten resurssien vapauttamiseen (suljetaan tiedosto tai tietokantayhteys, vapautetaan lukitus, jne.) finally siis ajetaan myös jos try-osasta tulee poikkeus monissa muissa kielissä on samankaltaiset try, except ja finally, sen sijaan else on Pythonin erikoisuus except on joskus nimeltään catch ja raise:n nimi voi olla throw (esim. Javassa)

21 Poikkeukset kontrollirakenteena periaatteessa poikkeuksilla voisi toteuttaa muutaman muun kontrollirakenteen: break silmukasta (tryexcept silmukan ympärille) return funktiosta tai metodista (tryexcept funktion rungon ympärille) käytännössä koodin selkeyden ja tehokkuuden vuoksi ei kannata yleinen käytäntö: poikkeus kuvaa poikkeuksellista tilannetta tai virhettä, ei tavanomaista suorituksen etenemistä joskus harvoin poikkeuksia käytetään myös muuten: esimerkiksi monimutkaisesta rekursiosta voi hypätä pois poikkeuksella poikkeuskäsittelijät ovat dynaamisesti sidottuja eli raise siirtyy kutsupinossa (ei siis raise:a ympäröivässä koodissa) sisimpänä olevaan except:iin

22 Poikkeusten toteuttaminen miten poikkeukset oikeasti toimivat? poikkeus hyppää aina ylöspäin kutsupinossa tai ulommas funktion sisällä ei koskaan paikkaan, jonka sisällä ei tällä hetkellä olla (paitsi tietysti except-lohkon sisään) poikkeusten toteutus voisi olla: pidetään kirjaa kutsupinosta ja koodin sisäkkäisistä rakenteista (tätä toki tehdään muutenkin kuin poikkeuksia varten) poikkeus purkaa osan näistä (samoin kuin myöhemmin tehtäisiin, jos poikkeusta ei olisi tullut) ja asettaa ohjelman tilaan tiedon poikkeuksesta tryexcept tarkistaa koodinsa suorittamisen jälkeen, onko joku asettanut tiedon poikkeuksesta (jos ei, hyppää except:ien yli, suorittaa else:n ja jatkaa) kutsupinoa purkaessa (sekä normaalisti että poikkeuksessa) suoritetaan finally-lohkot; tiedon niistä voi säilyttää pinossa

23 Sisältö 1 Poikkeukset 2 Poikkeusten käsittely 3 Tietovirrat

24 (ei-laajan kurssin kalvo: luento 5 sivu 2) Perustietovirrat Tietovirrat (streams) ovat rakenteita, joita käytetään tiedonsiirtoon ohjelman ja sen ulkopuolisen maailman välillä Virran pää on usein levyllä oleva tiedosto, verkkoyhteys, näppäimistö... Tietovirtoja voidaan tietenkin käyttää myös ohjelman sisäiseen tiedonsiirtoon. Tietovirta piilottaa kaikki allaolevan kohteen erikoisominaisuudet tarjoten joukon perusominaisuuksia joilla siihen voidaan kirjoittaa ja lukea dataa. kirjoitus luku (ja tarvittaessa luettavan odottaminen) virran sulkeminen Tämä abstraktio ei ole pelkästään Pythonille ominainen, vaan löytyy monista eri ohjelmointikielistä 14:58

25 (ei-laajan kurssin kalvo: luento 5 sivu 4) Perustietovirrat Pohjimmiltaan tietovirta on tavujen jono, johon voidaan kirjoittaa tavuja, ja josta nämä tavut myöhemmin voidaan lukea samassa järjestyksessä Pythonissa tietovirtoja käsittelee esimerkiksi moduuli io ja sen luokat (IOBase ja aliluokat) Moduulista löytyy myös luokat tekstivirroille: TextIOBase ja aliluokat Riipumatta tyypistä, tietovirta pitää ensin avata open(file, mode='r', buffering=-1) fi le virran nimi mode tyyppi: luettavaksi = 'r', kirjoitattavaksi = 'w' buffering puskurointi ei käytössä (0), rivipuskurointi (1), puskurin koko (n) 14:58

26 (ei-laajan kurssin kalvo: luento 5 sivu 5) Tulostus write-metodien avulla voidaan tulostaa tietovirtoihin, joissa liikkuva data koostuu tavuista. Metodi write tulostaa tietovirtaan annetut tavut tai yhden bytearray olion. write(b) Kun kirjoittaminen tietovirtaan lopullisesti päättyy, täytyy tietovirta sulkea kutsumalla metodia close(), jotta varatut järjestelmäresurssit saadaan vapautettua ja tietovirran toista päätä voidaan informoida tiedonsiirron päättymisestä. close() Sulkee tulostusvirran ja vapauttaa varatut resurssit 14:58

27 (ei-laajan kurssin kalvo: luento 5 sivu 6) Tulostus (flush) Pelkkä tulostaminen tietovirtaan ei ole tae siitä, että tulostettu tieto siirtyisi välittömästi tietovirtaan. Jotta tulostaminen olisi tehokkaampaa, käytetään monesti puskureita, joilla joukko pienempiä tulostusoperaatiota saadaan suoritettua harvemmin suoritettuina suurempina operaatioina. Puskuroiduissa virroissa datan eteenpäin siirtyminen täytyy erikseen käskyttää. flush() fush-metodi pakottaa tulostusvirran puskurissa olevan datan siirtämisen virtaan. Usein close() suorittaa flush()-komennon ennen virran sulkemista. 14:58

28 Mitä ush tekee? kirjoituksen ush-operaatio tyhjentää lähimmän puskurin, mutta ei välttämättä vie dataa perille asti ei jää odottamaan kuittausta, että data meni perille eikä yleensä edes yritä viedä dataa kuin käyttöjärjestelmän levy- tai verkkoliikennepuskureihin asti tiedostoon kirjoitettaessa ush yleensä takaa, että muut sen jälkeen levyä lukevat ohjelmat näkevät datan levylle asti kirjoittamiseen käyttöjärjestelmät tarjoavat lisäksi operaation sync (rajapinta ohjelmointikielissä vaihtelee; Pythonissa mm. os.fsync) se yrittää tyhjentää käyttöjärjestelmän puskurit ja odottaa levyä (synchronous write eli kirjoitus tahdissa levyn kanssa) mutta valitettavasti käytännössä sekään ei aina odota lopullista kuittausta (esim. verkkolevyltä tai kovalevyn sisäisen kirjoituspuskurin tyhjentämistä) lisätietoja esim. static/wal-reliability.html

29 (ei-laajan kurssin kalvo: luento 5 sivu 7) Luku Lukuvirta on tulostusvirran vastine, johon liittyviä metodeja käytetään haluttaessa lukea tavumuotoista dataa tietovirrasta Kuten vastaava kirjoitusmetodi, on lukuvirrasta mahdollista lukea yksittäinen tavu tai joukko tavuja read(n) Lukee ja palauttaa enintään n tavua Jos n puuttuu tai negatiivinen, lukee kaikki 14:58

30 (ei-laajan kurssin kalvo: luento 5 sivu 9) Blocking Mitä tapahtuu kun virrasta yritetään lukea useampi merkki kuin mitä on tarjolla? Jos tietovirrassa ei ole lainkaan luettavaa dataa, ohjelman suoritus jää odottamaan että dataa tulee tarjolle. Tätä odotusta kutsutaan nimellä blocking Read-metodit lukevat tietovirrasta useamman kerran, jotta haluttu määrä tavuja täyttyisi 14:58

31 (ei-laajan kurssin kalvo: luento 5 sivu 11) Esimerkki def read_from_stream(stream): num_read_bytes = 1 buffer = bytearray() # Yritetään lukea maksimissaan 1024 merkkiä kerrallaan, # jos virta on suljettu, lukuoperaatio palauttaa -1 # muutoin saamme tavujonon, jonka pituus on välillä # Pituus kertoo montako merkkiä # lukuoperaatio tällä kertaa ehti lukea kunnes puskuri tyhjeni. # # silmukassa siirretään kirjoituskursoria eteenpäin luetun datan verran. while num_read_bytes!= 0: read_bytes = stream.read(1024) num_read_bytes = len(read_bytes) if num_read_bytes!= -1: buffer.extend(read_bytes) # lopuksi varmistetaan että virta suljettiin stream.close() return buffer 14:58

32 (ei-laajan kurssin kalvo: luento 5 sivu 12) Merkkijonovirrat Merkkijonovirrat eroavat tavuvirroista siinä, että niiden data koostuu tavujen sijaan merkeistä (char) TextIOBase ja sen johdannaiset ovat käteviä tekstimuotoisen datan käsittelyyn TextIOWrapper on tavuvirran päällä oleva puskuroitu tekstivirta Luokka StringIO on muistinsisäinen Unicode-tekstivirta. 14:58

33 (ei-laajan kurssin kalvo: luento 5 sivu 13) Puskuroidut virrat Luokkien BufferedReader/Writer ja TextIOWrapper tehtävä on vähentää allaolevan tietovirran tapahtumia. Jos näihin virtoihin kohdistetaan pieniä kirjoitusoperaatioita, kerätään kirjoitettua dataa puskuriin josta se siirtyy allaolevaan virtaan vasta puskurin täyttyessä. Kuvittele esim tilanne jossa kirjoitetaan kovalevyllä olevaan tiedostoon dataa merkki kerrallaan. On luonnollisesti tehokkaampaa suorittaa kirjoitus suuremmissa erissä. Halutessaan käyttäjä voi pakottaa puskurin tyhjennyksen kutsumalla metodia fush() Vastaavasti syötevirrat pyrkivät lukemaan kerralla suurempia lohkoja dataa sisään puskuriin, johon kohdistetut pienetkään operaatiot ei aiheuta suurta määrää tapahtumia allaolevassa virrassa. 14:58

34 (ei-laajan kurssin kalvo: luento 5 sivu 14) IOError Yksi syy miksi tietovirtojen lukemista ei opeteta kurssin alkupuolella on se, että melkein kaikki tietovirtoihin liittyvät metodit saattavat nostaa poikkeuksen IOError Tämän vuoksi lähes kaikki tietovirtojen kanssa tehtävä toiminta suoritetaan try-except lohkon sisällä. 14:58

35 (ei-laajan kurssin kalvo: luento 5 sivu 15) Esimerkki, näppäimistön luku import sys def main(): rivi_lukija = sys.stdin try: luettu_rivi = rivi_lukija.readline().strip() while luettu_rivi and luettu_rivi!= 'exit': print luettu_rivi.upper() luettu_rivi = rivi_lukija.readline().strip() except IOError: print u'lukeminen p\u00e4\u00e4ttyi virheeseen' 14:58

36 (ei-laajan kurssin kalvo: luento 5 sivu 17) Tiedoston luku try: tiedosto = open("esimerkki.txt", 'r') except IOError: print "Tiedostoa ei ole." exit() try: luettu_rivi = tiedosto.readline() while luettu_rivi: print luettu_rivi luettu_rivi = tiedosto.readline() except IOError: print u'lukeminen p\u00e4\u00e4ttyi virheeseen' tiedosto.close() 14:58

37 Automaattinen sulkeminen: with Kaksi tapaa lukea tiedostoa readfoo.py def readfoo(): s = 0 f = open('foo.txt', 'r') # nämä kaksi riviä try: # tai: with open('foo.txt', 'r') as f: for line in f: if line.startswith('end'): return s cols = line.split() s += int(cols[0]) * int(cols[1]) finally: # f.close() # ja nämä rivit pois return -1 Pythonin with on lyhennysmerkintä tietynlaiselle tryfinally:lle tiedostoille (open) se kutsuu close:a automaattisesti (vaikka with:n sisällä olisi tullut poikkeus) vrt. Schemen with-input-from-file with ei ole vain tiedostoille, myös mm. itse tehdyille luokille toteutus kutsuu with:lle annetun olion enter -metodia alussa ja exit -metodia lopussa

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Poikkeukset, tiedostot ja tietovirrat Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 28. 1. 2013 Sisältö 1 Poikkeukset 2 Poikkeusten

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.3.2010 1 / 44 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 26.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 26.10.2015 1 / 28 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 12: Moniperintä ja rajapinnat, poikkeukset, kontinuaatioista Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä ja Juha Sorva) 2. 2. 2011

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 14.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 14.10.2015 1 / 32 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python 15. helmikuuta 2009 Merkkijonot Yleistä Käsittely Muotoiltu tulostus Tiedostot Käsittely Lukeminen Kirjoittaminen Modulit Käyttö Seuraava luento

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista 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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 21.3.2011 1 / 42 Listan alkiona viiteitä olioihin Halutaan tehdä ohjelma ohjelmointikurssien opiskelijoiden käsittelyyn.

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 2.11.2016 CSE-A1111 Ohjelmoinnin peruskurssi Y1 2.11.2016 1 / 36 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 7.11.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 7.11.2018 1 / 37 Oppimistavoitteet: tämän luennon jälkeen Tiedät, mitä oliot ovat ja miksi niitä käytetään ohjelmoinnissa.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 22.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 22.3.2010 1 / 49 Lista luokan kenttänä Luokan kenttä voi olla myös esimerkiksi lista, sanakirja tai oliomuuttuja.

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.3.2010 1 / 49 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöteja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 1.11.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 1.11.2017 1 / 38 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python 7. helmikuuta 2009 Ohjelmoinnista Ohjelman peruselementtejä Koodin kommentointi Lohkorakenne Ohjausrakenteet If For While Try Funktiot Käyttö

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 10.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 10.2.2010 1 / 43 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 4.10.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 4.10.2017 1 / 23 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

12/20: Bitit talteen

12/20: Bitit talteen Ohjelmointi 1 / syksy 2007 12/20: Bitit talteen Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/15 Tämän luennon

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 28.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 28.9.2015 1 / 16 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 13.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 13.9.2017 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 10.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 10.10.2018 1 / 20 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten ohjelman toimintaa voi tutkia ja ohjelmassa

Lisätiedot

Ohjelman virheet ja poikkeusten käsittely

Ohjelman virheet ja poikkeusten käsittely Ohjelman virheet ja poikkeusten käsittely 17 Ohjelman virheet ja poikkeusten käsittely Poikkeukset ovat tapa ilmoittaa virheistä ja odottamattomista tilanteista C++-ohjelmassasi. Poikkeusten käyttö virheiden

Lisätiedot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Olio-ohjelmointi Virhetilanteiden käsittely

Olio-ohjelmointi Virhetilanteiden käsittely Olio-ohjelmointi 2016 Virhetilanteiden käsittely Poikkeustilanteet n Java-järjestelmässä voidaan ottaa kiinni ohjelman suoritusaikana tapahtuvia virhetilanteita, joita ei saada kiinni tavanomaisilla ohjausrakenteilla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 14.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 14.4.2010 1 / 60 Mitä tämän kurssin jälkeen? T-106.1223 Tietorakenteet ja algoritmit Y (5 op) Tietorakenteita, esim.

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Muistutus aikatauluista

Muistutus aikatauluista Muistutus aikatauluista (Nämä eivät välttämättä koske avoimen yo:n opiskelijoita Erkki Kailan rinnakkaisella kurssilla) Luento 1: kotitehtävät sulkeutuvat 20.9 12:00, ennen tutoriaalia Tutoriaali 1 sulkeutuu

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2011 1 / 53 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 14.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 14.2.2011 1 / 55 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 12.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 12.9.2018 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 11.9.2019 CS-A1111 Ohjelmoinnin peruskurssi Y1 11.9.2019 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 31.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 31.10.2018 1 / 40 Oppimistavoitteet: tämän luennon jälkeen Sinulla on peruskäsitys siitä, mitä hyvällä ohjelmointityylillä

Lisätiedot

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot