Skip to content

Commit 1f6e9b5

Browse files
committed
Reword the def lesson
1 parent 29f101a commit 1f6e9b5

1 file changed

Lines changed: 35 additions & 17 deletions

File tree

lessons/beginners/def/index.md

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ print('Ahoj světe!')
88

99
Dnes si ukážeme, jak psát funkce vlastní.
1010

11-
Není to tak složité:
11+
Pokud umíš `if` a `for` – s jednořádkovou hlavičkou a odsazeným tělem příkazu –
12+
neměl by ti zápis funkce připadat nijak zvláštní:
1213

1314
```python
1415
def obvod_obdelnika(sirka, vyska):
@@ -22,15 +23,15 @@ Jak to funguje?
2223

2324

2425
Funkce se *definuje* příkazem `def`, za nějž napíšeš jméno funkce,
25-
pak do závorky seznam *argumentů*, které funkce bere, a pak dvojtečku.
26+
pak do závorky seznam *parametrů*, které funkce bere, a pak dvojtečku.
2627

2728
Potom následuje odsazené *tělo funkce* – příkazy, které funkce provádí.
2829
Tělo může začít *dokumentačním řetězcem*, který popisuje, co funkce dělá.
2930

30-
Příkazem `return` pak můžeš z funkce
31-
vrátit nějakou hodnotu.
31+
Příkazem `return` pak můžeš z funkce *vrátit* nějakou hodnotu.
3232

33-
Tělo funkce může mít více příkazů, včetně podmínek, cyklů a podobně:
33+
Tělo funkce může mít více příkazů – včetně podmínek, cyklů a podobně.
34+
Následující procedura třeba vypíše skóre daného hráče a k tomu hlášku:
3435

3536
```python
3637
def napis_hlasku(nazev, skore):
@@ -53,7 +54,7 @@ napis_hlasku('Protivníkovo', 5)
5354
```
5455

5556
Při volání funkce se hodnoty, se kterými funkci
56-
zavoláš, přiřadí jednotlivým argumentům.
57+
zavoláš, přiřadí jednotlivým parametrům.
5758
Takže když zavoláš třeba `napis_hlasku('Tvoje', 256)`,
5859
můžeš si představit, že funkce dělá následující:
5960

@@ -72,18 +73,34 @@ Speciální příkaz `return`, který jde použít jenom ve funkcích,
7273

7374
Chová se tedy trochu jako `break`, jen místo cyklu opouští celou funkci.
7475

76+
Podobně jako `break` se dá použít v případech, kdy potřebuješ od uživatele
77+
dostat odpověď – a opakuješ dotaz tak dlouho, dokud požadovanou odpověď
78+
nedostaneš.
79+
Třeba, chceš-li odpověď „ano“ nebo „ne“:
80+
81+
* Takhle se zjišťuje odpověď ano (Pravda) nebo ne (Nepravda) na danou *otázku*:
82+
* Pořád dokola:
83+
* Zeptej se na *otázku*; zapamatuj si *odpověď*.
84+
* Je-li odpověď „ano“:
85+
* Výsledek je Pravda. Hotovo; dál nepokračuj.
86+
* Jinak, je-li odpověď „ne“:
87+
* Výsledek je Nepravda. Hotovo; dál nepokračuj.
88+
* Pouč uživatele, ať odpoví „ano“ nebo „ne“.
89+
<br>*(a zkus to znovu – viz „Pořád dokola“)*
90+
7591
```python
7692
def ano_nebo_ne(otazka):
77-
"Vrátí True nebo False, podle odpovědi uživatele"
93+
"Vrátí True nebo False podle odpovědi uživatele"
7894
while True:
7995
odpoved = input(otazka)
8096
if odpoved == 'ano':
8197
return True
8298
elif odpoved == 'ne':
8399
return False
84-
else:
85-
print('Nerozumím! Odpověz "ano" nebo "ne".')
86100

101+
print('Nerozumím! Odpověz "ano" nebo "ne".')
102+
103+
# Příklad použití
87104
if ano_nebo_ne('Chceš si zahrát hru? '):
88105
print('OK! Ale napřed si ji musíš naprogramovat.')
89106
else:
@@ -115,7 +132,7 @@ print('Obsah elipsy s osami 3 cm a 5 cm je', obsah_elipsy(3, 5), 'cm2')
115132

116133
### Vrátit nebo vypsat?
117134

118-
Předchozí program se dá napsat i takto:
135+
Předchozí program se dá napsat i s procedurou místo funkce:
119136

120137
```python
121138
from math import pi
@@ -129,7 +146,7 @@ obsah_elipsy(3, 5)
129146
Program takhle funguje, ale přichází o jednu z hlavních výhod funkcí:
130147
možnost vrácenou hodnotu použít i jinak jež jen v `print`.
131148

132-
Funkci, která výsledek vrací, můžeš použít v dalších výpočtech:
149+
Funkci, která vrací výsledek, můžeš použít v dalších výpočtech:
133150

134151
```python
135152
def objem_eliptickeho_valce(a, b, vyska):
@@ -138,13 +155,13 @@ def objem_eliptickeho_valce(a, b, vyska):
138155
print(objem_eliptickeho_valce(3, 5, 3))
139156
```
140157

141-
... ale kdyby výsledek přímo vypsala, nešlo by to.
158+
... ale s procedurou, která výsledek přímo vypíše, by to nešlo.
142159

143160
Další důvod, proč hodnoty spíš vracet než vypisovat, je ten, že jedna funkce se
144161
dá použít v různých situacích.
145-
Funkci`print` by nešlo rozumně použít tehdy, když nás příkazová
146-
řádka vůbec nezajímá.
147-
Třeba v grafické hře, webové aplikaci, nebo pro ovládání robota.
162+
Proceduru`print` by nešlo rozumně použít tehdy, když nás příkazová
163+
řádka vůbec nezajímá – třeba v grafické hře, webové aplikaci, nebo pro ovládání
164+
robota.
148165

149166
Podobně je to se vstupem: když použiju v rámci své funkce `input`, bude se
150167
moje funkce dát použít jen v situacích, kdy je u počítače klávesnice a za ní
@@ -167,9 +184,10 @@ y = float(input('Zadej délku poloosy 2: '))
167184
print('Obsah je', obsah_elipsy(x, y))
168185
```
169186

170-
Samozřejmě existují výjimky: funkce která přímo vytváří textový výpis,
187+
Samozřejmě existují výjimky: procedura která přímo vytváří textový výpis
171188
může používat `print`; funkce která načítá textové informace zase `input`.
172-
Když ale funkce něco počítá, je dobré v ní `print` ani `input` nemít.
189+
Když ale funkce něco *počítá*, nebo když si nejsi jist{{gnd('ý', 'á')}},
190+
je dobré ve funkci `print` ani `input` nemít.
173191

174192

175193
## None

0 commit comments

Comments
 (0)