Skip to content

Commit 131d6a6

Browse files
committed
Add something about tuples and zip
1 parent 3a2758c commit 131d6a6

File tree

6 files changed

+187
-2
lines changed

6 files changed

+187
-2
lines changed

courses/snake/info.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ plan:
5858
- lesson: fast-track/if
5959
- lesson: fast-track/def
6060
- lesson: fast-track/for
61+
- lesson: fast-track/tuple
6162
- title: "Doplnění: list slicing, del, n-tice, zip()"
6263
url: null
6364
- title: Had

lessons/fast-track/def/index.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,71 @@ pozdrav('Soňa')
141141
```
142142

143143

144+
## Vracení
145+
146+
Další věc, kterou funkce jako `len` umí, je *vrátit* výsledek:
147+
148+
``` python
149+
delka = len('Ola')
150+
print(delka) # napíše: 3
151+
```
152+
153+
Jak na to?
154+
Ve funkci můžeš použít příkaz `return`, který funkci okamžitě ukončí
155+
a vrátí danou hodnotu:
156+
157+
```python
158+
def dvojnasobek(x):
159+
return x * 2
160+
161+
print(dvojnasobek(42))
162+
```
163+
164+
Zkus napsat funkci, která pátý pád nějakého jména, třeba:
165+
166+
* `paty_pad('Ola')` → 'Olo'
167+
* `paty_pad('Soňa')` → 'Soňo'
168+
* `paty_pad('Hubert')` → 'Huberte'
169+
170+
Tohle je velice složitý úkol, tak si ho trochu zjednodušíme.
171+
Funkce by měla dělat tohle:
172+
173+
* Pokud jméno je „Hubert“:
174+
* vrátí `Huberte`
175+
* Pokud jméno končí na `a`:
176+
* vrátí jméno s `o` místo posledního písmenka
177+
* Jinak:
178+
* Vrátí původní jméno. (Uživatel si toho snad nevšimne.)
179+
180+
``` python
181+
def paty_pad(jmeno):
182+
if jmeno == 'Hubert':
183+
return 'Huberte'
184+
elif jmeno[-1] == 'a':
185+
return jmeno[:-1] + 'o'
186+
else:
187+
return jmeno
188+
```
189+
190+
Dokážeš změnit funkci `pozdrav`, aby zdravila v češtině?
191+
192+
{% filter solution %}
193+
``` python
194+
def pozdrav(jmeno):
195+
print('Vítam tě,', paty_pad(jmeno))
196+
197+
pozdrav('Hubert')
198+
pozdrav('Ola')
199+
pozdrav('Soňa')
200+
```
201+
{% endfilter %}
202+
203+
144204
## Shrnutí
145205

146206
Co bylo nového tentokrát?
147207

148208
* **Funkce** umožňuje pojmenovat nějkolik příkazů, a pak je zavolat najednou.
149209
* **Parametry** funkce, hodnoty se kterými funkce pracuje,
150210
se zadávají v závorkách.
211+
* `return` ukončí funkci a vrátí hodnotu

lessons/fast-track/for/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ for jmeno in jmena:
3030
Celý program bude tedy vypadat takto:
3131

3232
```python
33-
def pozdrav(meno):
34-
print('Vitam ťa,', meno)
33+
def pozdrav(jmeno):
34+
print('Vítam tě,', jmeno)
3535

3636
jmena = ['Rachel', 'Monica', 'Phoebe', 'Ola', 'Ty']
3737
for jmeno in jmena:

lessons/fast-track/list/index.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,33 @@ Začátek a konec se dá kombinovat – číslo můžeš dát před i za dvojte
317317
['Druhý', 'Třetí']
318318
```
319319

320+
321+
## Řezání řetězců
322+
323+
Hranaté závorky fungují i u řetězců:
324+
325+
``` pycon
326+
>>> jidlo = 'čokoláda'
327+
>>> jidlo[3]
328+
'o'
329+
>>> jidlo[1:4]
330+
'oko'
331+
```
332+
333+
Představ si, že máš v proměnné `jmeno` jméno jako `'Ola'`,
334+
`'Krystýna'` nebo `'Růžena'`.
335+
Jak z něj vytvoříš druhý pád (např. bez `'Růženy'`)?
336+
337+
{% filter solution %}
338+
Vezmi jméno až po poslední písmeno a přidáš `'y'`. Například:
339+
``` python
340+
>>> jmeno = 'Růžena'
341+
>>> jmeno[:-1] + 'y'
342+
'Růženy'
343+
```
344+
{% endfilter %}
345+
346+
320347
## Shrnutí
321348

322349
Uf! O seznamech toho bylo k naučení celkem hodně. Shrňme si, co už umíš:
@@ -327,5 +354,6 @@ Uf! O seznamech toho bylo k naučení celkem hodně. Shrňme si, co už umíš:
327354
* Prvky se dají **vybrat** nebo **odstranit** (`del`) podle indexu.
328355
* Číslování začíná **od nuly**, záporná čísla berou prvky od konce.
329356
* **Podseznam** je určitá část seznamu.
357+
* U **řetězců** funguje vybírání prvků a podřetězců podobně
330358

331359
Jsi připraven{{a}} na další část?

lessons/fast-track/tuple/index.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# <var>N</var>-tice
2+
3+
Už víš, že pomocí `return` lze z funkce vracet hodnotu:
4+
5+
``` python
6+
def dvojnasobek(x):
7+
return x * 2
8+
```
9+
10+
Jak ale napsat funkci, která vrátí dvě hodnoty?
11+
Chci třeba napsat funkci, která spočítá podíl a zbytek po dělení.
12+
13+
Dvě hodnoty se dají vrátit jako seznam:
14+
15+
``` python
16+
def podil_a_zbytek(a, b):
17+
podil = a // b
18+
zbytek = a % b
19+
20+
return [podil, zbytek]
21+
22+
print(podil_a_zbytek(5, 2))
23+
```
24+
25+
Lepší je ale vrátit *dvojici* čísel – dvě čísla oddělená čárkou:
26+
27+
``` python
28+
def podil_a_zbytek(a, b):
29+
podil = a // b
30+
zbytek = a % b
31+
32+
return podil, zbytek
33+
34+
print(podil_a_zbytek(5, 2))
35+
```
36+
37+
Tomuhle se říká dvojice – nebo trojice, čtveřice, pětice, šestice, prostě
38+
<var>n</var>-tice (angl. *tuple*) hodnot.
39+
Funguje podobně jako seznam, ale nedají se do ní přidávat prvky, nebo odebírat
40+
a jinak měnit.
41+
Když mám trojici, vždycky zůstane jako trojice.
42+
43+
Když máš <var>n</var>-tici, můžeš ji přiřazením *rozbalit* (angl. *unpack*)
44+
do několika proměnných:
45+
46+
``` python
47+
podil, zbytek = podil_a_zbytek(5, 2)
48+
49+
print(podil)
50+
print(zbytek)
51+
```
52+
53+
<var>N</var>-tice mají spoustu využití, například:
54+
55+
* Bod v prostoru má 3 souřadnice – trojice čísel!
56+
* Hrací karta má barvu a hodotu – dvojice čísla a řetězce, např. `(2, 'piky')`
57+
58+
Občas je potřeba dát <var>n</var>-tice do seznamu, např. abys uložil{{a}}
59+
informace o celém balíčku hracích karet.
60+
V podobných případech je potřeba každou <var>n</var>-tici uzavřít do závorek,
61+
aby bylo jasné kde začíná a kde končí.
62+
Tady je seznam dvojic:
63+
64+
```python
65+
ruka = [(2, 'piky'), (10, 'kříže'), (8, 'káry')]
66+
```
67+
68+
Když takový seznam máš, můžeš ho projít v cyklu `for` s pomocí rozbalování:
69+
70+
``` python
71+
for hodnota, barva in ruka:
72+
print('Hraju', hodnota, 'a jsou to', barva)
73+
```
74+
75+
## Zip
76+
77+
<var>N</var>-tice, respektive sekvenci <var>n</var>-tic vrací funkce `zip`,
78+
která umožňuje projít zároveň několik seznamů,
79+
jejichž prvky si navzájem odpovídají:
80+
81+
``` python
82+
veci = ['tráva', 'slunce', 'mrkev', 'řeka']
83+
barvy = ['zelená', 'žluté', 'oranžová', 'modrá']
84+
mista = ['na zemi', 'nahoře', 'na talíři', 'za zídkou']
85+
86+
for vec, barva, misto in zip(veci, barvy, mista):
87+
print(barva, vec, 'je', misto)
88+
```
89+
90+

lessons/fast-track/tuple/info.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
title: N-tice a rozbalování
2+
style: md
3+
attribution:
4+
- Pro PyLadies CZ napsal Petr Viktorin, 2018.
5+
license: cc-by-sa-40

0 commit comments

Comments
 (0)