Rešitev s komentarji
Vse naloge
Za občutek so tu najprej rešitve vseh nalog. Različice rešitev in komentarji so spodaj.
Po nalogah
Naloga A
Funkcija, ki ste jo napisali za domačo nalogo, gre nekje prek seznama stolpcev, ki ste ga najbrž dali v nek niz "abcdefgh"
. Na izpitu ste morali dodati še dva stolpca, "abcdefghij"
.
Naloga B
Skopirate funkcijo add
, jo preimenujete v mul
in zamenjate seštevanje z množenjem.
Večkratniki 7 raus!
Tole je v bistvu (malo lažje kot) poštevanka števila 7. Praktično enaka naloga je rešena v zapiskih.
Daljši način je takšen:
Sekajoči se krogi
Naloga ni povsem tuja zadnji domači nalogi, kjer ste morali preveriti, ali je krog zadel katerega od eksplodiranih krogov. Edina komplikacija je v tem, da morate preveriti sekanje vsakega kroga z vsakim in se obenem izogniti temu, da bi se krog sekal sam s sabo. Kot je namigoval namig, nam pride prav, če poznamo indeks kroga, saj lahko tako preverjamo, ali se i-ti krog (krog[i]
) seka s katerim od krogov pred njim (krogi[:i]
).
Ob popravljanju izpitov sem naletel na tole:
Tako napisana funkcija sicer vzame dvakrat več časa kot gornja, poleg tega pa je izvirna koda brez potrebe majčkeno bolj zapletena, vendar: bravo! Na is not
res nisem pomislil. Odličen primer njegove rabe.
Blagajna
Naloga preverja, ali znate sestaviti razred. V metodah ni nič posebnega, le malo opletanja s slovarji.
Povedi
Najprej rešimo poenostavljeno različico, ki upošteva samo piko. Dobljene sezname samo zlepimo skupaj, jih ločimo glede na piko in k vsakemu elementu dodamo piko, saj jo je split
pobrisal.
Če hočemo upoštevati vsa tri ločila, moramo uporabiti regularne izraze. Napišemo, preprosto, regularni izraz, ki opisuje stavek: stavek je sestavljen iz nekih znakov, ki niso ločila (torej niso pika, vprašaj ali klicaj) in se poljubnokrat ponovijo, [^.?!]*
. Slediti jim mora ločilo, [.?!]
. In to je vsa umetnost: v skupaj zlepljenih nizih iz seznama, ki smo ga dobili kot argument ("".join(s)
) moramo poiskati vse (findall
pojavitve vzorca [^.?!]*[.?!]
.
Ko sem na predavanjih povedal, da je regularne izraze dobro znati, ker so nekatere naloge na izpitu brez njih precej bolj zoprne, sem govoril po pravici. Rešitev brez regularnih izrazov je takšna:
Seznam po modulu
Ta naloga je variacija domače naloge Neobčutljivi slovar, le da je potrebno hekati seznam. Kdor si je pogledal komentarje rešitev domačih nalog, je ravnal pametno, saj je lahko uporabil tole preprosto rešitev: