Riešenie 9. cvičenia


  1. Funguje:

    >>> cele((1.1, 2.9, 3.14))
    [1, 2, 3]
    >>> cele((' 13', '4', '2345'))
    [13, 4, 2345]
    >>> cele(str(2**20))
    [1, 0, 4, 8, 5, 7, 6]
    >>> cele(range(2, 10, 3))
    [2, 5, 8]
    

    Ak súbor obsahuje, napríklad:

       48
    11213
    -67
    

    potom:

    >>> cele(open('subor1.txt'))
    [48, 11213, -67]
    

  1. Riešenie:

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

    alebo:

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

  1. Riešenie:

    def zdvoj(post):
        vysl = type(post)()
        for prvok in post:
            vysl += prvok, prvok
        return vysl
    

    alebo:

    def zdvoj(post):
        vysl = []
        for prvok in post:
            vysl.extend((prvok, prvok))
        if type(post) == tuple:
            vysl = tuple(vysl)
        return vysl
    

  1. Riešenie:

    def od_najvacsieho(zoznam):
        return list(zoznam) == sorted(zoznam)[::-1]
    

  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)
    

  1. Riešenie:

    import tkinter
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    def kruh(trojica):
        r, x, y = trojica
        canvas.create_oval(x-r, y-r, x+r, y+r, fill='blue')
    

  1. Riešenie:

    import tkinter
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    def text(retazec):
        slovo, x, y = retazec.split()
        x, y = int(x), int(y)
        sir = len(slovo) * 4
        canvas.create_rectangle(x-sir, y-8, x+sir, y+8, fill='white')
        canvas.create_text(x, y, text=slovo)
    

  1. Riešenie:

    def prevrat_riadky(meno_suboru):
        with open(meno_suboru, encoding='utf-8') as t:
            text = t.read()
        riadky = text.split('\n')
        for i, riadok in enumerate(riadky):
            riadky[i] = ' '.join(riadok.split()[::-1])
        text = '\n'.join(riadky)
        with open(meno_suboru, 'w', encoding='utf-8') as t:
            t.write(text)
    
    prevrat_riadky('subor.txt')
    

  1. Riešenie:

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

    alebo:

    def enum(postupnost):
        vysl = []
        i = 0
        for prvok in postupnost:
            vysl.append((i, prvok))
            i += 1
        return tuple(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:

    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):
        xy1 = xy[0] + dlzka*cos(radians(uhol)), xy[1] + dlzka*sin(radians(uhol))
        sipka(xy, xy1)
        return xy1
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    ##xy = (150, 150)
    ##for u in range(0, 360, 10):
    ##    vektor(xy, 100, u)
    
    def n_uholnik(n, d, xy):
        for i in range(n):
            xy = vektor(xy, d, 360/n * i)
    
    n_uholnik(5, 70, (150, 50))