Generalec
Tokratna domača naloga je neobvezna, saj je snov bolj "dodatna". Vseeno priporočam, da se potrudite in jo rešite, saj vam bo poznavanje generatorjev/iteratorjev pomagalo razumeti, kako deluje Python. Pa tudi pri programiranju "nedodatnih" nalog v prihodnosti vam lahko pride prav; marsikaj bo na ta način rešljivo hitreje in preprosteje.
Če se zatakne, pišite. Z veseljem pomagam.
Za tokratne funkcije morate predpostaviti, da je argument pot generator. S klicem iter(pot) boste dobili iterator in če na dobljenem iteratorju kličete next bo vračala elemente poti. Seveda pa velja tudi for polje in pot ali kaj podobnega.
Generatorja/iteratorja, kot vemo, ne moremo, vprašati, koliko elementov bo zgeneriral, pa tudi indeksiranje (pot[n]) ne bo delovalo.
Generator lahko generira tudi zeloooooo dolge poti. Če se program zaradi tega noče ustaviti, ga pokončajte z rdečim kvadratkom zgoraj desno.
Argument ovire je množica.
Naloge
Napišite naslednje funkcije.
zacetek(pot), ki vrne začetno polje poti. To ni nujno(0, 0). Pomislite, kako bi (oz. kako sem) na predavanju dobil prvi element od vas, ko ste bili v vlogi iteratorja.nto_polje(pot, n)vrne n-to polje generatorja. Šteti začnemo pri 1.zadane(pot, ovire)vrneTrue, če pot vsebuje kakšno oviro.Potrudite se nalogo rešiti s funkcijo
any, ki ji podate generator.zadetki(pot, ovire)vrne generator (to je: fukcija vsebuje bodisiyieldbodisireturn (... for ... in ...)), ki vrne vsa polja na poti, v takem vrstnem redu, kot se pojavljajo na poti.Recimo, da generator generira pot
(0, 0), (1, 0), (0, 0), (1, 0), (0, 0) ...in tako milijonkrat. Če na polju(1, 0)stoji ovira, mora vaš generator pol milijonkrat vrniti(1, 0).pot(smeri)prejme smeri (to je, zaporedje<,>,^,v) in vrne generator, ki generira pot, ki jo opisujejo smeri. Pot se začne na(0, 0).Klic
pot(">>^<")vrne generator, ki generira(0, 0), (1, 0), (2, 0), (2, 1), (1, 1).smeriso generator. Testi bodo (na nek način) preverili, ali vaša funkcija generira neskončno pot v desno, če je pot neskočno zaporedje znakov>.
Testi
- 24 3월 2026, 4:46 PM