######################################################################## ## 3. prednaska ## ## Slovniky(hashe), priklad s telefonnim seznamem, rekurze, Fibonacci ## ######################################################################## # Telefonni seznam # jmena a telefonni cisla # "ulozit nove, nebo najit telefonni cislo kamarada, nebo ukoncit?" # # ulozit nove -> zepta se na jmeno, na telefonni cislo, ulozi je # # najit -> zepta se na jmeno, vrati telefonni cislo, # kdyz to telefonni cislo nezna, rekne to. # Nacitani retezcu: # print "Jak se jmenujes?" # jmeno = raw_input() # 'Michal' # Seznam klicu slovniku: # slovnik = { "Jan": "MFF", "Michal": "MFF", "Karry": "FEL" } # slovnik.keys() == ["Jan", "Karry", "Michal"] # 'Michal' in slovnik.keys() # True # 'Jirka' in slovnik.keys() # False telefony = { 'Michal': "123456789", 'Jirka': "314159265", 'Honza': "35897" } # Obsluzna funkce pro telefonni seznam, pridava nove cislo def uloz_noveho(): print "Jmeno?" jmeno = raw_input() print "Telefonni cislo?" cislo = raw_input() telefony[jmeno] = cislo print "Pridano:", jmeno, "=", cislo # Obsluzna funkce pro telefonni seznam, hleda v seznamu dane jmeno def najdi_existujiciho(): print "Jmeno?" jmeno = raw_input() if jmeno in telefony.keys(): print "Znam. Telefonni cislo:", telefony[jmeno] else: print "Neznam, pardon." # Funkce obstaravajici ve smycce telefonni seznam # Vzdy se prepta na akci a tu provede (zavola prislusnou obsluznou funkci) def telefonni_seznam(): while True: print "[U]lozit, [N]ajit, nebo [Q]itnout?" prikaz = raw_input() if prikaz == "U": uloz_noveho() elif prikaz == "N": najdi_existujiciho() elif prikaz == "Q": print "Mej se." break elif prikaz == "V": text = "" for clovek in telefony.keys(): text = text + clovek + ": " + telefony[clovek] + "\n" print text else: print "Omez sve spisovatelske strevo." def main(): # Nechame si vygenerovat Fibonacciho cisla (dvema zpusoby) fib = fibonacci(10) print fib[6] print fibonacci_stupid(6) pocet = input() vysledek = 1 for i in range(2, pocet+1): vysledek *= i print vysledek # Nakonec spustime telefonni seznam telefonni_seznam() # Vrati pole prvnich n Fibonacciho cisel, konstruuje ho postupne (aditivne), # tedy v O(n) def fibonacci(n): v = [] if n >= 1: v.append(0) if n >= 2: v.append(1) for i in range(2, n): v.append(v[-1] + v[-2]) return v # Vrati n-te Fibonacciho cislo # Pri dotazovani vola sebe sama, tedy vznika kosaty strom volani. # Proto bezi velmi pomalu, az v O(2^n) --> nepoustejte na velke vstupy ;) def fibonacci_stupid(n): if n > 2: return fibonacci_stupid(n - 1) + fibonacci_stupid(n - 2) elif n == 2: return 1 else: return 0 if __name__ == '__main__': main()