# Generator

# Generator je na prvi pogled funkcija, vendar to ni!
def sodaStevila():
    """Generiraj soda stevila od 2 do 100."""
    prisliSmoDo = 0
    while prisliSmoDo < 10:
        prisliSmoDo += 2
        yield prisliSmoDo
        
for x in sodaStevila():
    print ("Zdaj je x enak {0}".format(x))

# Generator, ki se cikla po seznamu
def ciklaj(seznam, kolikokrat):
    """Ciklaj se kolikorat po seznamu."""
    if len(seznam) > 0:
        i = 0
        k = kolikokrat
        while k > 0:
            a = seznam[i] # to moramo yield-ati
            # popravimo i
            i = i + 1
            if i >= len(seznam):
                i = 0
                k = k - 1
            yield a

for x in ciklaj(['am','bam','pet','podgan'], 2):
    print ("Zdaj je x enak {0}".format(x))
        
# Vaja 1: 
# generator, ki gre po elementih vgnezdenega seznama ali nabora
#
# Primer: s = [1, [2, [7, (9, 10)], 5], 7, 8]
# Iterator: 1, 2, 7, 9, 10, 5, 7, 8

def gnezdo(s):
    for x in s:
        if type(x) == list or type(x) == tuple:
            for y in gnezdo(x):
                yield y
        else:
            yield x

for t in gnezdo([1, [2, [7, (9, 10)], 5], 7, 8]):
    print ("t je zdaj enak {0}".format(t))
        
        
        
        
        
        
        