Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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(" ")


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

TODO: check this

# Jan Tosner
 
A = float(input("Zadejte cislo A: "))
B = float(input("Zadejte cislo B: "))
x = 1
while x != 0:
    A = A+1
    x = A%B
print("Nejmensi cislo delitelne cislem B a je vetsi nez cislo A je: "+str(A)+".")


Ú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 = 5
# 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()


courses/pri-bootcamp/solutions/day3.txt · Last modified: 2022/09/15 11:53 by kubikji2