Riešenie 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()[:-1]))
    

    alebo

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

  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. Riešenie:

    1. čí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')
      
    2. čí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')
      
    3. 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 > 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:

    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[:-1]
    
    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[:-1]
    
    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[:-1]
    

  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
        return sucet / pocet
    

  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
            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:

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

  1. Riešenie:

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

  1. Riešenie:

    from random import randint
    
    def nahodne_body(meno_suboru, pocet):
        with open(meno_suboru, 'w') as subor:
            for i in range(pocet):
                x = randint(10, 370)
                y = 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