Viienda praktikumi ülesanded
Järgmisest kolmest ülesandest tuleb lahendada vähemalt üks. Lahendused tuleb esitada Lahenduses, kus need kontrollitakse automaatselt.
Kontrollülesanne 5.4a Tüdrukute nimed
Peatselt lapsevanemate rolli astuv paar murrab pead, sest nad ei tea, mis tütrele nimeks panna. Väikese eeltöö tulemusena on ühelt veebilehelt saadud erinevad tüdrukute nimed ühte tekstifaili koondatud. Paarile meeldivad näiteks E-tähega algavad nimed, mis on vähemalt 5 tähte pikad. Samas meeldivad neile ka K-tähega algavad nimed, mis on vähemalt 7 tähte pikad. Käsitsi nimesid failist otsida on väga aeganõudev tegevus, mistõttu on mõistlik abistada neid programmiga.
Esmalt koostada funktsioon nimeotsing
, mis
- võtab argumendiks failist sisse loetud nimede järjendi, soovitud nime esitähe (sõne, ei ole vahet, kas suur- või väiketäht) ja nime minimaalse pikkuse (täisarv);
- leiab nime algustähte ja minimaalset pikkust arvesse võttes nimede järjendist kõik sobivad nimed ning tagastab need järjendis (nt
["Kristel", "Karolin", "Kristin"]
)
Näide funktsiooni tööst:
>>> nimeotsing(["Ella", "Elis", "Helena", "Elianor", "Paula"], "E", 5)
['Elianor']
>>> nimeotsing(["Ella", "Elis", "Helena", "Elianor", "Paula"], "e", 0)
['Ella', 'Elis', 'Elianor']
Failis nimed.txt? on kirjas tüdrukute nimed, mida võite kasutada oma lahenduses. Automaatkontrollis kasutatakse erineva sisuga faile.
Seejärel koostada põhiprogramm, mis
- küsib kasutajalt faili nime;
- loeb failist sisse tüdrukute nimed, eemaldades igal real reavahetuse märgise (seda saab teha, kasutades meetodit
strip()
); - küsib kasutajalt sobilikku nime algustähte;
- küsib kasutajalt nime minimaalset pikkust;
- väljastab sisestatud nime algustähe ja minimaalse pikkuse alusel sobivad nimed, rakendades funktsiooni
nimeotsing
.
Näited programmi tööst:
>>> %Run lahendus.py
Sisesta faili nimi: nimed.txt
Sisesta nime algustäht: M
Sisesta nime minimaalne pikkus: 5
Sobilikud nimed on:
Monika
Margareeta
Maimu
Malle
Marge
>>> %Run lahendus.py
Sisesta faili nimi: nimed.txt
Sisesta nime algustäht: e
Sisesta nime minimaalne pikkus: 0
Sobilikud nimed on:
Endla
Eevi
Ester
Eliisabet
Eha
Elo
Eva
Euromüntide seerias on kuus erineva nimiväärtusega senti: 1 sent, 2 senti, 5 senti, 10 senti, 20 senti, 50 senti. Sendid väärtustega 1, 2 ja 5 on pronksikarva (vasega kaetud teras), sendid väärtustega 10, 20 ja 50 on kullakarva (vasesulam, mis sisaldab alumiiniumi, tsinki ja tina, nn Nordic Gold).
Peres on kombeks, et pronksikarva mündid panna hoiupõrsasse.
Müntide andmed on failis kirjas nii, et iga mündi väärtus on eraldi real. Näiteks nii:
1
20
20
5
50
2
2
1
Esmalt koostada funktsioon pronksikarva_summa
, mis
- võtab argumendiks täisarvude järjendi;
- tagastab selles järjendis olevate arvude 1, 2 ja 5 summa.
Näide funktsiooni tööst:
>>> pronksikarva_summa([2, 1, 10, 5, 50, 20, 20])
8
Teiseks koostada programm, mis
- küsib kasutajalt selle faili nime, milles asuvad sentide väärtused;
- moodustab täisarvujärjendi vastavast failist loetud väärtustest;
- rakendab funktsiooni
pronksikarva_summa
, andes argumendiks koostatud täisarvujärjendi; - väljastab ekraanile tulemuseks saadud kõikide pronksikarva sentide summa.
Näide programmi tööst:
Näiteks ülaltoodud andmete korral failis nimega mündid.txt peab ekraanile ilmuma
>>> %Run lahendus.py
Sisesta failinimi: mündid.txt
Hoiupõrsasse läheb 11 senti.
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.
Kuupäevade esitamisel tekib enim probleeme, kui kuupäev kirjutatakse kujul „05.06.2005“ – sellisel puhul pole võimalik aru saada, kas on mõeldud 5. juunit või hoopis 6. maid. Eestis ja enamikes teistes riikides kirjutatakse kuupäev reeglina formaadis DD.MM.YYYY, kuid Ameerika Ühendriikides on levinum järjekord MM.DD.YYYY. (Huvi korral vt https://en.wikipedia.org/wiki/Date_format_by_country.) Segaduse vältimiseks tuleks kuu nimi välja kirjutada.
Esmalt kirjutada funktsioon kuu_nimi
, mis
- võtab argumendiks kuu järjekorranumbri;
- tagastab vastava kuu nime (väikeste tähtedega).
Vihje: Seda funktsiooni saab kirjutada, kasutades vastuse andmisel if-lauseid, aga optimaalne lahendus oleks kasutada järjendit (siis ühtegi if-lauset vaja ei ole).
Näide funktsiooni tööst:
>>> kuunimi(1)
'jaanuar'
Teiseks luua funktsioon kuupäev_sõnena
, mis
- võtab argumendiks ühe sõnena esitatud kuupäeva formaadis “DD.MM.YYYY” (nt '24.02.1918');
- tagastab selle sama kuupäeva kujul <päev>. <kuu_nimi> <aasta>. a (nt '24. veebruar 1918. a'), kusjuures
kuupäev_sõnena
peab ühe toimingu delegeerima funktsioonilekuu_nimi
. Abiks võib ka olla funktsioonsplit
.
Näide funktsiooni tööst:
>>> kuupäev_sõnena("24.02.1918")
'24. veebruar 1918. a'
Kolmandaks kirjutada programm, mis
- küsib kasutajalt kuupäeva kujul “DD.MM.YYYY”;
- väljastab ekraanile vastava kuupäeva sõnena kujul<päev>. <kuu_nimi> <aasta>. a.
Näited programmi tööst:
>>> %Run lahendus.py
Sisesta kuupäev kujul DD.MM.YYYY: 24.02.1918
24. veebruar 1918. a
>>> %Run lahendus.py
Sisesta kuupäev kujul DD.MM.YYYY: 20.08.1991
20. august 1991. a
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