Priebežný test z Programovania (1) 2016/2017

  1. Čo presne vypíše tento program?

    for i in 4, 7, 1, 2, 0, 5:
        while i:
            print(end=str(i))
            i -= 1
        print()
    

  1. Funkcia zisti(cislo) vráti True alebo False podľa toho, či je dané číslo dokonalé alebo nie , t. j. či platí, že súčet všetkých deliteľov menších ako samotné číslo sa rovná samotnému číslu. V definícii funkcie je jedna chyba. Opravte ju.

    def zisti(cislo):
        x, y = 0, 1
        while y < cislo and x < cislo:
            if cislo % y == 0:
                x += y
            y += 1
        return x == cislo
    

  1. Funkciu nahrad_samo(text, znak) v zadanom texte nahradí všetky samohlásky ('aeiouy') zadaným znakom. Doplňte chýbajúce časti programu.

    def nahrad_samo(text, znak):
        for i in range(len(text)):
            if _______________________:
                _________________________________________________
        return text
    

  1. Funkcia sifra(text) nejako zakóduje zadaný text:

    def sifra(text, n):
        text = (text + 'x' * n * n)[:n * n]
        vysl = ''
        for k in range(n):
            vysl += text[k::n]
        return vysl
    

    Zistite, ako sa zakódujú nasledovné dva reťazce:

    sifra('bratislava', 3)
    sifra('programujeme v pythone', 5)
    

  1. Nasledovný program:

    with open('subor1.txt') as t1:
        n = int(t1.readline())
        with open('subor2.txt', 'w') as t2:
            for h in range(n):
                for i in range(n):
                    p = int(t1.readline())
                    if i == 0:
                        s = p
                    else:
                        s += p
                    print(p, end=' ', file=t2)
                print(s, file=t2)
    

    vytvoril takýto súbor:

    3 1 7 11
    7 3 1 11
    1 7 3 11
    

    Aký bol obsah vstupného súboru 'subor1.txt'?


  1. Funkcia sucet(subor) otvorí zadaný textový súbor (tento súbor obsahuje len celé čísla, aj záporné) a vypočíta súčet všetkých týchto čísel. Opravte všetky chyby, pričom nemeňte ideu algoritmu, t. j. čítanie súboru po znakoch, postupné skladanie pomocného reťazca a pričitovanie reťazca prevedeného na celé čísla.

    def sucet(meno_suboru):
        vysl = ''
        with open(meno_suboru, 'w') as t:
            ret, znak = '', t.read(1)
            while znak != '':
                if znak in ' \n':
                    if ret != '':
                        vysl = int(vysl + ret)
                    ret = ''
                elif '0' <= znak <= '9' and znak == '-':
                    ret = znak + ret
                znak = t.read(1)
        if ret != '':
            vysl += int(ret)
        return vysl
    

  1. Funkcia rozdel(n_tica) rozloží prvky vstupnej n-tice na dve n-tice, pričom prvá obsahuje prvky na párnych pozíciách (0., 2., 4., …) a druhá na nepárnych (1., 3., 5., …). Dopíšte do funkcie dva chýbajúce riadky.

    def rozdel(n_tica):
        prva = druha = ()
        for i in range(len(n_tica)):
            if i % 2:
                __________________________
            else:
                __________________________
        return prva, druha
    

  1. Funkcia rozloz(n_tica) nejako spracuje prvky vstupnej n-tice a vytvorí z nich inú n-ticu a tú vráti ako výsledok:

    def rozloz(n_tica):
        vysl = p0 = ()
        for p1 in n_tica:
            for p2 in p1:
                p0 += p2,
                if len(p0) == 2:
                    vysl += p0,
                    p0 = ()
        if len(p0):
            vysl += p0,
        return vysl
    

    Zistite, čo vráti volanie:

    rozloz(((0,), (), (9, 0, 7), (1, 2, 3)))
    

  1. Zoznam súradníc obsahuje dvojice celých čísel. Funkcia prerob1(zoznam) prerobí vstupný zoznam tak, že každú dvojicu rozloží na 2 prvky. Funkcia nič nevracia, len mení obsah zoznamu. Dopíšte do funkcie vyznačenú časť.

    def prerob1(zoznam):
        for i in range(___________________________________):
            zoznam[i:i+1] = zoznam[i]
    

    napr.

    >>> xy = [(100, 50), (0, -20), (350, 200)]
    >>> prerob1(xy)
    >>> xy
    [100, 50, 0, -20, 350, 200]
    

  1. Dopíšte funkciu prevrat(zoznam), tak aby z pôvodného zoznamu vyrobila zoznam s rovnakými hodnotami, ale v opačnom poradí. V dopisovanej časti funkcie použite len metódy append() a pop() ale nepoužite žiadne [ ] zátvorky.

    def prevrat(zoznam):
        vysl = list()
    
    
    
    
        return vysl
    

    Funkcia nesmie zmeniť obsah pôvodného vstupného zoznamu.