Programabilni sesalci
Najnovejši hit je programabilni sesalec (model PS132). Vanj lahko vstavimo SD kartico z datoteko, ki je lahko videti, na primer, tako:
>10
^5
V2
v1
E
<3
>5
V0
>8
E
V2
E
E
<1
>10pomeni, da se sesalec premakne za 10 polj desno ... in tako naprej.- Poleg znaka
vsesalec sprejme tudiV(veliko črko), ki (najbrž?) pomeni premik navzdol, čisto tako kotv. - Znak
Epomeni, da se sesalec ustavi. Če sesalec ne naleti naE, pač izvede datoteko do konca.
V funkcijah, ki jih boste pisali, berite datoteke z zanko. Ne poskušajte jih prebrati v seznam (npr. list(open("pot.txt"))), saj je lahko datoteka tudi zeloooooo (točneje: neskončno) dolga.
Pri reševanju naloge vam utegneta priti prav dve metodi nizov: split() in strip().
Še en koristen namig: kaj izpiše program
f = open("planeti.txt")
for vrstica in f:
print(vrstica)
f.readline()
Poskusite. Pri reševanju boste potrebovali nekaj podobnega, samo ... malo več.
Napiši funkcijo
izvedi(ime_datoteke), ki prejme ime datoteke in vrne končni koordinati sesalca.Izkazalo se je, da smo spregledali nekaj v dokumentaciji: znak
Vne pomeni pomika navzdol temveč preskok določenega števila vrstic datoteke. TakoV2pomeni, da preskočimo naslednji dve vrstici. Če imamo program>5 V2 <1 E >4bo sesalec preskočil dve vrstici, namreč
<1inE, torej naredi tole:>5 gre desno za 5, na (5, 0) V2 preskoči naslednji dve vrstici, torej <1 in E <1 to vrstico ignorira E tudi to ignorira >4 gre desno za 4, na (9, 0)Poleg tega se je izkazalo, da sesalec podpira komentarje: v vsaki vrstici lahko ukazu sledi presledek in nato poljubno besedilo, ki ga sesalec ignorora. Gornji zapis je torej veljaven program.
Tule je še ena zanimivost: program
>5 V20 <2bo deloval, saj sesalec preskoči naslednjih 20 vrstic, čeprav jih v datoteki ni toliko. Sesalec torej konča pot na (5, 0).
Napišite funkcijo
izvedi2(ime_datoteke), ki izvaja datoteke v tem formatu, torej:Vnnnpomeni, da program preskoči naslednjihnnnvrstic (kjer jennnpoljubno število).- Ukazom lahko sledijo komentarji, ki se začnejo s presledkom in jih sesalec ignorira.
Če se vam zdi, da je to preskakovanje nesmiselno, prav tako pa je nesmiselno, da se sesalec ustavi ob nekem E, namesto da bi tu preprosto končali datoteko, imate prav.
Zato napišite funkcijo
ocisti(vhodna_datoteka, izhodna_datoteka), ki prejme ime vhodne datoteke in v izhodnno datoteko zapiše samo vrstice (vključno z morebitnimi komentarji), ki jih sesalec dejansko izvede. Vrstice, ki jih sesalec preskoči, ne zapiše, prav tako na piše vrstic, ki sledijo po tem, ko se sesalec že ustavi.Če je vhodna datoteka
>5 V2 Preskoči naslednji dve vrstici V2 E <3 Gre levo E Konča >100potem bo izhodna datoteka vsebovala samo
>5 <3 Gre levo
Testi
- 14. april 2026, 20:21