1. Priebežný test z Programovania (1) z 2020¶
V úlohách, kde to nie je priamo napísané, netreba odovzdávať funkciu ani žiaden postup, stačí priradiť hodnoty do pripravených premenných. V odovzdanom riešení nepoužívaj import
a ani prvky Pythonu, ktoré sme sa neučili v prvých 13. prednáškach.
Napíš funkciu
najdlzka(zoznam)
, ktorá vráti dĺžku najdlhšieho riadku textového súboru. Predpokladaj, že súbor sme už prečítali a jeho obsah sme prekopírovali po znakoch do zoznamu, napríklad taktolist(subor.read())
. Dĺžku riadku počítaj bez znaku'\n'
.def najdlzka(zoznam): ... return ...
Funkcia
urob(p)
spracuje nejakú postupnosť (napríklad je to zoznam, n-tica alebo reťazec):def urob(p): a, b, c = p[:5], p[4:], p[2:7] return a[-1:len(c)] + b[1:] + c[:] + a[:-1] + b[0:1]
Do premennej
postupnost
priraď takú hodnotu, pre ktorú volanie dostaneme:>>> postupnost = ... >>> urob(postupnost) ['m', 'b', 'e', 'r', 'v', 'e', 'm', 'b', 'e', 'n', 'o', 'v', 'e', 'm']
Nasledovná funkcia:
def kresli(): d, dx, dy, x, y = 5, 4, 1, 0, 0 for i in range(300): x1, y1 = d * dx, d * dy canvas.create_line(x, y, x1, y1) x, y, dx, dy, d = x1, y1, -dy, dx, d*1.01
nakreslí časť nejakej krivky. Zisti celkovú dĺžku kreslených čiar - aj tých, ktoré sú mimo
canvas
. Výsledok priraď do premennej:dlzka_ciar = ...
Predpokladám, že máš nejakú funkciu, ktorá danú postupnosť (napríklad zoznam alebo reťazec) vypíše pomocou
print
takto: najprv prvý prvok, potom posledný, potom druhý, potom predposledný, … až nejaký stredný. Výpis je pritom organizovaný tak, že v každom riadku (okrem posledného) bude vypísaných presne päť hodnôt (oddelených medzerou). Do dvoch premenných priraď reťazce, ktoré reprezentujú výpisy pre volania s rôznymi postupnosťami (aj s oddeľovačmi riadkov'\n'
):vypis1 = '...' # pre postupnost 'programujem_v_pythone' vypis2 = '...' # pre postupnost range(100, 333)
Pre danú funkciu
cykly(m, n)
nájdi také hodnotym
an
(obe sú dvojciferné), aby funkcia vrátila číslo43461
.def cykly(m, n): vysl = 0 for i in range(n): if i % 7 == 5: for j in range(m): if j % 10 > 7 and i != j: vysl += i%89 + j%97*101 return vysl
Nájdené
m
an
priraď:m = ... n = ...
Nájdi všetky sedemciferné prvočísla, ktoré majú všetky cifry rôzne a tieto tvoria rastúcu postupnosť čísel. Napríklad, ak by sme potrebovali takéto štvorciferné prvočísla, boli by medzi nimi aj
2347, 2357, 2389
. Nájdené sedemciferné prvočísla priraď do zoznamu:zoznam_prvocisel = [...]
Daná je rekurzívna funkcia:
def rek(d): if d <= 10: t.fd(d) else: rek(d / 2 - 5) t.pu() rek(10) t.pd() rek(d / 2 - 5)
Zisti, aká je dĺžka nakreslených čiar (so spusteným perom) pre volania
rek(70)
,rek(300)
arek(311)
(vždy predpokladáme, že začína kresliť so spusteným perom). Výsledky priraď do troch premenných:dlzka70 = ... dlzka300 = ... dlzka311 = ...
Napíš funkciu
do_riadkov(zoznam)
, ktorá neprázdny vstupný zoznam čísel postupne rozdelí do riadkov dvojrozmernej tabuľky. Všetky riadky budú obsahovať len čísla vo vzostupnom poradí (r[i]<r[i+1]
). Funkcia sa bude snažiť vytvarať čo najdlhšie takéto riadky:def do_riadkov(zoznam): ... return ...
Napríklad:
>>> do_riadkov([3, 4, 5, 4, 6, 8, 8, 11, 11]) [[3, 4, 5], [4, 6, 8], [8, 11], [11]]
Riešenie odovzdaj v súbore test.py
(môžeš si ho stiahnuť z L.I.S.T.u), pričom prvé tri riadky súboru budú obsahovať:
# 1. priebezny test 2020
# student: Janko Hrasko
# datum: 31.10.2024
zrejme ako študenta uvedieš svoje meno.