Kuuenda praktikumi ülesanded
Järgmisest kolmest ülesandest tuleb lahendada vähemalt üks. Lahendused tuleb esitada Lahenduses, kus need kontrollitakse automaatselt.
Kontrollülesanne 6.4b Nimepäev
Kui aadressile https://courses.cs.ut.ee/MTAT.TK.012/2015_fall/uploads/Main/ lisada kuunimi (nt. https://courses.cs.ut.ee/MTAT.TK.012/2015_fall/uploads/Main/jaanuar), siis sellelt aadressilt võib leida lehe, kus on kirjas selle kuu nimepäevalised nii, et igal real on ühe päeva nimepäevalised (esimesel real on selle kuu esimese päeva nimepäevalised, teisel real on selle kuu teise päeva nimepäevalised jne.). "märts" asemel tuleb kasutada ilma täpitähtedeta versiooni "marts".
NB! Kui ülaltoodud aadressilt andmeid ei saa kätte (nt Macide kasutajad), siis palun proovida http://kodu.ut.ee/~eno/mooc/jaanuar jt.
Kirjutada programm, mis
- küsib kasutajalt kuunime (võib eeldada, et kasutaja sisestab kuunime õigesti ja "märts" asemel kirjutab "marts"),
- küsib kasutajalt päeva (võib eeldada, et sisestatud kuus leidub sellise järjekorranumbriga päev),
- loeb vastavalt aadressilt selle kuu nimepäevad (kasulik oleks nendest koostada järjend, abiks võib olla meetod
splitlines()
) ja - väljastab ekraanile sisestatud kuupäevale vastavad nimepäevalised.
Näited programmi tööst:
>>> %Run lahendus.py
Sisesta kuu: veebruar
Sisesta päev: 15
15. veebruar on nimepäev järgmiste nimedega inimestel:
Tiina, Neidi
>>> %Run lahendus.py
Sisesta kuu: mai
Sisesta päev: 31
31. mai on nimepäev järgmiste nimedega inimestel:
Helga, Helge, Helgi, Helja, Helje, Heljo, Helju, Elga, Olga, Olli
Kui olete juba hulk aega proovinud ülesannet iseseisvalt lahendada ja see ikka ei õnnestu, siis võib-olla saate abi murelahendajalt
. Püütud on tüüpilisemaid probleemseid kohti selgitada ja anda vihjeid.
Kontrollülesanne 6.4b Vigane pangaautomaat
Pangaautomaat on läinud rikki ja lubab selle kasutajal võtta raha välja ja panna sisse, nii nagu süda lustib. Rikki läinud pangaautomaadil on lisaks säilinud varasemalt tehtud tehingute vaatamise funktsioon.
Koostada programm, mis
- küsib kasutajalt, kas kasutaja soovib sooritada tehingut, vaadata kontoseisu või lõpetada töö;
- juhul kui kasutaja vastab
"tehing"
, palub kasutajal täisarvulise summa sisestada. Kui kasutaja on summa sisestanud, kirjutab programm summa ja tehingu kuupäeva ning kellaaja failipank.txt
lõppu ning seejärel küsib programm kasutajalt uuesti tegevust; - juhul kui kasutaja vastab
"väljavõte"
, loeb ja väljastab failipank.txt
sisu ekraanile ning seejärel küsib kasutajalt uuesti tegevust; - juhul kui kasutaja vastab
"lõpp"
, siis programm lõpetab töö.
Praeguse kuupäeva ja kellaaja saamisel aitab järgmine programmilõik.
from datetime import datetime kuupäev_kellaeg = datetime.today() print("Kuupäev ja kellaeg: " + str(kuupäev_kellaeg))
>>> %Run lahendus.py
Tehing, väljavõte või lõpetamine? tehing
Sisesta summa: 500
Tehing, väljavõte või lõpetamine? tehing
Sisesta summa: -300
Tehing, väljavõte või lõpetamine? väljavõte
Tehingu aeg: 2022-02-22 22:07:49.355839, summa: 500
Tehingu aeg: 2022-02-22 22:07:51.788771, summa: -300
Tehing, väljavõte või lõpetamine? lõpp
>>> %Run lahendus.py
Tehing, väljavõte või lõpetamine? tehing
Sisesta summa: 150
Tehing, väljavõte või lõpetamine? väljavõte
Tehingu aeg: 2022-02-22 22:07:49.355839, summa: 500
Tehingu aeg: 2022-02-22 22:07:51.788771, summa: -300
Tehingu aeg: 2022-02-22 22:08:06.920343, summa: 150
Tehing, väljavõte või lõpetamine? lõpp
Kontrollülesanne 6.4c Elutee number
Numeroloogias peetakse tähtsaks elutee numbrit, mille arvutamiseks tuleb liita kokku sünnikuupäeva ja -aasta numbrid nii, et jõutakse lõpuks ühe numbrini.
Näiteks, oletame, et sünnikuupäev on 15.05.1975. Teha tuleb niisiis järgnev tehe: 1+5+5+1+9+7+5 = 33, 3+3 = 6, seega on elutee number 6.
Aga kui sünnikuupäevaks on nt. 17.11.1981, siis arvutada tuleb järgmiselt: 1+7+1+1+1+9+8+1 = 29, 2+9 = 11, 1+1=2.
Elutee numbrit arvutab järgmine (rekursiivne) funktsioon, mis võtab argumendiks sünnikuupäeva:
#argument s on sõne, esialgu see on kuupäev, edasi juba arvutatud arv def elutee(s): # Abimuutaja numbri arvutamiseks n = 0 # Tsükkel, mis vaatab iga sümboli sõnes for i in s: if i != ".": n += int(i) # arvutame summat # Kui saadud arv on väiksem kui 10, siis ongi elutee number käes if n < 10: return n # Kui saadud arv on 10 või suurem, siis on vaja uuesti arvutada, # Selleks kasutame jälle sama funktsiooni else: return elutee(str(n))
Failis sunnikuupaevad.txt on mingi hulk sünnikuupäevi, iga sünnikuupäev eraldi real. Kirjutada programm, mis tekitab selle faili põhjal 9 tekstifaili nimedega eluteenumber1.txt, eluteenumber2.txt, ..., eluteenumber9.txt ning jagab sünnikuupäevad nendesse failidesse vastavalt elutee numbrile (elutee numbri arvutamiseks kasutada funktsiooni elutee). Näiteks sünnikuupäev 15.05.1975 tuleb kirjutada faili eluteenumber6.txt.
Näide programmi tööst:
Kui faili sunnikuupaevad.txt sisu on
07.02.1969 17.11.1981 29.03.1955
siis faili eluteenumber7.txt sisu peab olema
07.02.1969 29.03.1955
ja faili eluteenumber2.txt sisu peab olema
17.11.1981
Kõik ülejäänud 7 faili peavad selle näite korral küll tekkima, aga jääma tühjaks.
Kui olete juba hulk aega proovinud ülesannet iseseisvalt lahendada ja see ikka ei õnnestu, siis võib-olla saate abi murelahendajalt
. Püütud on tüüpilisemaid probleemseid kohti selgitada ja anda vihjeid.