Razbiranje ovir
Izvedši, da je njihov zemljevid s pikami in lojtrami neuporaben in živcira študente računalništva, kognitivne znanosti, upravne informatike in digitalnega jezikovslovja, so začali na Oddelku za gospodarstvo in motorizirani promet Mestne občine Ljubljana pripravljati podatke v drugačni obliki. Zato bo potrebno napisati nove funkcije za njihovo branje.
Ovire so zapisane v večvrstičnem nizu:
4: 5-6
13: 90-100, 5-8, 9-11
5: 9-11, 19-20, 30-34
4: 9-11
13: 22-25, 17-19
To pomeni, da je v 4. vrstici ovira od 5 do 6. V 13. vrstici so ovire od 90 do 100, od 5 do 8 in od 9 do 11. V 5. so od ... In potem so se spomnili, da je v 4. vrstici še ena ovira. In v 13. še dve.
Oblika vsake posamične vrstice je torej takšna: imamo številko vrstice, ki ji sledi dvopičje, temu pa pari koordinat (x0, x1)
. Med koordinatama je -
, med pari pa vejice. Kot vidimo zgoraj.
Kako iz/do večvrstičnih nizov
Če je s
večvrstični niz, ga razbijemo v seznam posamičnih vrstic tako, da pokličemo s.splitlines()
.
Če imamo niza prva = "Prva vrstica"
in druga = "Druga vrstica"
, ga zložimo v dvovrstični niz, tako da seštejemo prva + "\n" + druga
. Kombinacija \n
pomeni prehod v novo vrstico.
Obvezna naloga
Napiši naslednje funkcije.
vrstica(s)
prejme niz z eno vrstico in vrne seznam trojk(x0, x1, y)
, ki predstavljajo ovire v tej vrstici.Klic
vrstica("4: 1-3, 5-11, 15-33")
vrne seznam[(1, 3, 4), (5, 11, 4), (15, 33, 4)]
.preberi(s)
celoten, večvrstični niz z ovirami in vrne seznam ovir. Ovire naj bodo shranjene v takšnem vrstnem redu, v kakršnem se pojavljajo.Če jo pokličemo z gornjim nizom, vrne
[(5, 6, 4), (90, 100, 13), (5, 8, 13), (9, 11, 13), (9, 11, 5), (19, 20, 5), (30, 34, 5), (9, 11, 4), (22, 25, 13), (17, 19, 13)]
intervali(xs)
prejme seznam parov(x0, x1)
in vrne seznam nizov, ki opisujejo te intervale.Klic
intervali([(6, 10), (12, 16), (20, 22), (98, 102)])
vrne["6-10", "12-16", "20-22", "98-102"]
.zapisi_vrstico(y, xs)
prejme številko vrstice in seznam parov(x0, x1)
. Vrniti mora opis ene vrstice.Klic
zapisi_vrstico(5, [(6, 10), (12, 16)]))
vrne niz"5: 6-10, 12-16"
. Pazi: nobenih odvečnih ali manjkajočih presledkov ali vejic!
Dodatna naloga
Napiši funkcijo zapisi(ovire)
, ki prejme seznam ovir in vrne niz, ki vsebuje opis ovir v novi obliki.
Klic
zapisi([(5, 6, 4), (9, 11, 4),
(9, 11, 5), (19, 20, 5), (30, 34, 5),
(5, 8, 13), (9, 11, 13), (17, 19, 13), (90, 100, 13)])
vrne niz
4: 5-6, 9-11
5: 9-11, 19-20, 30-34
13: 5-8, 9-11, 17-19, 90-100
Spet: niz mora biti v točno takšni obliki, brez odvečnih ali manjkajočih presledkov ali vejic.
Testi
- 15. november 2022, 21:21