Riešenie úloh 8. cvičenia


  1. Riešenie:

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

    alebo:

    def ntica_cisel(retazec):
        return [int(i) for i in retazec.split()]
    

  1. Riešenie:

    def retazec(ntica):
        zoz = []
        for i in ntica:
            zoz.append(str(i))
        return ' '.join(zoz)
    

    alebo:

    def retazec(ntica):
        return ' '.join(str(i) for i in ntica)
    

  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 tuple(zoz)
    

  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:

    import random
    
    def nahodne(n):
        return [random.randrange(2 * n) for i in range(n)]
    

  1. Riešenie:

    import tkinter
    import random
    
    def nahodne_body(pocet):
        return [(random.randrange(380), random.randrange(260)) for i in range(pocet)]
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    canvas.create_line(sorted(nahodne_body(100)))
    
    tkinter.mainloop()
    

  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)
    
    zoz = nahodne_body(100)
    sort_y(zoz)
    canvas.create_line(zoz)
    

  1. Riešenie:

    import tkinter
    
    def sipka(xy1, xy2):
        canvas.create_line(xy1, xy2, arrow='last', width=3)
    
    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))
    
    tkinter.mainloop()
    

    druhá časť úlohy:

    import tkinter
    from math import sin, cos, radians
    
    def sipka(xy1, xy2):
        canvas.create_line(xy1, xy2, arrow='last', width=3)
    
    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)
    
    tkinter.mainloop()
    

  1. Riešenie:

    def enum(postupnost):
        vysl = ()
        for i in range(len(postupnost)):
            vysl += ((i, postupnost[i]),)
        return vysl
    

    alebo:

    def enum(postupnost):
        return tuple((i, postupnost[i]) for i in range(len(postupnost)))
    

  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
    

    alebo:

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

    potom enum:

    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 (10)

    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]