====== Den 3 ====== ===== Opakování for-cyklu ===== ==== Úkol 1 ==== # Vasek a = int(input("Zadejte diferenci: ")) b = int(input("Zadejte prvni clen: ")) for i in range(b,a*20+b,a): print(i) ---- ==== Úkol 2 ==== # riskoana n = int(input("Zadejte hodnost: ")) for i in range(n-1): #jen do předposlední řady for j in range(n-1): #poslední sloupec budeme řešit odděleně if i == j: print("1", end=", ") else: print("0", end=", ") print("0") #poslední sloupec dá vždycky 0 for i in range(n-1): #poslední řádka print("0", end=", ") print("1") === Úkol 2 alternativní řešení === jiné, elegantnější řešení: # riskoana n = int(input("Zadejte hodnost: ")) for i in range(n): for j in range(n): #které číslo vytisknu if i == j: print("1", end="") else: print("0", end="") #zakončení řádku if j < n - 1: print(", ", end="") else: print() ---- ==== Úkol 3 ==== # kubikji2, riskoana size = int(input("Zadejte hodnost matice: ")) for i in range(size): for j in range(size): # pro sudý řádek jedničky, jinak 0 if(i % 2 == 0): print("1 ", end="") else: print("0 ", end="") # zalomení řádku print() ---- ==== Úkol 4 ==== # kubikji2, riskoana size = int(input("Zadejte hodnost matice: ")) for i in range(0, size): for j in range(0, size): # když je součet indexů sudý, vypiš 1 if( (i+j) % 2 == 0): print("1 ", end="") else: print("0 ", end="") # zalomení print() ---- ==== Úkol 5 ==== # riskoana for i in range(1, 11): for j in range(1, 11): print("%2d" %(i * j), end=" ") print(" ") ---- /* ==== Úkol 2 ==== # kubikji2 suma = 0 # vnitrek zavorky z rovnice # 10000 iteraci cyklu dava pomerne hezke reseni # s vetsim poctem opakovani je hodnota pi presnejsi for i in range(0,1000): clen = 1/(2*i+1) # aktualni clen posloupnosti v zavorce # rozhodovani o znamenku if(i%2 == 0): suma = suma + clen else: suma = suma - clen pi = 4*suma print(pi) ---- ===== Opakování vnořeného for-cyklu ===== ==== Úkol 2 ==== # Lukas Halaska for i in range(1, 11): for j in range(1, 11): x = i*j if j==1: if (len(str(x))==2): print(end=str(x)) else: print(" ", end=str(x)) elif j==10: if (len(str(x))==3): print(" ", x, sep="") elif (len(str(x))==2): print(" ", x, sep="") else: print(" ", x, sep="") else: if (len(str(x))==2): print(" ", end=str(x)) else: print(" ", end=str(x)) #Vojta J. for k in range (1,10): for l in range (1,10): print("%2d" % (k*l), end=" ") print(" ") ---- ==== Úkol 3 ==== # Cvicici (Jirka) size = 5 # VOLITELNE, velikost matice # prvni obrazec for i in range(0, size): # vypis tolik "X", kolikaty mam radek # (nejhornejsi radek je prvni) # | # V for j in range(0, i+1): print("X ", end="") # VOLITELNE, zbytek radku vypln mezerami for j in range(0,size-i): print(" ", end="") # zalomeni radku print("") # volny radek mezi obrazci print("") # druhy obrazec for i in range(0, size): # vypis tolik mezer, kolikaty mame radek # (nejhornejsi radek je nulty) for j in range(0, i): print(" ", end="") # zbytek radku vypln "X" for j in range(0,size-i): print("X ", end="") print("") # volny radek mezi obrazci print("") # treti obrazec for i in range(0, size): for j in range(0, size): # "X" jsou v prvnim a poslednim radku a take v prvnim a poslednim sloupci # plati-li alespon jedno, vypis "X" if(i==0) or (i==size-1) or (j==0) or (j==size-1): print("X ", end="") else: print(" ", end="") print("") ---- */ ===== While cyklus ===== ==== Úkol 1 ==== # author kubikji2 cur_num = float(input("Zadej dalsi cislo: ")) # pocet cisel n_nums = 0 # pocet sudych cisel n_even = 0 # suma cisel num_sum = 0 # nejvetsi cislo, na zacatku stejne jako prvni zadane cislo num_largest = cur_num # nejmensi cislo, na zacatku stejne jako prvni zadane cislo num_smallest = cur_num while True: num_sum += cur_num n_nums += 1 # je-li cislo sude ... if cur_num % 2 == 0: # ... zvys pocet sudych cisel n_even += 1 # kdyz je nove cislo vetsi dosud nejvetsimu ... if cur_num > num_largest: # ... aktualizuj nejvetsi cislo num_largest = cur_num if cur_num < num_smallest: # ... aktualizuj nejmensi cislo num_smallest = cur_num # nacitani dalsiho vstupu cur_num = float(input("Zadej dalsi cislo: ")) if cur_num == 0: break n_odd = n_nums - n_even num_avg = num_sum / n_nums print("Celkem zadano cisel: " + str(n_nums)) print("Pocet lichych cisel: " + str(n_odd)) print("Pocet sudych cisel: " + str(n_even)) print("Nejvetsi cislo: " + str(num_largest) + ", nejmensi cislo: " + str(num_smallest)) print("Prumerna hodnota: " + str(num_avg)) ==== Úkol 2 ==== # riskoana a = int(input("zadejte prvni cislo: ")) b = int(input("zadejte prvni cislo: ")) if a > b: res = b while(res <= a): res+=b print(res) else: print("podminky") ---- ==== Úkol 3 ==== # author kubikji2 dec = int(input("Zadej cislo v desitkove soustave: ")) # 1. nejprve urcime delku binarniho cisla, tedy maximalni exponent ... num = dec max_exp = 0 # ... postupne zkousime delit celociselne dvemi, dokud je cislo vetsi nez 1 while num > 1: num //= 2 max_exp += 1 # 2. zacneme od maximalniho exponentu ... cur_exp = 2**max_exp while cur_exp > 0: # a postupne zkousime celociselne delit cislo dvema cur_bit = dec // cur_exp # ... vysledky odpovidaji bitu, ktery vypiseme print(str(cur_bit), end="") # ... aktualizujeme hodnotu cisla dec -= cur_bit*cur_exp # ... zmensime exponent cur_exp //= 2 # zalomeni radku print() ---- ==== Úkol 4 ==== # kubikji2, riskoana import math x = int(input("Zadejte cele cislo: ")) while True: x += + 1 je_prvocislo = True for i in range(2, int(math.sqrt(x) + 1)): if x % i == 0: je_prvocislo = False break if je_prvocislo: print("Hledane cislo je", x) break ---- ==== Úkol 5 ==== # author kubikji2 et al. # nastaveni limitu lower = 1 upper = 100 # dokud neni horni limit stejny jako dolni limit ... while upper != lower: # ... spocitej hodnotu stredu ... middle = (upper+lower)//2 # ... a zeptej se na ni c = input("Je tvoje cislo vetsi nez " + str(middle) + "? (y/n)") # pokud si uzivatel mysli vyssi cislo nez je polovina... if c == "y": # ... uprav dolni mez na hodnotu poloviny a jednicku navrch lower = middle + 1 else: # ... jinak uprav horni mez na hodnotu poloviny upper = middle print("Tvoje cislo je: " + str(upper)) ---- ===== Úkoly na seznamy a N-tice ===== ==== Úkol 0 ==== # author kubikji2 N = 5 # 1. nacist a ulozit sekvenci nums = [] for i in range(N): # nacteni cisla ... cur_num = float(input("Zadej cislo: ")) # ... ulozeni cislo nums.append(cur_num) # 2. vypsat sekvenci for i in range(N): print(nums[i], end=" ") # zalomeni na konci print() ---- ==== Úkol 1 ==== # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() # 3. vypsat for i in range(N): print(nums[i], end=" ") print() ---- ==== Úkol 2 ==== # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() nums.reverse() # 3. vypsat for i in range(N): print(nums[i], end=" ") print() \\ === Alternativní řešení úkolu 2 === # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort(reverse=True) # 3. vypsat for i in range(N): print(nums[i], end=" ") print() ---- ==== Úkol 3 ==== # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() # 3. minimum je prvni a maximum posledni cislo print("minimum je: " + str(nums[0])) print("maximum je: " + str(nums[-1])) \\ === Alternativní řešení úkolu 3 === # author kubikji2 N = 5 # 1. nacist a ulozit cur_num = float(input("Zadej cislo: ")) # aktualni minimum je jedine nactene cislo num_min = cur_num # aktualni maximum je jedine nactene cislo num_max = cur_num # akutalni list obsahuje jedine nactene cislo nums = [cur_num] # nacitame zbyla cisla (N-1) for i in range(N-1): # nacteme cislo cur_num = float(input("Zadej cislo: ")) # porovname aktualni cislo s minimem ... if cur_num < num_min: # ... aktualizujeme minimum, je-li treba num_min = cur_num # porovname aktualni cislo s maximem ... if cur_num > num_max: # ... aktualizujeme maximum, je-li treba num_max = cur_num nums.append(cur_num) # 3. vypsani minim a maxima print("minimum je: " + str(num_min)) print("maximum je: " + str(num_max)) ---- ==== Úkol 4 ==== # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() # 3. maximalni rozdil je mezi prvnim a poslednim cislem print("maximalni rozdil je: " + str(nums[-1]-nums[0])) \\ === Alternativní řešení úkolu 4 === # author kubikji2 N = 5 # 1. nacist a ulozit cur_num = float(input("Zadej cislo: ")) # aktualni minimum je jedine nactene cislo num_min = cur_num # aktualni maximum je jedine nactene cislo num_max = cur_num # akutalni list obsahuje jedine nactene cislo nums = [cur_num] # nacitame zbyla cisla (N-1) for i in range(N-1): # nacteme cislo cur_num = float(input("Zadej cislo: ")) # porovname aktualni cislo s minimem ... if cur_num < num_min: # ... aktualizujeme minimum, je-li treba num_min = cur_num # porovname aktualni cislo s maximem ... if cur_num > num_max: # ... aktualizujeme maximum, je-li treba num_max = cur_num nums.append(cur_num) # 3. maximalni rozdil je mezi minimem a maximem print("maximalni rozdil je: " + str(num_max-num_min)) ---- ==== Úkol 5 ==== # author kubikji2 # 0. klicova myslenka, nejmensi rozdil je mezi dvema cisly, ktera lezi vedle sebe v setrizenem seznamu N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() # 3. projit list a najit nejmensi rozdil # inicializijeme rozdil na rozdil prvnich dvou cisel ... min_diff = nums[1]-nums[0] min_num1 = nums[0] min_num2 = nums[1] # ... a iterujeme az od druhe dvojice for i in range(N-1): # aktualni rozdil je nasledujici cislo, minus aktualni cur_diff = nums[i+1] - nums[i] if cur_diff < min_diff: min_diff = cur_diff min_num1 = nums[i] min_num2 = nums[i+1] # 4. vypis vysledku print("Nejmensi rozdil je: " + str(min_diff) + " a to mezi cisli " + str(min_num1) + " a " + str(min_num2)) ---- ==== Úkol 6 ==== # author kubikji2 N = 5 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. setridit nums.sort() # 3. nalezeni medianu uprostred seznamu ... med = nums[N//2] # ... pokud je N sude cislo, je median uprostred mezi dvema prostrednimi cisli if N % 2 == 0: med = (nums[N//2-1]+nums[N//2])/2 print("Median je " + str(med)) ---- ==== Úkol 7 ==== # author kubikji2 N = 6 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. prohodit poradi for i in range(N//2): tmp = nums[i] nums[i] = nums[N-i-1] nums[N-i-1] = tmp # 3. vypsat for i in range(N): print(nums[i], end=" ") print() \\ === Alternativní řešení úkolu 7 === # author kubikji2 N = 6 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. prohodit poradi for i in range(N//2): nums[i], nums[N-i-1] = nums[N-i-1], nums[i] # 3. vypsat for i in range(N): print(nums[i], end=" ") print() ---- ==== Úkol 8 ==== # author kubikji2 N = 6 # 1. nacist a ulozit nums = [] for i in range(N): cur_num = float(input("Zadej cislo: ")) nums.append(cur_num) # 2. seradit # Pro každou pozici v listu ... for i in range(N): # ... projdi nesetrizenou cast seznamu ... for j in range(N-i-1): # ... a pokud jsou dve sousedni cisla neserazena ... if nums[j] > nums[j+1]: # ... tak je prohod. nums[j], nums[j+1] = nums[j+1], nums[j] # POZNAMKA: s kazdym pruchodem vnejsiho cyklu, roste od konce i pocet setrizenych cisel # 3. vypsat for i in range(N): print(nums[i], end=" ") print() ---- ==== Úkol 9 ==== # riskoana hodnoty = [50, 20, 10, 5, 2, 1] mince = [] minceCelkem = 0 utrata = int(input("Zadejte, jakou castku chcete zaplatit: ")) if utrata < 0: print("Tak co tohle ma byt, zas Ti nekdo dluzi?") else: for i in range(len(hodnoty)): mince.append(int(utrata // hodnoty[i])) minceCelkem += (utrata // hodnoty[i]) utrata = utrata % hodnoty[i] print("Celkem je potreba " + str(minceCelkem) + " minci.") for i in range(len(hodnoty)): print("Pocet minci v hodnote ", hodnoty[i], " je: ", mince[i]) ---- ===== Úkoly využívající modul random ===== ==== Úkol 0 ==== # author kubikji2 import random N = 10 # pocet sudych cisel n_even = 0 # suma cisel num_sum = 0 # nejvetsi cislo num_largest = 0 # druhe nejvetsi cislo num_second_largest = 0 for i in range(N): # vyber nahodne cislo num = random.randint(1,100) num_sum += num # je-li cislo sude ... if num % 2 == 0: # ... zvys pocet sudych cisel n_even += 1 # kdyz je nove cislo vetsi nebo rovne, dosud nejvetsimu ... if num >= num_largest: # ... dosud nejvetsi cislo je druhe nejvetsi ... num_second_largest = num_largest # ... a aktualni cislo je nejvetsi num_largest = num # ... jinak zkontroluj druhe nejvetsi cislo elif num > num_second_largest: # ... pokud je vetsi, aktualizuj jeho hodnotu num_second_largest = num n_odd = N - n_even num_avg = num_sum / N print("Pocet sudych cisel: " + str(n_even)) print("Pocet lichych cisel: " + str(n_odd)) print("Prumerna hodnota: " + str(num_avg)) print("Nejvetsi cislo: " + str(num_largest) + ", druhe nejvetsi cislo: " + str(num_second_largest)) ---- ==== Úkol 1 ==== # author kubikji2 import math ref_pi = math.pi # pocet desetinnych mist N = 4 # pozadovana presnost jako 10^(-N) prec = 10 ** -N # pocet iteraci n_iter = 0 # ctvrtina naseho pi (tedy vnitrek zavorky) my_pi_4 = 0 while abs(4*my_pi_4-ref_pi) > prec: # znamenko v rade je -1 ... sign = -1 # ... pokud neni poradi iterace delitelne dvema ... if n_iter % 2 == 0: # ... pak je 1 sign = 1 # zvetseni ctvrtiny pi o prilusny clen posloupnosti my_pi_4 += sign/(2*n_iter+1) # zvyseni iterace n_iter += 1 print("Bylo treba " + str(n_iter) + " iteraci.") ---- ==== Úkol 2 ==== # proposed by LaSer # adapted by kubikji2 import math, random digits = int(input("Zadej presnost vypoctu (pocet desetinnych mist): ")) total_count = 0 in_circle_count = 0 my_pi = 0 accuracy = 10**(-digits) approximations = [] while abs(my_pi - math.pi) > accuracy: x = random.random() y = random.random() total_count += 1 if math.sqrt(x * x + y * y) <= 1: in_circle_count += 1 my_pi = 4 * in_circle_count / total_count #print(my_pi) if (total_count % 100 == 0) and len(approximations) < 100: approximations.append(my_pi) for i in approximations: approximation = approximations[i] print("Hodnota pi po", 100*i, "iteracich je", approximation) print("Konecna hodnota pi: ", my_pi) ---- ==== Úkol 3 ==== # author kubikji2 import random # vyber cislo, co si program "mysli" to_be_guessed = random.randint(0,100) # vstup uzivatele user_guess = -1 # dokud uzivatel neuhodne... while user_guess != to_be_guessed: # ... ptej se ho na tip user_guess = int(input("Tvuj tip: ")) # ... a vypis prislusnou hlasku if user_guess > to_be_guessed: print("Moje cislo je mensi.") elif user_guess < to_be_guessed: print("Moje cislo je vetsi.") else: print("Uhodl jsi!") ---- ==== Úkol 4 ==== # author kubikji2 import random N = 100 # simulace hazeni kostkou rolls = [] for i in range(N): roll1 = random.randint(1,6) roll2 = random.randint(1,6) rolls.append(roll1+roll2) # pro kazdou moznost ... for i in range(2,13): # ... napis jeji hodnotu ... print(str(i)+": ", end="") # ... a projdi vsechny hody ... for i_roll in range(N): # ... pokud je hodnota hodu stejna jako aktualni soucet kostek ... if rolls[i_roll] == i: # ... pridej hvezdicku print("*",end="") # po kazdem moznem souctu, zalom radek print() ----