Zapiski s ponavljanja pred izpitom
In [1]:
otroci = {
    "Adam": ["Matjaž", "Cilka", "Daniel", "Erik"],
    "Aleksander": [],
    "Alenka": [],
    "Barbara": [],
    "Cilka": [],
    "Daniel": ["Elizabeta", "Hans"],
    "Erik": [],
    "Elizabeta": ["Ludvik", "Jurij", "Barbara", "Herman", "Mihael"],
    "Franc": [],
    "Herman": ["Margareta"],
    "Hans": [],
    "Jožef": ["Alenka", "Aleksander", "Petra"],
    "Jurij": ["Franc", "Jožef"],
    "Ludvik": [],
    "Margareta": [],
    "Matjaž": ["Viljem"],
    "Mihael": [],
    "Petra": [],
    "Tadeja": [],
    "Viljem": ["Tadeja"],
}
def je_zenska(ime):
    return ime[-1] == "a"
def koliko_sester(ime):
    sester = 0
    for druzina in otroci.values():
        if ime in druzina:
            break
    else:
        druzina = [ime]
    for clovek in druzina:
        if je_zenska(clovek):
            sester += 1
    if je_zenska(ime):
        sester -= 1
    return sester
def najvec_sester():
    s = []
    for clovek in otroci:
        s.append((koliko_sester(clovek), clovek))
    return max(s)[1]
print(najvec_sester())
In [4]:
def najvec_sester_v_druzini(druzina):
    print([je_zenska(ime) for ime in druzina])
    
print(najvec_sester_v_druzini(["Maja", "Aleksander", "Petra"]))
In [7]:
def najvec_sester_v_druzini(druzina):
    return sum([je_zenska(ime) for ime in druzina])
    
print(najvec_sester_v_druzini(["Maja", "Aleksander", "Petra"]))
In [9]:
def najvec_sester_v_druzini(druzina):
    zensk = sum(je_zenska(ime) for ime in druzina)
    if zensk == len(druzina):
        return zensk - 1, druzina[0]
    else:
        moski = [ime for ime in druzina if not je_zenska(ime)]
        return zensk, moski[0]
    
print(najvec_sester_v_druzini(["Maja", "Aleksander", "Petra"]))
print(najvec_sester_v_druzini(["Maja", "Aleksander", "Petra", "Jože"]))
print(najvec_sester_v_druzini(["Maja", "Aleksandra", "Petra"]))
In [10]:
[najvec_sester_v_druzini(druzina) for druzina in otroci.values()]
In [11]:
def najvec_sester_v_druzini(druzina):
    zensk = sum(je_zenska(ime) for ime in druzina)
    if not zensk:
        return 0, ""
    if zensk == len(druzina):
        return zensk - 1, druzina[0]
    else:
        moski = [ime for ime in druzina if not je_zenska(ime)]
        return zensk, moski[0]
    
print(najvec_sester_v_druzini(["Maja", "Aleksander", "Petra"]))
print(najvec_sester_v_druzini([]))v
In [12]:
[najvec_sester_v_druzini(druzina) for druzina in otroci.values()]
Out[12]:
In [13]:
max([najvec_sester_v_druzini(druzina) for druzina in otroci.values()])
Out[13]:
In [14]:
max(najvec_sester_v_druzini(druzina) for druzina in otroci.values())
Out[14]:
In [ ]:
 
In [15]:
max([najvec_sester_v_druzini(druzina) for druzina in otroci.values()])[1]
Out[15]:
In [16]:
def najvec_sester(ime):
    druzina = otroci[ime]
    naj_sester, naj_ime = najvec_sester_v_druzini(druzina)
    for otrok in druzina:
        sester, ime = najvec_sester(otrok)
        if sester > naj_sester:
            naj_sester = sester
            naj_ime = ime
    return naj_ime
najvec_sester("Adam")
In [17]:
def najvec_sester(ime):
    druzina = otroci[ime]
    naj_sester, naj_ime = najvec_sester_v_druzini(druzina)
    for otrok in druzina:
        sester, ime = najvec_sester(otrok)
        if sester > naj_sester:
            naj_sester = sester
            naj_ime = ime
    return naj_sester, naj_ime
najvec_sester("Adam")
In [18]:
otroci["Aleksander"] = []
In [19]:
def najvec_sester(ime):
    druzina = otroci[ime]
    naj_sester, naj_ime = najvec_sester_v_druzini(druzina)
    for otrok in druzina:
        sester, ime = najvec_sester(otrok)
        if sester > naj_sester:
            naj_sester = sester
            naj_ime = ime
    return naj_sester, naj_ime
najvec_sester("Adam")
Out[19]:
In [20]:
def najvec_sester0(ime):
    druzina = otroci[ime]
    naj_sester, naj_ime = najvec_sester_v_druzini(druzina)
    for otrok in druzina:
        sester, ime = najvec_sester0(otrok)
        if sester > naj_sester:
            naj_sester = sester
            naj_ime = ime
    return naj_sester, naj_ime
def najvec_sester(ime):
    return najvec_sester0(ime)[1]
najvec_sester("Adam")
Out[20]:
In [21]:
def najvec_sester_v_druzini(druzina):
    zensk = sum(je_zenska(ime) for ime in druzina)
    return zensk - (zensk == len(druzina))
    
def najvec_sester(ime):
    druzina = otroci[ime]
    naj_sester = najvec_sester_v_druzini(druzina)
    for otrok in druzina:
        sester = najvec_sester(otrok)
        if sester > naj_sester:
            naj_sester = sester
    return naj_sester
najvec_sester("Adam")
Out[21]:
In [22]:
def najvec_sester_v_druzini(druzina):
    zensk = sum(je_zenska(ime) for ime in druzina)
    return zensk - (zensk == len(druzina))
    
def najvec_sester(ime):
    druzina = otroci[ime]
    naj_sester = najvec_sester_v_druzini(druzina)
    return max([najvec_sester(otrok) for otrok in druzina] + [naj_sester])
najvec_sester("Adam")
Out[22]:
In [23]:
def palindrom(s):
    return len(s) < 2    or    s[0] == s[-1] and palindrom(s[1:-1])
In [24]:
palindrom("abcba")
Out[24]:
In [25]:
palindrom("abcb")
Out[25]:
In [26]:
palindrom("aa")
Out[26]:
In [27]:
palindrom("aaa")
Out[27]:
In [28]:
palindrom("a")
Out[28]:
In [29]:
palindrom("")
Out[29]:
In [30]:
def decimalno(s):
    return int(s[-1]) + 2 * decimalno(s[:-1])
In [31]:
decimalno("101010")
In [35]:
def decimalno(s):
    if not s:
        return 0
    return int(s[-1]) + 2 * decimalno(s[:-1])
In [36]:
decimalno("101010")
Out[36]:
In [43]:
def decimalno(s):
    if not s:
        return 0
    r = decimalno(s[:-1])
    bom_vrnil = int(s[-1]) + 2 * r
    print("dobil sem", s)
    print("zadnja: ", s[-1])
    print("klical sem decimalno(", s[:-1], ")")
    print("dobil sem", r)
    print("vrnil bom", bom_vrnil)
    print("-" * 20)
    return bom_vrnil
In [44]:
decimalno("111010")
Out[44]:
In [45]:
def binarno(n):
    if n == 0:
        return "0"
    zadnja = str(n % 2)
    pred_tem = binarno(n // 2)
    return (pred_tem + zadnja)
In [46]:
binarno(42)
Out[46]:
In [49]:
def binarno(n):
    if n == 0:
        return "0"
    zadnja = str(n % 2)
    pred_tem = binarno(n // 2)
    return (pred_tem + zadnja)[:-1]
In [50]:
binarno(42)
Out[50]:
In [51]:
def binarno(n):
    if n == 0:
        return "0"
    zadnja = str(n % 2)
    pred_tem = binarno(n // 2)
    return (pred_tem + zadnja).lstrip("0")
In [52]:
binarno(42)
Out[52]:
In [53]:
binarno(1)
Out[53]:
In [54]:
binarno(0)
Out[54]:
In [55]:
def binarno(n):
    if n <= 1:
        return str(n)
    zadnja = str(n % 2)
    pred_tem = binarno(n // 2)
    return (pred_tem + zadnja)
In [56]:
binarno(42)
Out[56]:
In [57]:
binarno(0)
Out[57]:
In [58]:
binarno(1)
Out[58]:
In [59]:
def binarno(n):
    niz = ""
    while n > 0:
        niz = str(n % 2) + niz
        n //= 2
    return niz
    
In [60]:
binarno(42)
Out[60]:
In [61]:
binarno(0)
Out[61]:
In [62]:
def binarno(n):
    if n == 0:
        return "0"
    niz = ""
    while n > 0:
        niz = str(n % 2) + niz
        n //= 2
    return niz
    
In [63]:
binarno(42)
Out[63]:
In [64]:
binarno(0)
Out[64]:
In [65]:
def palindrom(s):
    for i in range(len(s) // 2):
        if s[i] != s[- i - 1]:
            return False
    return True
In [66]:
def palindrom(s):
    return s == s[::-1]
In [67]:
class Zelva:
    def naprej(self, x):
        pass
Včasih definiraš samo razred in metode. Tu ne bo super.
Včasih dobiš razred in definiraš naslednike ... ali definiraš oboje, razred in naslednike.
In [70]:
class PosebnaZelva(Zelva):
    # Ta zelva zna vse, kar zna zelva
    # Recimo, da gre naprej za dvakrat več kot "običajna" želva
    def naprej(self, x):
        print("hop")
        super().naprej(2 * x) # super zato, da pokličem podedovano, ne svoje
        # self.naprej(2 * x)
S super pokličem to, kar sem povozil.
In [71]:
class PosebnaZelva(Zelva):
    # Ta zelva zna vse, kar zna zelva
    # Recimo, da gre naprej za dvakrat več kot "običajna" želva
    def bolj_naprej(self, x):
        print("hop")
        self.naprej(2 * x) # kličem podedovani naprej
In [72]:
class Blok:
    def __init__(self, nadstropij):
        self.stanovalci = [None] * nadstropij
        
    def vseli(self, nadstropje, ime):
        if self.stanovalci[nadstropje] != None:
            return False
        self.stanovalci[nadstropje] = ime
        return True
    
    def stanovalec(self, nadstropje):
        # if self.stanovalci[nadstropje] != None: ---> Ni potrebno!
        #    return self.stanovalci[nadstropje]
        # else:
        #    return None
        return self.stanovalci[nadstropje]
    
    def izseli(self, nadstropje):
        self.stanovalci[nadstropje] = None
        
    def koliko_nadstropij(self):
        return len(self.stanovalci)
    
    def kamorkoli(self, ime):
        for i in range(len(stanovalci) - 1, -1, -1):
            if self.stanovalci[i] == None:
                self.stanovalci[i] = ime
                return True
        return False
    
In [74]:
# S slovarji - čeprav mi ni prav všeč ;)
class Blok:
    def __init__(self, nadstropij):
        self.stanovalci = {}
        for i in range(nadstropij):
            self.stanovalci[i] = None
        
    def vseli(self, nadstropje, ime):
        if self.stanovalci[nadstropje] != None:
            return False
        self.stanovalci[nadstropje] = ime
        return True
    
    def stanovalec(self, nadstropje):
        # if self.stanovalci[nadstropje] != None: ---> Ni potrebno!
        #    return self.stanovalci[nadstropje]
        # else:
        #    return None
        return self.stanovalci[nadstropje]
    
    def izseli(self, nadstropje):
        self.stanovalci[nadstropje] = None
        
    def koliko_nadstropij(self):
        return len(self.stanovalci)
    
    def kamorkoli(self, ime):
        for i in range(len(stanovalci) - 1, -1, -1):
            if self.stanovalci[i] == None:
                self.stanovalci[i] = ime
                return True
        return False
    
In [77]:
dict.fromkeys(["a", "b", "c"], 42)
Out[77]:
In [78]:
dict.fromkeys(range(8), None)
Out[78]:
In [ ]:
 
Last modified: Tuesday, 17 February 2015, 12:13 PM