9. kodutöö
Ülesanne 1. Retseptid
Miina tegi suures koguses maasikamoosi, kuid ikka on tal üle nii maasikaid kui ka suhkrut. Ta otsib välja magustoitude retseptid ning lisab nende koostisosad faili nimega retseptid.txt nii, et igal real on vastava retsepti koostisosad eraldatud komadega.
Kirjuta programm, mis
- loeb funktsiooni failist_järjendisse abil failist retseptid kahemõõtmelisse järjendisse;
- väljastab nende retseptide koostisosad, mis kasutavad nii suhkrut kui ka maasikaid.
Näiteks võib faili retseptid.txt sisu olla
muna,suhkur,jahu,kohupiim,vahukoor,maasikad küpsised,või,toorjuust,hapukoor,jahu,suhkur,muna banaanid,maasikad,apelsinimahl,suhkur,maitsestamata jogurt või,suhkur,tume šokolaad,muna,jahu
Näide funktsiooni failist_järjendisse tööst eelneva näidisfailiga retseptid.txt:
>>> failist_järjendisse("retseptid.txt") [['muna', 'suhkur', 'jahu', 'kohupiim', 'vahukoor', 'maasikad'], ['küpsised', 'või', 'toorjuust', 'hapukoor', 'jahu', 'suhkur', 'muna'], ['banaanid', 'maasikad', 'apelsinimahl', 'suhkur', 'maitsestamata jogurt'], ['või', 'suhkur', 'tume šokolaad', 'muna', 'jahu']]
Näide programmi tööst:
>>> %Run kodu1.py Retseptid, milleks on vaja maasikaid ja suhkrut: muna, suhkur, jahu, kohupiim, vahukoor, maasikad banaanid, maasikad, apelsinimahl, suhkur, maitsestamata jogurt
Ülesanne 2. Bingo reeglite kontrollimine
Selle ülesande eesmärgiks on kirjutada programm, mis loeb failist kahemõõtmelisse järjendisse bingonumbrid ja kontrollib väljaku õigsust.
Näide failist bingo.txt:
1 30 34 55 75 10 16 40 50 67 5 20 38 48 61 4 26 43 49 70 15 17 33 51 66
Koosta funktsioon failist_järjendisse, mis saab argumendiks failinime (sõne) ja tagastab kahemõõtmelise järjendi bingoväljaku arvudega (täisarvutüüpi).
Näide funktsiooni failist_järjendisse tööst eelneva näidisfailiga bingo.txt:
>>> failist_järjendisse("bingo.txt") [[1, 30, 34, 55, 75], [10, 16, 40, 50, 67], [5, 20, 38, 48, 61], [4, 26, 43, 49, 70], [15, 17, 33, 51, 66]]
Koosta funktsioon on_bingo_tabel, mis võtab argumendiks 5 x 5 maatriksi, milles iga element on täisarv, ning tagastab tõeväärtuse vastavalt sellele, kas arvud selles tabelis on veergudesse jaotatud vastavalt Bingo loto reeglitele.
Et tegu oleks korrektse Bingo loto mänguväljaga, peavad vasakpoolseimas veerus olevad arvud kuuluma lõiku 1 - 15, järgmises veerus olevad arvud lõiku 16 - 30 ja nii edasi, kuni viimases veerus on ainult arvud lõigust 61 - 75.
Näited funktsiooni eraldi rakendamisest
>>> on_bingo_tabel([[1, 30, 34, 55, 75], [10, 16, 40, 50, 67], [5, 20, 38, 48, 61], [4, 26, 43, 49, 70], [15, 17, 33, 51, 66]]) True
>>> on_bingo_tabel([[1, 30, 34, 55, 76], [10, 16, 40, 50, 67], [5, 20, 38, 48, 61], [4, 26, 43, 49, 70], [15, 17, 33, 51, 66]]) False
Lihtsuse mõttes võib siin ülesandes eeldada, et kõik arvud on antud tabelis unikaalsed ehk ükski arv ei esine tabelis rohkem kui üks kord. Huvi korral võid proovida kontrollida ka arvude unikaalsust, et ei peetaks korrektseks tabelit, mis on muidu reeglitele vastav, aga milles on kaks ühesugust arvu. Kui oled oma programmile lisanud unikaalsuse kontrolli, siis peab funktsiooni nimeks olema on_bingo_tabel_extra.
Esita programmid
Esita ülesannete lahendused Moodle'i kaudu failidena kodu1.py ja kodu2.py.