Priebežný test z Programovania (1) 2018/2019

1. Zisti, čo vypočíta táto funkcia:

def funkcia(n):
    sucet = 0
    for i in range(n):
        for j in range(n - i):
            sucet += j
    return sucet

print(funkcia(5))

2. Máme mince a bankovky s hodnotami 1, 2, 5, 10, 20, 50, 100. Napísali sme program, ktorý zisťuje, ako sa dá poskladať ľubovoľná suma peňazí minimálnym počtom kusov týchto peňazí. Použili sme len jeden for-cyklus, v ktorom bol jeden if, nejaké priradenia a tiež print. Dopíš:

def mincovka(suma):
    for hodnota in __________________________:



            print(f'{n} krát hodnota {hodnota}')
>>> mincovka(346)
3 krát hodnota 100
2 krát hodnota 20
1 krát hodnota 5
1 krát hodnota 1

3. Čo vypíše?

def test(post):
    vysl = tuple(post[:1])
    for prvok in post[1:]:
        vysl = (prvok,) + vysl + (prvok,)
    return vysl[:len(post)]

print(test('python'))

4. Napísali sme funkciu tretia_odmocnina, ktorá podobným algoritmom, ako sa počítala druhá odmocnina delením intervalu na polovicu v prednáške, vypočíta tretiu odmocninu zadaného čísla. Oprav chyby:

def tretia_odmocnina(cislo, eps=0.001):
    od, do = 1, cislo
    x = (do - od) / 2
    while abs(x ** 3 - cislo) < eps:
        if x ** 3 < cislo:
            do = x
        else:
            od = x
        x = (do - od) / 2
    return x

5. Čo nakreslí táto funkcia do grafickej plochy canvas (stačí vypísať premennú zoz)? Pomôže ti štvorcová sieť, v ktorej štvorček je 10x10.

def kresli(prvy, druhy):
    zoz = [prvy[0], druhy[0]]
    for i in range(1, len(prvy)):
        a, b = prvy[i], druhy[i]
        for j in a, zoz[-1], a, b:
            zoz.append(j)
    canvas.create_line(zoz)

kresli((30, 50, 30, 10, 20, 30), (50, 30, 10, 30, 40, 50))

6. Napísali sme funkciu vloz_medzi, ktorá dostáva súbor celých čísel (v každom riadku je práve jedno číslo) a vytvorí taký, v ktorom budú tie isté čísla ale medzi každé dva riadky ešte vloží jeden so súčtom čísel v týchto dvoch riadkoch (opäť v každom riadku bude práve jedno číslo). Oprav chyby v programe:

def vloz_medzi(meno_suboru1, meno_suboru2):
    with open('r', meno_suboru1) as file1:
        with open('w', meno_suboru2) as file2:
            cislo1 = file1.readline()
            for riadok in enumerate(file1):
                print(cislo1, file=file2)
                cislo2 = riadok
                print(cislo1 + cislo2, file=file2)
                cislo1 = ''
            print(cislo1, file=file2)
  • ak vstupný súbor postupne v riadkoch obsahuje hodnoty: 1, 3, 2, 1, potom výstupný bude v riadkoch obsahovať tieto čísla: 1, 4, 3, 5, 2, 3, 1 (v každom riadku práve jedno číslo)


7. Napísali sme funkciu je_palindrom, ktorá zisťuje (vráti True alebo False), či je zadaný reťazec palindrom. Dopíš:

def je_palindrom(retazec):
    i, j = _________________
    while ___________________________:
        i += 1
        j -= 1
    return i >= j

print(je_palindrom('JeleNoviPivoNeleJ')))

8. Napísali sme funkciu, v ktorej sa náhodne hádže hracou kockou (čísla od 1 do 6) dovtedy, kým nepadnú za sebou tri šestky. Funkcia vráti počet, koľkokrát sa muselo hádzať. Oprav v nej chyby:

def tri_sestky():
    pocet = pocet6 = 0
    while pocet6 <= 0:
        hod = random.randint(1, 6)
        if hod == 6:
            pocet6 += 1
        else:
            pocet6 -= 1
        pocet += pocet6
    return pocet

9. Napísali sme funkciu len_cele, ktorá z danej n-tice vyhodí všetky hodnoty, ktoré nie sú typu int. Funkcia vráti (return) túto novú n-ticu.

def len_cele(ntica):
    vysl = ____________________
    b = True
    while b:
        b = False
        for prvok in vysl:
            if type(prvok) != int:
                vysl.remove(_______________)
                b = True
                break
    return ____________________
>>> len_cele((0, 1, 2., '0', 1, (2, 2)))
(0, 1, 1)

10. Napísali sme funkciu prerob, ktorá z daného celého čísla vyrobí reťazec, ale tak, že cifry zoskupí do trojíc (sprava) a oddelí podčiarkovníkom. Využili sme funkciu join, preto sme z čísla najprv vyrobili zoznam trojznakových reťazcov. Doplň kód.

def prerob(cislo):
    cislo = str(cislo)
    vysl = []
    j = len(cislo)
    while ____________:
        i = max(____________________)
        vysl.insert(_______________________)
        j -= 3
    return '_'.join(vysl)
>>> prerob(12345678)
'12_345_678'