Riešenie úloh 9. cvičenia


  1. Riešenie:

    def posun(zoznam):
        zoznam.append(zoznam.pop(0))
    

  1. Riešenie:

    def vyhod_none(ntica):
        vysl = ()
        for prvok in ntica:
            if prvok != None:
                vysl += (prvok,)
        return vysl
    

    alebo

    def vyhod_none(ntica):
        vysl = []
        for prvok in ntica:
            if prvok != None:
                vysl.append(prvok)
        return tuple(vysl)
    

    alebo

    def vyhod_none(ntica):
        vysl = list(ntica)
        while None in vysl:
            vysl.remove(None)
        return tuple(vysl)
    

  1. Riešenie:

    import random
    
    def dve_kocky(pocet):
        zoz = [0] * 13
        for i in range(pocet):
            zoz[random.randint(1, 6) + random.randint(1, 6)] += 1
        return zoz
    

  1. Riešenie:

    def desiatkova(cislo):
        vysl = []
        for cifra in str(cislo):
            vysl.append(int(cifra))
        return vysl
    

  1. Riešenie:

    def dvojkova(cislo):
        vysl = []
        for cifra in f'{cislo:b}':
            vysl.append(int(cifra))
        return vysl
    

  1. Riešenie:

    def z_dvojkovej(zoznam):
        reťazec = ''
        for cifra in zoznam:
            reťazec += str(cifra)
        return int(reťazec, 2)
    

  1. Riešenie:

    import random
    
    def nahodne_body(pocet):
        vysl = []
        for i in range(pocet):
            vysl.append((random.randrange(380), random.randrange(260)))
        return vysl
    

  1. Riešenie:

    import tkinter
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    canvas.create_line(sorted(nahodne_body(100)))
    

  1. Riešenie:

    def sort_y(zoznam):
        for i, (x, y) in enumerate(zoznam):
            zoznam[i] = (y, x)
        zoznam.sort()
        for i, (y, x) in enumerate(zoznam):
            zoznam[i] = (x, y)
    
    canvas.create_line(sort_y(nahodne_body(100)))
    

  1. Riešenie:

    def prerob(cislo):
        cislo = str(cislo)
        vysl = []
        while cislo:
            vysl.append(cislo[-3:])
            cislo = cislo[:-3]
        return '_'.join(reversed(vysl))
    

  1. Riešenie:

    import tkinter
    
    def sipka(xy1, xy2):
        canvas.create_line(xy1, xy2, arrow='last')
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    canvas.create_rectangle(150, 50, 250, 150, fill='gold')
    sipka((150, 50), (250, 50))
    sipka((250, 50), (250, 150))
    sipka((250, 150), (150, 150))
    sipka((150, 150), (150, 50))
    

  1. Riešenie:

    import tkinter
    from math import sin, cos, radians
    
    def sipka(xy1, xy2):
        canvas.create_line(xy1, xy2, arrow='last')
    
    def vektor(xy, dlzka, uhol):
        x, y = xy
        xy1 = x + dlzka*cos(radians(uhol)), y + dlzka*sin(radians(uhol))
        sipka(xy, xy1)
        return xy1
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    poz = (200, 120)
    for uhol in range(0, 720, 144):
        poz = vektor(poz, 100, uhol)
    

  1. Riešenie:

    def zoznam_cisel(retazec):
        vysl = []
        for prvok in retazec.split():
            vysl.append(int(prvok))
        return vysl
    

    alebo

    def zoznam_cisel(retazec):
        vysl = retazec.split()
        for i, prvok in enumerate(vysl):
            vysl[i] = int(prvok)
        return vysl
    

  1. Riešenie:

    def retazec(zoznam):
        pom = []
        for prvok in zoznam:
            pom.append(str(prvok))
        return ' '.join(pom)
    

  1. Riešenie:

    def zadaj(pocet):
        while True:
            zoz = input(f'zadaj {pocet} čísla: ').split()
            if len(zoz) == pocet:
                for i in range(pocet):
                    zoz[i] = int(zoz[i])
                return zoz
    

  1. Riešenie:

    def zisti(slovo1, slovo2):
        return sorted(slovo1) == sorted(slovo2)
    

  1. Riešenie:

    def vsetky_rozne(zoznam):
        zoz = sorted(zoznam)
        for i in range(len(zoz) - 1):
            if zoz[i] == zoz[i + 1]:
                return False
        return True
    

  1. Riešenie:

    def enum(postupnost):
        cislo = 0
        vysl = []
        for prvok in postupnost:
            vysl.append((cislo, prvok))
            cislo += 1
        return tuple(vysl)
    

    alebo

    def enum(postupnost):
        cislo = 0
        vysl = ()
        for prvok in postupnost:
            vysl += ((cislo, prvok),)
            cislo += 1
        return vysl
    

  1. Riešenie:

    def moj_zip(post1, post2):
        vysl = []
        for i in range(min(len(post1), len(post2))):
            vysl.append((post1[i], post2[i]))
        return vysl
    

  1. Riešenie:

    def enum(postupnost):
        return tuple(moj_zip(range(len(postupnost)), postupnost))
    

  1. Riešenie:

    def od_zip(zoznam):
        z1, z2 = [], []
        for p1, p2 in zoznam:
            z1.append(p1)
            z2.append(p2)
        return z1, z2
    

  1. Riešenie:

    def do_dvojic(zoznam):
        vysl = []
        for i in range(0, len(zoznam), 2):
            vysl.append(tuple(zoznam[i:i + 2]))
        return vysl
    

    alebo pomocou moj_zip z úlohy (19)

    def do_dvojic(zoznam):
        return moj_zip(zoznam[::2], zoznam[1::2])
    

  1. Riešenie:

    import random
    
    def pomiesaj(zoznam):
        n = len(zoznam)
        for i in reversed(range(1, n)):
            x = random.randint(0, i)
            zoznam[x], zoznam[i] = zoznam[i], zoznam[x]