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