from random import randint, random def test_random(): for _ in range(10): number = randint(1, 10) print(number, end=' ') print() for _ in range(5): number = random() print(number * 5 + 5) # ÚLOHA 1 # Napište funkci factorization(n), která vypíše rozklad čísla n na prvočísla (jen jako součin) def factorization(n): pass # vzorový výstup: # >>> factorization(2) # 2 # >>> factorization(7) # 7 # >>> factorization(25) # 5 5 # >>> factorization(42) # 2 3 7 # >>> factorization(360) # 2 2 2 3 3 5 # >>> factorization(1024) # 2 2 2 2 2 2 2 2 2 2 # ÚLOHA 2 # A) Napište funkci gcd(a, b), která vrátí největší společný dělitel čísel a a b. # Funkce může pracovat naivně, tj. zkoušet všechny možnosti a podobně. # B) Implementujte funkci gcd(a,b) Euklidovým algoritmem - viz wiki. def gcd(a, b): pass # vzorový výstup: # >>> gcd(5, 7) # 1 # >>> gcd(8, 8) # 8 # >>> gcd(10, 5) # 5 # >>> gcd(5, 10) # 5 # >>> gcd(42, 36) # 6 # >>> gcd(0, 7) # 7 ### NÁHODNOST # ÚLOHA 3 # Napište funkci, která bude vracet nově vygenerované náhodné číslo # simulující šestistěnnou kostku s čísly 1–6. def dice(): pass # ÚLOHA 4 # Napište funkci, která bude provádět házení obyčejnou šestistěnnou kostkou # tak dlouho dokud nepadne liché číslo. Funkce vytiskne záznam v3ech hodů. def until_even(): pass # možný výstup: # >>> until_even() # 4 2 2 1 # >>> until_even() # 3 # >>> until_even() # 6 3 # ÚLOHA 5 # Napište funkci, která vygeneruje (a vypíše) count náhodných čísel v intervalu [lower, upper] # a následně vypíše nejmenší, největší číslo. Vypište také aritmetický průměr ze všech vygenerovnaých čísel. def statistics(count, lower, upper): pass # možný výstup: # >>> statistics(10, 1, 100) # nejmenší číso: 3 # největší číslo: 87 # průměr: 47.4 # ÚLOHA 6 # Opilec je na půli cesty mezi domovem a hospodou, každý krok udělá náhodně jedním směrem. # Napište funkci, která bude simulovat opilcův pohyb. Jejími parametry budou vzdálenost mezi # domovem a hospodou a počet kroků do opilcova usnutí (tj. maximální délka simulace). Simulace # skončí buď tehdy, když opilec dojede domů nebo do hospody, případně po vyčerpání počtu kroků. # Dekomponujte funkci na menší funkce. def drunkard_simulator(distance): position = distance // 2 while 0 <= position <= distance: position += move() print_position(position, distance) def print_position(position, distance): print('home' + get_path(position, distance) + ' pub') def get_path(position, distance): path = '' for i in range(distance): if i == position: path += ' *' else: path += ' .' return path def move(): number = randint(0, 1) if number == 0: return 1 else: return -1 # možný výstup: # >>> drunkard_simulator(10, 100) # home . . . . * . . . . . pub # home . . . . . * . . . . pub # home . . . . . . * . . . pub # home . . . . . * . . . . pub # home . . . . . . * . . . pub # home . . . . . . . * . . pub # home . . . . . . . . * . pub # home . . . . . . . . . * pub # home . . . . . . . . * . pub # home . . . . . . . . . * pub # home . . . . . . . . . . pub # Ended in the pub again! # ÚLOHA 7 # Chcete vědět, jak dlouho budete čekat na zastávce šaliny. Šalina jezdí každých n minut. # Nasimulujte count náhodných příchodů na zastávku (v náhodné časy). Vytiskněte, v kolika # procentech případů budete čekat déle než w minut. def tram_waiting(w, n, count): pass # možný výstup: # >>> tram_waiting(4, 5, 100) # In 19% of cases man waits longer than 4 minutes. if __name__ == "__main__": # zde můžete volat implementované funkce a zkusit si, jak fungují drunkard_simulator(10)