Riešenie 8. cvičenia


  1. Riešenie:

    def vypis(zoznam, pocet):
        for i, prvok in enumerate(zoznam):
            if (i+1) % pocet == 0:
                print(prvok, end='\n')
            else:
                print(prvok, end=' ')
        print()
    

    alebo

    def vypis(zoznam, pocet):
        p = 1
        for prvok in zoznam:
            if p == pocet:
                print(prvok, end='\n')
                p = 1
            else:
                print(prvok, end=' ')
                p += 1
        print()
    

    alebo

    def vypis(zoznam, pocet):
        p = 0
        for prvok in zoznam:
            print(prvok, end=' ')
            p = (p+1) % pocet
            if p == 0:
                print()
        if p:
            print()
    

  1. Riešenie:

    def najdlhsie(zoznam):
        naj = zoznam[0]
        for prvok in zoznam:
            if len(prvok) > len(naj):
                naj = prvok
        return naj
    

  1. Riešenie:

    def start(zoznam, n):
        vysl = []
        for prvok in zoznam:
            vysl.append(prvok[:n])
        return vysl
    

  1. Riešenie:

    def cele(zoznam):
        vysl = []
        for prvok in zoznam:
            vysl.append(int(prvok))
        return vysl
    

  1. Riešenie:

    def rozdel(retazec):
        vysl, prvok = [], ''
        for znak in retazec+' ':
            if znak == ' ' or znak == '\n':
                if prvok:
                    vysl.append(prvok)
                    prvok = ''
            else:
                prvok += znak
        return vysl
    

  1. Riešenie:

    def kresli(r, zoznam):
        x, y = 10+r, 100
        for farba in zoznam:
            canvas.create_oval(x-r, y-r, x+r, y+r, fill=farba)
            x += 2*r
    

  1. Riešenie:

    import random
    
    def nahodne_farby(n):
        vysl = []
        for i in range(n):
            vysl.append(f'#{random.randrange(256**3):06x}')
        return vysl
    

  1. Riešenie:

    def histogram(zoznam):
        x, y = 10, 250
        sirka = 360 // len(zoznam)
        for hodnota in zoznam:
            farba = f'#{random.randrange(256**3):06x}'
            canvas.create_rectangle(x, y, x+sirka, y-hodnota, fill=farba)
            x += sirka
    

  1. Riešenie:

    def zluc(zoz1, zoz2):
        n = min(len(zoz1), len(zoz2))
        vysl = []
        for i in range(n):
            vysl += [zoz1[i], zoz2[i]]
        return vysl + zoz1[n:] + zoz2[n:]
    

  1. Riešenie:

    def spoj(zoznam):
        vysl = ''
        for prvok in zoznam:
            if vysl:
                vysl += ' '
            vysl += str(prvok)
        return vysl
    

  1. Riešenie:

    def replace(zoznam, co, zaco):
        for i, prvok in enumerate(zoznam):
            if prvok == co:
                zoznam[i] = zaco
    

  1. Riešenie:

    def dvojice(zoznam):
        i = 0
        while i < len(zoznam)-1:
            zoznam[i:i+2] = [zoznam[i]+zoznam[i+1]]
            i += 1
    

  1. Riešenie:

    def fibonacci(n):
        vysl = []
        f1, f2 = 0, 1
        for i in range(n):
            vysl.append(f1)
            f1, f2 = f2, f1+f2
        return vysl
    

  1. Riešenie:

    def rozklad(x):
        vysl = []
        i = 2
        while x > 1:
            if x % i == 0:
                vysl.append(i)
                x //= i
            else:
                i += 1
        return vysl
    

  1. Riešenie:

    def postupnost(x):
        vysl = []
        while x != 1:
            vysl.append(x)
            if x % 2:
                x = 3 * x + 1
            else:
                x //= 2
        vysl.append(x)
        return vysl
    

  1. Riešenie:

    def vyhod_neparne(zoznam):
        i = 0
        while i < len(zoznam):
            if zoznam[i] % 2:
                zoznam.pop(i)     # alebo   del zoznam[i]
            else:
                i += 1
    

  1. Riešenie:

    def vloz_za_kazde(zoznam, hodnota):
        for i in range(len(zoznam), 0, -1):
            zoznam.insert(i, hodnota)
    

    alebo

    def vloz_za_kazde(zoznam, hodnota):
        for i in range(1, 2*len(zoznam), 2):
            zoznam.insert(i, hodnota)
    

  1. Riešenie:

    import random
    
    def nahodne_body(n):
        vysl = []
        for i in range(n):
            vysl += [random.randint(10, 370), random.randint(10, 250)]
        return vysl
    

  1. Riešenie:

    from math import sin, cos, radians
    
    def stvorec(x, y, r, uhol):
        vysl = []
        for u in range(uhol, 360+uhol, 90):
            vysl.append(x + r*cos(radians(u)))
            vysl.append(y + r*sin(radians(u)))
        return vysl