10. nädala lisaharjutused
0. Järjend hulgaks (soojendusülesanne)
Pythonis on küll olemas funktsioon set, mis muuhulgas suudab teisendada järjendit hulgaks, aga harjutamise mõttes kirjuta funktsioon järjend_hulgaks, mille argumendiks on suvaline järjend ja mis tagastab selle elementide põhjal koostatud hulga. Funktsiooni set võib seejuures kasutada ainult ilma argumendita (st tühja hulga moodustamiseks).
1. Hulkade otsekorrutis
Kirjuta funktsioon, mis kahe hulga (või järjendi) A ja B põhjal tagastab uue hulga (või järjendi), mille elementideks on kõikvõimalikud paarid, mida saab A ja B elementide "paaritamisel" moodustada. Näiteks, kui hulgad on {'a','b'}
ja {1,2,3}
, siis tulemuseks peaks olema hulk {('a',1), ('a',2), ('a',3), ('b',1), ('b',2), ('b',3)}
.
Demonstreeri funktsiooni tööd kaardimastide hulga {'♥','♦','♠','♣'}
ja kaarditugevuste hulga {'A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2'}
kombineerimisega.
(http://et.wikipedia.org/wiki/Otsekorrutis)
2. Sugupuu
Failis meesliinid.txt on igal real inimese nimi ja seejärel tema isa nimi. Kirjuta programm, mis küsib kasutajalt kaks nime ja ütleb, kas esimene on teise eellane (st isa või vanaisa või vana-vanaisa jne).
Ülesande lahendamiseks on soovitatav lugeda andmed failist sõnastikku. Sõnastikust otsimiseks kirjuta funktsioon (nt on_eellane), mille argumentideks on sõnastik ja kaks nime ning mis tagastab tõeväärtuse vastavalt sellele, kas esimene inimene on teise eellane.
Lihtsam variant: programm/funktsioon peab ütlema, kas esimene inimene on teise isa (st vahetu eellane).
Raskem variant: programm kasutab eellaste tuvastamisel ka infot emade kohta (sugupuu.txt).
3. Pikslimaatriks
Pilte esitatakse arvutis enamasti pikslite maatriksina. Halltoonides piltide puhul tähistatakse pikslit harilikult täisarvuga vahemikus 0...255, kus 0 tähistab musta ja 255 valget, ning vahepealsed väärtused vastavaid halltoone. Seega võiksime halltoonides pilti esitada Pythoni listide listina ehk maatriksina. Näiteks sedasi:
[[252, 252, 252, 252, 220, 172, 175, 132, 127, 139, 151, 212, 252, 252, 252, 252], [252, 252, 251, 163, 215, 195, 124, 99, 95, 119, 139, 155, 135, 243, 252, 252], [252, 252, 179, 252, 220, 63, 56, 103, 115, 67, 68, 79, 124, 124, 251, 252], [252, 163, 251, 252, 147, 39, 98, 252, 252, 119, 59, 67, 60, 99, 131, 252], [212, 212, 252, 252, 128, 36, 84, 252, 252, 104, 51, 63, 59, 55, 100, 204], [179, 251, 251, 252, 163, 19, 47, 79, 99, 44, 55, 56, 55, 52, 59, 131], [175, 252, 243, 251, 236, 79, 19, 35, 31, 51, 55, 51, 51, 51, 47, 67], [148, 252, 244, 236, 244, 235, 143, 67, 50, 28, 28, 43, 44, 43, 43, 52], [151, 252, 243, 243, 231, 236, 244, 231, 228, 200, 79, 27, 43, 43, 39, 52], [175, 252, 244, 239, 235, 228, 220, 228, 227, 223, 220, 67, 23, 36, 35, 60], [179, 243, 252, 239, 235, 228, 235, 171, 103, 196, 215, 152, 19, 35, 35, 116], [215, 187, 252, 239, 232, 236, 220, 55, 3, 104, 216, 199, 19, 35, 34, 195], [252, 148, 239, 252, 235, 228, 232, 115, 27, 164, 215, 184, 19, 28, 98, 252], [252, 244, 167, 243, 251, 235, 227, 227, 207, 212, 231, 115, 12, 59, 244, 252], [252, 252, 244, 147, 199, 227, 244, 236, 231, 223, 135, 23, 91, 251, 252, 252], [252, 252, 252, 252, 212, 155, 147, 132, 132, 151, 148, 187, 252, 252, 252, 252]]
Laadi alla ja paki lahti fail pixboard.zip, milles olev moodul pixboard
oskab sedasi esitatud "pilte" näidata päris piltidena. Pixboard oskab ka taolist maatriksit etteantud gif-faili põhjal genereerida. Enne näitamist võib maatriksit Pythoni vahenditega muuta – sedasi saab teha päris lahedaid efekte. Koos mooduliga on selles zip-failis ka mõned demoskriptid – vaata need enne ülesannete juurde asumist nummerduse järjekorras läbi.
Ülesanded (kõiki neid saab teha kas halltoonidega või värvidega).
- Muuda pildi maatriksit selliselt, et pilt muutuks heledamaks.
- Genereeri sisseloetud pildi maatriksi põhjal uus, 90° pööratud maatriks.
- Tekita algse pildi peegelpilt.
- Laadi erinevatesse maatriksitesse kaks erinevat, aga samade mõõtmetega pilti ja "sulata" neist kokku üks pilt.
- Suurenda/vähenda pildi mõõtmeid.
Ülesanded värvipiltidega.
- Katseta värvide komponentide muutmist, nt vaheta kõikide pikslite juures punase ja sinise komponendid. NB! Pead tegema uued pikslid, sest kuna pikslid on (vaikimisi) antud ennikutena, ei saa neid kohapeal muuta.
- Teisenda värvipilt halltoonidesse, kasutades vaid ühe värvikanali infot.
- Tee värvid erksamaks.
- Tee värvid tuhmimaks.
- Tee demo2-stiilis pilt, kus punane komponent sõltub x-koordinaadi siinusest, roheline komponent koosinusest ja sinine komponent piksli kaugusest pildi keskpunktist.