Tee Eclipsessä uusi projekti, jonka nimi on tehtava7_1. Luo sitten tähän projektiin moduuli, jonka nimi on esimerkiksi "hintavertailu".
Tekstitiedostoon on kerätty lähikauppojen eväsleipien hintoja. Alla on annettu kurssimateriaalin esimerkin mallin mukaan kirjoitettu koodi, joka lukee tiedostosta hintoja yksi kerrallaan ja laskee näiden hintojen keskiarvon. Muokkaa koodia siten, että se laskeekin ja tulostaa keskiarvon sijaan sen, kuinka moni hinnoista riittää käyttäjän eväsleipäbudjettiin eli on pienempi tai yhtäsuuri kuin käyttäjän antama arvo. Jos tiedostossa ei ole annettu yhtään hintaa, ohjelma tulostaa tekstin
Yksikaan tuote ei sovi X euron budjettiin.jossa X tulostetaan kahden desimaalin tarkkuudella.
Euroina annetut hinnat on tallennettu tekstitiedostoon niin, että kukin hinta (yksi desimaaliluku) on tallennettu omalle rivilleen. Rivillä ei ole mitään muuta tietoa. Voit katsoa mallia tiedoston muodosta tiedostoista hinnat1.txt, hinnat2.txt ja vähän virheellisestä tiedostosta hinnat3.txt. Tallenna nämä tiedostot samaan projektiin (hakemistoon) ohjelmakoodisi kanssa ohjelmasi testaamista varten. (Ohjelmasi pitää kuitenkin toimia myös muilla tiedostoilla kuin näillä kolmella.)
Kopioi seuraava ohjelma mooduuliisi ja muokkaa sitä tehtävänannon ohjeiden mukaisesti:
def main(): name = input("Minka nimisesta tiedostosta lahtotiedot luetaan?\n") total = 0.0 count = 0 try: pricefile = open(name, "r") for line in pricefile: line = line.rstrip() price = float(line) total += price count += 1 pricefile.close() if count == 0: print("Tiedostossa ei ollut yhtaan hintaa.") else: avg = total / count print("Hintojen keskiarvo on", avg) except OSError: print("Tiedoston {:s} lukemisessa tuli virhe. Ohjelma paattyy.".format(name)) except ValueError: print("Tiedostossa {:s} on virheellinen luku. Ohjelma paattyy".format(name)) main()
Jos tiedoston lukemisessa tapahtuu virhe (esimerkiksi haluttua tiedostoa ei ole olemassa), ohjelma ilmoittaa virheestä tiedoston lukemisessa ja lopettaa toimintansa. Jos tiedoston jollain rivillä on jotain muuta kuin yksi desimaaliluku, ohjelma tulostaa ilmoituksen virheellisestä rivistä ja lopettaa toimintansa. Katso tarkemmin ohjelman kolmannesta ja neljännestä suoritusesimerkistä, millaisia virheilmoitusten pitää olla eri tilanteissa.
Käytännössä virheiden käsittely menee oikein, jos et muuta siitä huolehtivaa osaa valmiina annetussa ohjelmassa.
Ennen ohjelman palautusta A+:aan testaa ohjelmaasi ajamalla sitä itse ja
käyttämällä eri luettavia tiedostoja (voit tehdä niitä helposti myös itse Eclipsessä
valitsemalla projektin tehtava7_1 ja sen jälkeen valikosta File->New->File.
Anna tallennettaessa sellainen tiedoston nimi, joka päättyy .txt). Palauta A+:aan
tiedosto hintavertailu.py
.
[ohjelman suoritus alkaa] Minka nimisesta tiedostosta lahtotiedot luetaan? hinnat1.txt Mika on budjettisi evasleivalle euroissa? 3.8 5 tuotetta sopii 3.80 euron budjettiin. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, yksikään hinnoista ei ole alle pyydetyn hinnan] Minka nimisesta tiedostosta lahtotiedot luetaan? hinnat2.txt Mika on budjettisi evasleivalle euroissa? 2.50 Yksikaan tuote ei sovi 2.50 euron budjettiin. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, tiedostossa virheitä] Minka nimisesta tiedostosta lahtotiedot luetaan? hinnat3.txt Mika on budjettisi evasleivalle euroissa? 4.6 Tiedostossa hinnat3.txt on virheellinen luku. Ohjelma paattyy. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa, tiedostoa ei löydy tai sen lukeminen ei onnistu] Minka nimisesta tiedostosta lahtotiedot luetaan? tuntematon.txt Tiedoston tuntematon.txt lukemisessa tuli virhe. Ohjelma paattyy. [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomautus: ei tulosteta