Spremembe smeri

Ta je bila mogoče najtežja. Rešili jo bomo tako, da si bomo zapomnili razliko med prejšnjima dnevoma (smer) in naslednjima (nova_smer). Če je produkt teh dveh razlik negativen, je so včeraj delnice padale, danes pa rasle - ali pa obratno.

Če se tega trika ne spomnimo je funkcija kako vrstico daljša, ni pa ravno težja.

def sprememb_smeri(s): if len(s) < 3: return 0 smer = s[1] - s[0] sprememb = 0 for i in range(2, len(s)): nova_smer = s[i] - s[i - 1] if smer * nova_smer < 0: sprememb += 1 smer = nova_smer return sprememb

Nedostopna polja

Najprej rečemo, da so vsa polja nedostopna: shranimo jih v množico. Nato od te množice odštevamo vsa polja, ki so dostopna - zapisana so kot vrednosti v slovarju. Ker so tudi to množice, jih lahko preprosto odštevamo od množice nedostopnih polj.

def nedostopna(s): ned = set(s) for v in s.values(): ned -= v return ned

Je Fibonaci?

Število je Fibonacijevo, če ima manj kot tri elemente (len(s) < 3) ALI pa je zadnji element vsota predzadnjih dveh (s[-1] == s[-2] + s[-3] IN je tudi seznam brez zadnjega elementa Fibonacijev (je_fibo(s[:-1]).

def je_fibo(s): return len(s) < 3 or (s[-1] == s[-2] + s[-3]) and je_fibo(s[:-1])

Lahko pa gremo tudi od spredaj.

def je_fibo(s): return len(s) < 3 or (s[2] == s[0] + s[1]) and je_fibo(s[1:])

Obljudeni stolpci

Čez podobne naloge smo šli že tolikokrat, da ni kaj dodati...

def po_stolpcih(s): po = [0] * 8 for stolpec, _ in s: po[ord(stolpec) - ord("A")] += 1 return po def naj_stolpec(s): po = po_stolpcih(s) naj_s = naj_v = 0 for i, v in enumerate(po): if v > naj_v: naj_s, naj_v = i, v if naj_v == 0: return None return chr(ord("A") + naj_s)

Ulomki

Za reševanje je potrebno vedeti, kako se dela z ulomki (kar znamo iz osnovne šole) in kako objekt spreminja vrednosti svojih polj. Če to vemo, napišemo takšni metodi:

def pristej(self, drugi): imen = self.imenovalec * drugi.imenovalec self.stevec = self.stevec * drugi.imenovalec + drugi.stevec * self.imenovalec self.imenovalec = imen self.okrajsaj() def pomnozi(self, drugi): self.stevec *= drugi.stevec self.imenovalec *= drugi.imenovalec self.okrajsaj()
Zadnja sprememba: sreda, 28. avgust 2013, 15.11