Riešenie úloh 8. cvičenia


  1. Riešenie:

    def vypis_typy(zoznam):
        for prvok in zoznam:
            if type(prvok) == int or type(prvok) == float:
                print(prvok, '- číslo')
            elif type(prvok) == str:
                print(prvok, '- reťazec')
            else:
                print(prvok, '- iný typ')
    

  1. Riešenie:

    def nakup(zoznam):
        vysl = 0
        for i in range(0, len(zoznam), 2):
            vysl += zoznam[i] * zoznam[i+1]
        return vysl
    

  1. Riešenie:

    def sucin(zoznam):
        vysl = 1
        for p in zoznam:
            vysl *= p
        return vysl
    

  1. Riešenie:

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

    alebo

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

    alebo

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

  1. Riešenie:

    def spoj(zoznam, retazec=''):
        vysl = ''
        if zoznam:
            vysl = str(zoznam[0])
            for prvok in zoznam[1:]:
                vysl += retazec + str(prvok)
        return vysl
    

  1. Riešenie:

    def zacina(zoznam, zacina_retazcom):
        vysl = []
        for pr in zoznam:
            if pr[:len(zacina_retazcom)] == zacina_retazcom:
                vysl.append(pr)
        return vysl
    

    alebo:

    def zacina(zoznam, zacina_retazcom):
        vysl = []
        for pr in zoznam:
            if pr.startswith(zacina_retazcom):
                vysl.append(pr)
        return vysl
    

  1. Riešenie:

    def zostupne(zoznam):
        for i in range(1, len(zoznam)):
            if zoznam[i-1] < zoznam[i]:
                return False
        return True
    

  1. Riešenie:

    def postupnost(start, koniec, krok=1):
        vysl = []
        x = start
        if krok:
            while krok > 0 and x < koniec or krok < 0 and x > koniec:
                vysl.append(x)
                x += krok
        return vysl
    

  1. Riešenie:

    def sucet(zoznam1, zoznam2):
        vysl = []
        ix = min(len(zoznam1), len(zoznam2))
        for i in range(ix):
            vysl.append(zoznam1[i] + zoznam2[i])
        return vysl + zoznam1[ix:] + zoznam2[ix:]
    

  1. Riešenie:

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

  1. Riešenie:

    def kresli_stvorce(zoznam):
        x, y = 10, 250
        for i in range(0, len(zoznam), 2):
            a, farba = zoznam[i:i + 2]
            canvas.create_rectangle(x, y, x + a, y - a, fill=farba)
            x += a
    

  1. Riešenie:

    def nahodny_zoznam(n, od, do):
        vysl = []
        for i in range(n):
            vysl.append(random.randint(od, do))
        return vysl
    
    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 kresli_polygon(zoznam_x, zoznam_y):
        zoz = []
        for i in range(len(zoznam_x)):
            zoz.extend([zoznam_x[i], zoznam_y[i]])
        canvas.create_polygon(zoz, outline='black',
                              fill=f'#{random.randrange(256**3):06x}')
    

  1. Riešenie:

    def replace_novy(zoznam, co, zaco):
        vysl = []
        for prvok in zoznam:
            if prvok == co:
                prvok = zaco
            vysl.append(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(zoznam, n):
        for i in range(n):
            zoznam.append(sum(zoznam[-2:]))
    

  1. Riešenie:

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

  1. Riešenie:

    def zoznam_cifier(cislo):
        vysl = list(str(cislo))
        for i in range(len(vysl)):
            vysl[i] = int(vysl[i])
        return vysl
    

  1. Riešenie:

    def cislo_zo_zoznamu(zoznam):
        vysl = ''
        for prvok in zoznam:
            vysl += str(prvok)
        return int(vysl)
    

  1. Riešenie:

    def citaj_cisla(meno_suboru):
        vysl = []
        with open(meno_suboru) as subor:
            for riadok in subor:
                vysl.append(int(riadok))
        return vysl
    

  1. Riešenie:

    def prevrat(meno_suboru):
        with open(meno_suboru) as subor:
            zoznam = subor.readlines()
        with open(meno_suboru, 'w') as subor:
            for riadok in reversed(zoznam):
                subor.write(riadok)
    

  1. Riešenie:

    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