1    # Ok, takze tady jsou domaci ukoly jak by mely byt spravne:
   2    
   3    
   4    
   5    # Zacneme ciframa.. Tohle neni nijak tezky, posudte sami:
   6    
   7    def cifry (n):
   8        """Vypise cifry."""
   9        s=[] # na zacatku mam prazdny seznam
  10        while (x>0): # dokud tam jsou nejake cifry tak provadime cyklus
  11            r=x%10 # do r se nam teda dostane aktualni nejpravejsi cifra
  12            s.append(r) # pridame ji do seznamu
  13            x=x/10 # cislo vydelime deseti, takze se posuneme na dalsi cifru !! pouzivame celociselne deleni
  14        return s # na konci nesmime zapomenout seznam vratit
  15    
  16    # tuhle funkci uz znate z minula, vrati True kdyz je prvek item v seznamu, jinak vrati False
  17    # nebudu ji vic rozebirat, pokud Vam neni jasnej kod, podivejte se na predchozi hodinu
  18    
  19    def member(s1,item):
  20      """ Zjisti zda je prvek v seznamu. """
  21      for i in s1:
  22        if (i==item):
  23          return True
  24      return False  
  25    
  26    # A ted sjednoceni seznamu. Tahle funkce vrati sjednoceni dvou mnozin (kazda
  27    # mnozina je reprezentovana seznamem), tedy v s1 ani s2 nejsou duplicitni prvky
  28    # Jejich sjednoceni je mnozina obsahujici vsechny prvky z s1 a s2, ale kazdy
  29    # z nich maximalne jednou. S pouzitim funkce member je to trivialni vec:
  30    
  31    def union(s1,s2):
  32      """ Sjednoceni seznamu. """
  33      for i in s2: # projdeme vsechny prvky z s2
  34        if (not member(s1,i)): # a pokud nejsou v s1
  35          s1.append(i) # tak je tam pridame
  36      return s1 # nakonec nezapomeneme s1 vratit    
  37    
  38    # takhle to delala kristina, je to dobre, ale zbytecne tezky kod (vsimnete si
  39    # ze ten kod nahore kdyz jsme to rozdelili do funkci se vylozene hezky cte,
  40    # coz se o tomhle rict neda (mne trvalo taky dost dlouho jestli to vazne dela co
  41    # chceme))
  42    
  43    def sjednotiSeznamy (s1,s2):
  44        k1=len(s1)
  45        j=0
  46        while j<len(s2):
  47            prvek=s2[j]
  48            b=false
  49            i=0
  50            while (i<k1): 
  51                if (s1[i]==prvek):
  52                    b=true
  53                i=i+1
  54            if b==false :
  55                s1.append(prvek)
  56        j=j+1
  57        return s1
  58    
  59    
  60    
  61    # a ted insert, to bylo asi nejhorsi. Myslenka je nasledujici:
  62    # mame seznam, do kteryho chceme vlozit nejakej prvek na presne danej index.
  63    # tzn seznam bude stejny do toho indexu, pak bude vlozeny prvek a po nem bude
  64    # zbytek seznamu.
  65    # umime append, ktery to da na konec.
  66    # zakladni myslenka je, ze si rozdelime seznam na dva podseznamy. Prvni z nich
  67    # bude reprezentovat tu cast seznamu, ktera se nachazi pred vlozenym prvkem
  68    # a druhej seznam tu cast, ktera se nachazi za nim.
  69    # pak vlozime prvek na konec prvniho seznamu pomoci append() a oba seznamy
  70    # sloucime. 
  71    
  72    # aby se nas kod zase dal cist, udelame si nejdriv funkci, ktera nam vrati
  73    # podseznam zadanyho seznamu a to od indexu fi vcetne do indexu ti.
  74    # (tedy indexy fi, fi+1, ... ti-1)
  75    # Funkce je to zase jednoducha:
  76    
  77    def sublist(l,fi,ti):
  78      """ Vrati podseznam seznamu l (tedy seznam jeho prvku od indexu fi vcetne do indexu ti). """
  79      result=[] # vysledek je prazdny seznam
  80      while (fi<ti): # dokud se s indexem zacatku nedostaneme na konec
  81        result.append(l[fi]) # pridame do vysledku prvek na ktery ukazuje index fi
  82        fi = fi + 1 # fi posuneme na dalsi prvek
  83      return result # vratime co jsme vytvorili
  84    
  85    # a zase, pokud uz mame funkci sublist, je funkce na pridani prvku docela
  86    # jednoducha a kopiruje presne myslenku, kterou jsme na zacatku nastinili:
  87    
  88    def insert(l,index,item):
  89      """ Vlozi prvek item do seznamu l na urcene misto index. """
  90      part1=sublist(l,0,index) # part1 jsou prvky pred vlozenym prvkem
  91      part2=sublist(l,index,len(l)) # part2 jsou prvky ktere budou za vlozenym prvkem
  92      part1.append(item) # k prvni casti pridame prvek co chceme vlozit
  93      return part1+part2 # a ty dve casti sloucime do vysledku, kterej vratime
  94        
  95    # ok, trosku demotivacni poznamka ted:
  96    # vsechno co jsme zatim delali bylo proto, abyste pochopili, jak to funguje
  97    # tak zakladni veci jako member(), sublist() a insert() samozrejme v pythonu
  98    # existujou a muzete je pouzit:
  99    
 100    # nejdriv si ukazeme member():
 101    # dela se jednoduse (item in seznam) vrati True jestlize je item v seznamu
 102    # tedy presne jako nas member:
 103    
 104    seznam=[1,2,3,4]
 105    print (1 in seznam) # vypise True
 106    print (45 in seznam) # vypise False
 107    
 108    # dalsi vec co v pythonu existuje je sublist(). Vzpomente si na rozsahy v
 109    # excelu. Rozsah muzete napsat i do indexu prvku seznamu.
 110    # seznam[4] vrati paty prvek seznamu
 111    # seznam[2:5] vrati seznam prvku s indexy 2,3,4
 112    # Takze zase presne jako sublist() [:] je ale mnohem mocnejsi konstrukce
 113    # jeji presny pouziti si prectete v tech skriptech.
 114    # s pouzitim rozsahu (v pythonu se jim rika slices) muzeme prepsat index
 115    # takhle:
 116      
 117    def insert(seznam, index, prvek):
 118        """Vlozi do seznamu na index dany prvek."""
 119        part1=seznam[0:index-1] # to samy jako v pripade bez [:] takze nebudu komentovat
 120        part2=seznam[index:len(seznam)-1]
 121        part1.append(prvek)
 122        seznam=part1+part2
 123        
 124        
 125    # a konecne i funkce insert() v pythonu samozrejme existuje:
 126    # seznam.insert(index,prvek)
 127    # kterou muzete pouzit napriklad takhle:
 128    
 129    seznam=[1,2,3,5,6]
 130    seznam.insert(3,4)
 131    print seznam # vytiskne [1,2,3,4,5,6]
 132    
 133    
 134    
 135    
 136    
 137    
 138    
 139    
 140    
 141    
 142    
 143    
 144      
 145      
 146    
 147      
 148      
 149      
 150      
 151      
 152      
 153      
 154