Kierros 8, tehtävä 2

Sanakoe (200 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asioita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava8_2, ja tähän projektiin moduuli sanakoe. Kirjoita moduulin ohjelma, jonka avulla käyttäjä voi kuulustella itseltään vieraan kielen (tässä tapauksessa englannin, mutta kielen voi helposti vaihtaa) sanoja alla kuvatulla tavalla.

Kysyttävät sanat on tallennettu tiedostoon niin, että ensin on sana suomeksi, sen jälkeen kaksoispiste : ja tämän jälkeen sana englanniksi. Sekä suomen- että englanninkielinen sana voi sisältää myös välilyöntejä.

Ohjelma kysyy aluksi käyttäjältä, mistä tiedostosta sanat luetaan. Tämän jälkeen ohjelma kysyy käyttäjältä sanoja samassa järjestyksessä kuin ne on annettu tiedostossa. Ohjelma siis tulostaa sanan suomeksi ja pyytää käyttäjää antamaan sen englanniksi. Jos käyttäjä antaa oikean vastauksen, ohjelma tulostaa "Hyva, vastasit oikein!". Jos käyttäjän vastaus on väärä, ohjelma tulostaa "Vaarin, oikea vastaus on xxxxx.", missä xxxxx on oikea vastaus. Kun kaikki sanat on kysytty, ohjelma vielä tulostaa käyttäjälle, kuinka monta oikeaa vastausta hän antoi ja mikä oli kysymysten kokonaismäärä (katso mallia esimerkkiajosta).

Käyttäjän väärän vastauksen jälkeen ohjelman tulostama oikea vastaus annetaan siinä muodossa kuin se on tallennettu tiedostoon (esimerkiksi isot ja pienet kirjaimet ovat samoin kuin tiedostoon tallennetussa merkkijonossa). Sen sijaan vastauksia tarkistettaessa isoilla ja pienillä kirjaimilla ei saa olla merkitystä, vaan jos tiedostoon on esimerkiksi tallennettu sana "English" oikeaksi vastaukseksi, niin myös esimerkiksi vastaukset "english", "ENGLISH" ja "engLISH" hyväksytään.

Sanojen oikeellisuutta tarkastettaessa verrataan vain sitä, onko käyttäjän vastaus sama kuin tiedostossa annettu sana. Mahdollisia muita synonyymeja ei oteta huomioon.

Sanat sisältävän tiedoston on oltava samassa hakemistossa ohjelmakoodin kanssa. Voit katsoa tiedostosta sanat1.txt, millainen tiedoston on, ja tiedostosta sanat2.txt esimerkin tiedostosta, joka sisältää myös virheellisiä rivejä.

Jos käyttäjän antamaa tiedostoa ei ole tai ohjelma ei pysty muusta syystä lukemaan sitä, ohjelma tulostaa "Virhe tiedoston XXXX lukemisessa. Ohjelma paattyy." ja lopettaa toimintansa. Tulostuksessa XXXX on tiedoston nimi. Jos sen sijaan jokin tiedoston rivi on virheellinen (se ei esimerkiksi sisällä kahta toisistaan kaksoispisteellä erotettua osaa tai se sisältää useamman kuin yhden kaksoispisteen), ohjelma ilmoittaa virheellisestä rivistä (virheilmoitus sisältää myös virheellisen rivin), mutta jatkaa toimintaansa lukemalla tiedoston seuraavan rivin. Virheellistä riviä ei tällöin lasketa kysyttyjen kysymysten määrään.

Palauta Gobliniin tiedosto sanakoe.py. Testaa ohjelmasi toimintaa ennen palautusta esimerkiksi tiedostoilla sanat1.txt, sanat2.txt ja tyhja.txt. Tallenna ne samaan hakemistoon ohjelmasi kanssa. Oikea hakemisto on Unix-koneissa tyohakemisto/tehtava8_2/src/, missä tyohakemisto on Eclipsessä käyttämäsi työtilan (workspace) hakemisto.

Huomautus:Pienellä kehittelyllä ohjelmasta saa vielä selvästi käyttökelpoisemman. Sanat voi esimerkiksi tallentaa tiedostoa lukiessa sanakirjaan, jolloin niitä voi kysyä satunnaisessa järjestyksessä. Lisäksi ohjelmaa voi muokata siten, että yhdelle sanalle voi antaa useita synonyymeja (esimerkiksi kauttaviivalla toisistaan eroteltuna), jolloin tarkistuksessa riittää se, että sana on jokin annetuista synonyymeista. Näitä parannuksia ei kuitenkaan vaadita tässä tehtävässä (eikä näin paranneltu ohjelma toimi oikein Goblinin tarkistuksissa), jotta tehtävän vaatima työmäärä pysyisi kohtuullisena.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Mista tiedostosta sanat luetaan?
sanat1.txt
Anna seuraavat sanat englanniksi:
englanti (kieli)
english
Hyva, vastasit oikein!
kirja
Book
Hyva, vastasit oikein!
kirjahylly
bookcase
Vaarin, oikea vastaus on bookshelf.
luokka
CLASS
Hyva, vastasit oikein!
lampotila
tmperature
Vaarin, oikea vastaus on temperature.
kissa
caT
Hyva, vastasit oikein!
koira
dog
Hyva, vastasit oikein!
vauva
baby
Hyva, vastasit oikein!
komentoriviparametri
command line parameter
Vaarin, oikea vastaus on command line argument.
tiedosto
file
Hyva, vastasit oikein!
Koe paattyy, sait oikein 7/10.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostoa ei löydy]
Mista tiedostosta sanat luetaan?
ei_ole.txt
Virhe tiedoston ei_ole.txt lukemisessa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedosto on tyhjä]
Mista tiedostosta sanat luetaan?
tyhja.txt
Anna seuraavat sanat englanniksi:
Koe paattyy, sait oikein 0/0.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostossa virheellisiä rivejä]
Mista tiedostosta sanat luetaan?
sanat2.txt
Anna seuraavat sanat englanniksi:
opiskelija
student
Hyva, vastasit oikein!
puhelinnumero
phonenumber
Vaarin, oikea vastaus on phone number.
Virheellinen rivi: maaliskuu:March:ylimaaraista
lumi
snow
Hyva, vastasit oikein!
Virheellinen rivi: hassu rivi
henkiloauto
car
Hyva, vastasit oikein!
Koe paattyy, sait oikein 3/4.
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta