Vaje - slovarji 2
Posebnež
Koliko bombonov ima kateri otrok, shranjujemo v slovarju, katerega ključ je ime otroka, pripadajoča vrednost pa število bombonov.
Recimo, da imajo vsi otroci enako bombonov, le eden jih ima več ali manj kot ostali. Napišite funkcijo posebnez(bomboni), ki prejme takšen slovar (z vsaj tremi elementi) in vrne ime tega otroka.
Prafaktorji in delitelji
Napiši funkcijo prafaktorji( n), ki razcepi podano število n na prafaktorje in vrne razcep v obliki slovarja. Če pokličemo prafaktorji(1400), vrne slovar {2: 3, 5: 2, 7: 1}, saj je 1400 = 235271.
Nato napišite funkcijo gcd(a, b), ki prejme dva slovarja, kakršna vrača prejšnja naloga, in vrne največji skupni delitelj števil, ki ju predstavljata ta dva slovarja. Če pokličemo gcd({2: 3, 5: 2, 7: 1}, {2: 2, 7: 2, 11:1}), vrne 28. Prvi slovar namreč predstavlja število 1400 in drugi število 2156, njun največji skupni delitelj pa je 28. Nalogo reši, ne da bi izračunal števili (npr. 1400 in 2156). Delaj s slovarjema, ki si ju dobil.
Namig: 1400 = 235271 in 2156 = 2272111 , zato je njun največji skupni delitelj enak 2271.
Anagrami
Napiši funkcijo, ki kot argument prejme dve besedi in pove (tako da vrne True ali False), ali sta anagrama. Besedi sta anagrama, če lahko dobimo eno besedo iz druge tako, da jima premešamo črke.
>>> anagram("pirat", "ripat")
True
>>> anagram("tipka", "pirat")
False
>>> anagram("tipka", "piikat")
False
Menjave
Napiši funkcijo zamenjano(s, menjave), ki prejme seznam s in slovar menjave. Vrne naj nov seznam, v katerem so vsi elementi seznama, ki nastopajo kot ključi v slovarju, zamenjani s pripadajočimi vrednostmi. Elemente, ki se ne pojavijo v slovarju, pusti pri miru.
Klic zamenjano(["Ana", "Ana", "Berta", "Ana", "Cilka"], {"Ana": "Peter", "Berta": "Ana"}) vrne ["Peter", "Peter", "Ana", "Peter", "Cilka"].
Funkcija zamenjano ne sme spremeniti podanega seznama s.
Poleg tega napiši podobno funkcijo zamenjaj(s, menjave), ki pa ne vrne ničesar temveč ustrezno spremeni podani seznam s.
Osrednja obveščevalna služba
Osrednja obveščevalna služba se je odločila spremljati elektronsko pošto določenih osebkov, pri čemer jo zanimajo predvsem imena, ki se pojavljajo v njej. Kot možno ime štejemo besede, ki se začnejo z veliko začetnico in nadaljujejo z malimi. Radi bi imeli program, ki bi za dano elektronsko sporočilo naštel vsa imena, ki se pojavijo v njem in število njihovih pojavitev.
Nekdo jim je že napisal program, ki vzame sporočilo in ga predela v sporočilo brez ločil.
Začnemo torej s takšnim nizom:
msg = """Dragi Ahmed kako si kaj Upam da so otroci že zdravi Mustafa Osama in jaz smo se šli danes malo razgledat in kaže kar dobro Abdulah pa ni mogel zraven je šel v Pešavar prodat še tri kamele Osama sicer pravi da se mu to pred zimo ne splača ampak saj veš kakšen je Abdulah tak je kot Harun nič jima ne dopoveš še Osama ne Jibril me kliče moram iti oglasi se kaj na Skype tvoj Husein"""Program naj izpiše nekaj takšnega:
Dragi 1 Ahmed 1 Upam 1 Mustafa 1 Osama 3 Abdulah 2 Pesavar 1 Harun 1 Jibril 1 Skype 1 Husein 1