Riešenie úloh 7. cvičenia


  1. Riešenie:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        subor.readline()
        print('druhý riadok suboru:', repr(subor.readline().rstrip('\n')))
    

  1. Riešenie:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        riadok = subor.readline()
    print('každý druhý znak:', repr(riadok[1:-1:2]))
    

  1. a.Riešenie - čítaním pomocou readline() a while-cyklu:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        pocet = dlzka = 0
        riadok = subor.readline()
        while riadok:
            if len(riadok) > dlzka:
                dlzka = len(riadok)
            pocet += 1
            riadok = subor.readline()
    print('počet riadkov súboru:', pocet)
    print('najdlhší riadok má', dlzka, 'znakov')
    

    b.Riešenie - čítaním riadkov pomocou for-cyklu:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        pocet = dlzka = 0
        for riadok in subor:
            if len(riadok) > dlzka:
                dlzka = len(riadok)
            pocet += 1
    print('počet riadkov súboru:', pocet)
    print('najdlhší riadok má', dlzka, 'znakov')
    

    c.Riešenie - prečítaním naraz celého súboru pomocou read():

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        cely = subor.read()
    pocet = dlzka = 0
    while cely:
        i = cely.find('\n') + 1
        if i == 0:
            i = len(cely)
        if i > dlzka:
            dlzka = i
        pocet += 1
        cely = cely[i:]
    print('počet riadkov súboru:', pocet)
    print('najdlhší riadok má', dlzka, 'znakov')
    

  1. Riešenie:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        print('riadky s tromi slovami:')
        for riadok in subor:
            if riadok.count(' ') == 2:
                print(riadok, end='')
    

  1. Riešenie:

    meno_suboru = input('zadaj meno súboru: ')
    with open(meno_suboru, 'r', encoding='utf-8') as subor:
        print('druhé slová:')
        for riadok in subor:
            if riadok.count(' ') >= 2:
                i1 = riadok.find(' ')
                i2 = riadok.find(' ', i1+1)
                print(riadok[i1+1:i2])
    

  1. Riešenie:

    def priemer(meno_suboru):
        with open(meno_suboru, 'r') as subor:
            sucet = pocet = 0
            for riadok in subor:
                sucet += int(riadok)
                pocet += 1
        if pocet:
            return sucet / pocet
        return 'prázdny súbor'
    

  1. Riešenie:

    def riadky_s_textom(meno_suboru, text):
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            for riadok in subor:
                if text in riadok:
                    print(riadok, end='')
    

  1. Riešenie:

    def posledny_riadok(meno_suboru):
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            riadok = ''
            for riadok in subor:
                pass
        return riadok.rstrip('\n')
    
    def predposledny_riadok(meno_suboru):
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            predposledny = posledny = ''
            for riadok in subor:
                predposledny, posledny = posledny, riadok
        return predposledny.rstrip('\n')
    
    def najdlhsi_riadok(meno_suboru):
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            najdlhsi = subor.readline()
            for riadok in subor:
                if len(riadok) > len(najdlhsi):
                    najdlhsi = riadok
        return najdlhsi.rstrip('\n')
    

  1. Riešenie:

    def ity(meno_suboru, index):
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            if index >= 0:
                for i, riadok in enumerate(subor):
                    if i == index:
                        return riadok.rstrip('\n')
        return None     # chybný index
    

  1. Riešenie:

    import tkinter
    
    def vypis_subor(meno_suboru):
        y = 20
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            for riadok in subor:
                canvas.create_text(190, y, text=riadok)
                #canvas.create_text(50, y, text=riadok, anchor='nw')
                y += 16
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    vypis_subor('text3.txt')
    

  1. Riešenie:

    import tkinter
    
    def kresli(meno_suboru):
        with open(meno_suboru, 'r') as subor:
            x0 = None   # nejaká nečíselná hodnota
            for riadok in subor:
                i = riadok.find(' ')
                x, y = int(riadok[:i]), int(riadok[i:])
                canvas.create_oval(x-3, y-3, x+3, y+3)
                if x0 != None:
                    canvas.create_line(x0, y0, x, y)
                x0, y0 = x, y
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    kresli('body.txt')
    

  1. Riešenie:

    import tkinter
    
    def kresli(meno_suboru):
        with open(meno_suboru, 'r') as subor:
            x0 = None
            for riadok in subor:
                i = riadok.find(' ')
                if i < 0:             # ak v riadku nie je medzera
                    x0 = None
                else:
                    x, y = int(riadok[:i]), int(riadok[i:])
                    canvas.create_oval(x-3, y-3, x+3, y+3)
                    if x0 != None:
                        canvas.create_line(x0, y0, x, y)
                    x0, y0 = x, y
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    kresli('body1.txt')
    

  1. Riešenie:

    import tkinter
    
    def do_riadkov(meno_suboru, sirka):
        x, y = 50, 50
        with open(meno_suboru, 'r') as subor:
            for i, farba in enumerate(subor):
                if i and i % sirka == 0:
                    x = 50
                    y += 33
                canvas.create_rectangle(x, y, x+30, y+30, fill=farba.strip())
                x += 33
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    do_riadkov('farby.txt', 4)
    

  1. Riešenie:

    import random
    
    def nahodne_cisla(meno_suboru, pocet):
        with open(meno_suboru, 'w') as subor:
            for i in range(pocet):
                print(random.randint(100, 999), file=subor)
    

  1. Riešenie:

    def vyrob(meno_suboru, pocet, text):
        with open(meno_suboru, 'w') as subor:
            subor.write(f'''# program pre vyrob({meno_suboru!r}, {pocet}, {text!r})
    i = 0
    while i < {pocet}:
        print({text!r})
        i += 1
    ''')
    
    vyrob('skript.py', 20, 'Programujem v Pythone')
    import skript
    

  1. Riešenie:

    import random
    
    def nahodne_body(meno_suboru, pocet):
        with open(meno_suboru, 'w') as subor:
            for i in range(pocet):
                x = random.randint(10, 370)
                y = random.randint(10, 250)
                print(x, y, file=subor)
    

  1. Riešenie:

    from math import sin, cos, radians
    
    def body_na_kruznici(meno_suboru, pocet, r, x, y):
        with open(meno_suboru, 'w') as subor:
            uhol = 0
            for i in range(pocet+1):
                xx = x + r*cos(radians(uhol))
                yy = y + r*sin(radians(uhol))
                print(round(xx), round(yy), file=subor)
                uhol += 360 / pocet
    

  1. Riešenie:

    def pridaj(meno_suboru, text):
        with open(meno_suboru, 'a', encoding='utf-8') as subor:
            print(text, file=subor)
    

  1. Riešenie:

    def vyhod_riadok(meno_suboru, index):
        if index < 0:
            with open(meno_suboru, 'r', encoding='utf-8') as subor:
                for riadok in subor:
                    index += 1
        with open(meno_suboru, 'r', encoding='utf-8') as subor:
            cely = ''
            for i, riadok in enumerate(subor):
                if i != index:
                    cely += riadok
        with open(meno_suboru, 'w', encoding='utf-8') as subor:
            subor.write(cely)