Záverečný test z Programovania (1)

  1. Do funkcie zisti() sme pridali riadok s kontrolným výpisom. Čo vypíše?

    def zisti(zoz):
        if len(zoz) <= 1:
            return True
        stred = len(zoz) // 2
        print(zoz[stred-1], zoz[stred], zoz[stred-1] <= zoz[stred])
        if zoz[stred-1] > zoz[stred]:
            return False
        return zisti(zoz[:stred]) and zisti(zoz[stred:])
    
    print(zisti([0, 1, 2, 3, 4, 6, 5, 7, 8, 9]))
    

  1. Rekurzívnu funkciu vypis_rek() by sme chceli prepísať na nerekurzívnu verziu. Doplň chýbajúce riadky:

    def vypis_rek(n):
        if n >= 1:
            print(n, end=' ')
            vypis_rek(n - 1)
            print(n, end=' ')
        else:
            print('*', end=' ')
    
    def vypis_nerek(n):
        p = 0
        while n >= 1:
            ________________
            print(n, end=' ')
            ________________
        print('*', end=' ')
        while p > 0:
            ________________
            print(n, end=' ')
            ________________
    

  1. Dopíš chýbajúce časti do funkcie pocet(), ktorá zistí počet výskytov nejakej hodnoty v dvojrozmernom zozname tab:

    def pocet(tab, hodnota):
        vysl = 0
        for i in range(________________):
    
            for j in range(__________________):
    
                if ________________:
    
                    _______________
        return vysl
    

  1. Zisti, čo vráti funkcia vyrob():

    def vyrob(n):
        vysl = [0] * n
        riadok = [1]
        for i in range(n):
            vysl[i] = riadok
            riadok = riadok + [riadok[-1] * 2]
        return vysl
    
    print(vyrob(5))
    

  1. Zadefinovali sme triedu Subor, v ktorej metóda __init__(meno_suboru) vytvorí nový prázdny súbor, pripis(text) pridá na koniec súboru nový riadok so zadaným textom a vypis() vypíše momentálny obsah súboru. Oprav chyby:

    class Subor:
        def __init__(self, meno_suboru):
            with open(self.meno, 'w'):
                self.meno = meno_suboru
    
        def pripis(self, text):
            with open(self.meno, 'a') as subor:
                subor.write(self.text + '\n')
    
        def vypis(self):
            with open(self.meno) as subor:
                for i in range(len(subor)):
                    print(subor[i], end='')
    

  1. Máme takto definovanú triedu Body. Zisti, čo sa vypíše:

    class Body:
        def __init__(self):
            self.body = ''
    
        def pridaj(self):
            self.body += 'a'
            return self
    
        def uber(self):
            self.body += 'b'
            return self
    
        def kolko(self):
            print(self.body.count('a') - self.body.count('b'))
            return self
    
    b = Body().uber().pridaj().pridaj().kolko().pridaj().uber().kolko()
    print(b.body)
    

  1. Máme zadefinovať triedu Kruh, pomocou ktorej sa budú reprezentovať kruhy. Pri kruhoch nás budú zaujímať len polomer, obsah a obvod. Trieda bude používať jediný (inštančný) atribút obvod a ako konštantu pi použite triedny atribút pi. Dopíšte chýbajúce časti:

    class Kruh:
        pi = 3.14159
    
        def __init__(self, r):
            self.obvod = ____________________
    
        def __str__(self):                           # vráti Kruh(polomer)
            return f'Kruh({________________})'
    
        def obsah(self):
            return _____________________
    
        def obvod(self):
            return self.obvod
    
        def polomer(self):
            return ________________________
    
        def kopia(self):
            return ________________________
    

  1. Funkcia najcastejsie() má zistiť, ktoré slovo v textovom súbore (v riadkoch sú slová oddelené medzerami) sa vyskytuje najčastejšie. Dopíšte vyznačené časti:

    def najcastejsie(meno_suboru):
        with open(meno_suboru) as subor:
            slovnik = {}
            for slovo in ____________________:
                try:
                    ______________________
                except KeyError:
                    ______________________
            slovo = None
            for kluc, hodnota in ___________________:
                if slovo is None or ______________________:
                    slovo = _________________
        return slovo
    

  1. Dopíš funkciu zip(p1, p2), ktorá z dvoch postupností rovnakých dĺžok vytvorí zoznam zodpovedajúcich dvojíc, t.j. zoznam, v ktorom prvým prvkom bude dvojica prvých prvkov postupností, druhým prvkom dvojica druhých prvkov, … atď.

    def zip(p1, p2):
        return [__________________________________________________________]
    
    >>> zip('python', [2, 3, 5, 7, 11, 13])
    [('p', 2), ('y', 3), ('t', 5), ('h', 7), ('o', 11), ('n', 13)]
    

  1. Zisti, čo vráti nasledovné volanie funkcie vsetky():

    def vsetky(*post):
        mn = set()
        for i in post:
            for j in post:
                if i < j:
                    mn.add((i, j))
        print(mn)
        return [{*p} for p in mn]
    
    print(vsetky(*[2, 5, 11, 5, 7]))