Skip to content

Commit 05f3c26

Browse files
committed
Work on function definitions
1 parent 704f0a7 commit 05f3c26

File tree

1 file changed

+102
-67
lines changed
  • lessons/fast-track/python-basics

1 file changed

+102
-67
lines changed

lessons/fast-track/python-basics/index.md

Lines changed: 102 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,8 @@ Lepší program by dělal tohle:
10421042
* Když je heslo správné:
10431043
* Pustí uživatele dovnitř
10441044

1045-
V Pythonu se „když“ řekne `if`. Používá se takhle:
1045+
Anglicky se „když“ řekne *if*. A to je i jméno Pythoního příkazu.
1046+
Používá se takhle:
10461047

10471048
```python
10481049
heslo = input('Zadej heslo: ')
@@ -1082,14 +1083,15 @@ Ještě lepší program by ale:
10821083
* Jinak:
10831084
* Spustí alarm
10841085

1085-
Pythontaké příkazy `elif` a `else`:
1086+
K tomuPython příkaz `else` – „jinak“:
10861087

10871088
```python
10881089
heslo = input('Zadej heslo: ')
10891090
if heslo == 'čokoláda':
10901091
print('Správně! Račte vstoupit.')
10911092
else:
1092-
print('POZOR! POZOR! NEOPRÁVNĚNÝ VSTUP!')
1093+
print('POZOR! POZOR!')
1094+
print('NEOPRÁVNĚNÝ VSTUP!')
10931095
```
10941096

10951097
Funuje to?
@@ -1155,113 +1157,146 @@ V posledních třech cvičeních ses dozvěděla o:
11551157

11561158
Čas na předposlední část této kapitoly!
11571159

1158-
## Vlastní funkce!
11591160

1160-
Pamatuješ na funkci `len()`, kterou jsi spouštěla v Pythonu? Máme pro tebe dobrou zprávu. Nyní se dozvíš, jak napsat své vlastní funkce!
1161+
## Vlastní funkce
11611162

1162-
Funkce je sled instrukcí, které by měl Python provést. Každá funkce v Pythonu začíná klíčovým slovem `def`, dále je uveden název a funkce může mít také nějaké parametry. Začněme u té nejlehčí. Nahraď kód v **python_intro.py** následujícím:
1163+
Pamatuješ na funkce `len()` a `print()`?
1164+
Jsou jako kouzelná zaříkadla z knihy vázané v kůži: když víš jak se jmenují
1165+
a umíš je správně {# XXX: <s>vyslovit</s> #}napsat, něco pro tebe udělají.
11631166

1164-
```python
1165-
def hi():
1166-
print('Hi there!')
1167-
print('How are you?')
1167+
Teď postoupíme na další úroveň: vymyslíme si vlastní zaříkadla!
1168+
Jak? Budeme kombinovat příkazy, které už známe.
1169+
1170+
Třeba funkce, která tě pozdraví, by měla:
1171+
1172+
* Vypsat „ahoj!“
1173+
* Vypsat „jak se máš?“
11681174

1169-
hi()
1175+
Definice funkce v Pythonu začíná klíčovým slovem `def`,
1176+
dále je uveden název a závorky (zatím prázdné).
1177+
Pak jako po `if` dvojtečka, a odsazené příkazy,
1178+
které má funkce provést.
1179+
1180+
```python
1181+
def pozdrav():
1182+
print('Ahoj!')
1183+
print('Jak se máš?')
11701184
```
11711185

11721186
Naše první funkce je připravena!
11731187

1174-
Asi se divíš, proč jsme napsaly název funkce v dolní části souboru. To je proto, že Python přečte soubor a spustí ho od shora dolů. Pokud chceš využívat svou funkci, musíš její název znovu napsat dole (tím ji zavoláš/spustíš).
1188+
Když ale tenhle program spustíš, nic neudělá.
1189+
To proto, že tohle je jen *definice* funkce.
1190+
Python teď ví jak pozdravit – ale neřeklo se, že to má udělat!
11751191

1176-
Tak to teď zkus a uvidíš, co se stane:
1192+
Na konec programu přidej volání.
1193+
To už není součást funkce, ale pokračování samotného programu.
1194+
Proto nesmí být odsazené:
11771195

1178-
```
1179-
$ python3 python_intro.py
1180-
Hi there!
1181-
How are you?
1196+
```python
1197+
def pozdrav():
1198+
print('Ahoj!')
1199+
print('Jak se máš?')
1200+
1201+
pozdrav()
11821202
```
11831203

1184-
To bylo snadné! Napišme naši první funkci s parametry. Použijeme předchozí příklad - napíšeme funkci, která nás pozdraví podle toho, jaké zadáme jméno při jejím spuštění:
1204+
Co se stane, když funkci zavoláš několikrát po sobě?
11851205

11861206
```python
1187-
def hi(name):
1207+
def pozdrav():
1208+
print('Ahoj!')
1209+
print('Jak se máš?')
1210+
1211+
pozdrav()
1212+
pozdrav()
1213+
pozdrav()
11881214
```
11891215

1190-
Jak vidíš, nyní jsme přidaly naší funkci parametr, `name`:
1216+
Co se stane, když volání dáš *nad* definici funkce, místo na konec programu?
11911217

11921218
```python
1193-
def hi(name):
1194-
if name == 'Ola':
1195-
print('Hi Ola!')
1196-
elif name == 'Sonja':
1197-
print('Hi Sonja!')
1198-
else:
1199-
print('Hi anonymous!')
1219+
pozdrav()
12001220

1201-
hi()
1221+
def pozdrav():
1222+
print('Ahoj!')
1223+
print('Jak se máš?')
12021224
```
12031225

1204-
Pamatuj si: Funkce `print` je odsazená čtyři mezery v příkazu `if`. To je proto, aby se funkce spustila, pokud je splněna podmínka. Podívej se, jak to funguje nyní:
1205-
1206-
```
1207-
$ python3 python_intro.py
1226+
{% filter solution %}
1227+
``` pycon
12081228
Traceback (most recent call last):
1209-
File "python_intro.py", line 10, in <module>
1210-
hi()
1211-
TypeError: hi() missing 1 required positional argument: 'name'
1229+
File "<stdin>", line 1, in <module>
1230+
NameError: name 'pozdrav' is not defined
12121231
```
12131232

1214-
Jejda, chyba. Naštěstí nám Python vypsal docela užitečnou chybovou zprávu. Jak vidíš, funkce `hi()` (kterou jsme definovaly) má jeden povinný parametr `(s názvem name)`, který jsme zapomněly při volání funkce předat. Pojďme to opravit v následující části:
1233+
Python si stěžuje na `NameError` – nezná nic jménem `pozdrav`.
12151234

1216-
```python
1217-
hi("Ola")
1218-
```
1235+
Python totiž program čte odzhora dolů.
1236+
Až příkazem `def` se „naučí" jak zdravit –
1237+
Předtím, než se k příkazu `def` dostane, funkce neexistuje.
1238+
{% endfilter %}
12191239

1220-
A znovu jej spusť:
1240+
# Parametry
12211241

1222-
```
1223-
$ python3 python_intro.py
1224-
Hi Ola!
1225-
```
1242+
Funkce jako `len('slovo')` a `print(1 + 2)` umí navíc pracovat s hodnotou.
12261243

1227-
A co když změníme jméno?
1244+
Pojďme napisať funkciu, ktorá ťa pozdraví menom.
1245+
(Uľahčíme si to použitím jazyka, ktorý nepoužíva piaty pád.)
12281246

12291247
```python
1230-
hi("Sonja")
1248+
def pozdrav(meno):
1249+
print('Vitam ťa,', meno)
1250+
1251+
pozdrav('Ola')
1252+
pozdrav('Soňa')
1253+
pozdrav('Hubert')
1254+
pozdrav('Anička')
12311255
```
12321256

1233-
Spustíme:
1257+
Jak to funguje?
1258+
V definici funkce uvedeš závorkách *parametr* – jméno proměnné se kterou bude
1259+
funkce pracovat.
1260+
Hodnotu pro tenhle parametr pak zadáš při volání funkce.
12341261

1235-
```
1236-
$ python3 python_intro.py
1237-
Hi Sonja!
1238-
```
1262+
Zvládneš napsat program, který se zeptá na jméno a pak tě pozdraví?
12391263

1240-
C myslíš, že se stane, když tam napíšeš jiné jméno než Ola nebo Sonja? Zkus to a uvidíme, jestli máš pravdu. Mělo by to vypsat toto:
1264+
{% filter solution %}
1265+
```python
1266+
def pozdrav(meno):
1267+
print('Vitam ťa,', meno)
12411268

1269+
pozdrav(input('Jak se jmenuješ? '))
12421270
```
1243-
Hi anonymous!
1244-
```
1271+
{% endfilter %}
12451272

1246-
To je paráda, co? Nemusíš se opakovat a měnit takto jméno pokaždé, když chceš, aby funkce pozdravila jinou osobu. To je přesně důvod, proč potřebujeme funkce: abychom nikdy neopakovaly náš kód!
1273+
Co se stane, když funkci zavoláš bez hodnoty pro parametr?
12471274

1248-
Udělejme to ještě chytřeji – existuje více jmen než dvě a psaní podmínky pro každé jméno by bylo těžké, že?
1275+
{% filter solution %}
1276+
``` pycon
1277+
Traceback (most recent call last):
1278+
File "<stdin>", line 9, in <module>
1279+
TypeError: pozdrav() missing 1 required positional argument: 'meno'
1280+
```
12491281

1250-
```python
1251-
def hi(name):
1252-
print('Hi ' + name + '!')
1282+
Python si stěžuje na `TypeError` – funkce `pozdrav` nedostala povinný
1283+
argument `meno`.
1284+
{% endfilter %}
12531285

1254-
hi("Rachel")
1255-
```
1286+
Funkce může obsahovat jakýkoli kód.
1287+
Třeba podmíněný příkaz, `if`.
1288+
Příkazy po `if` je pak potřeba odsatit o *další* čtyři mezery:
12561289

1257-
Pojďme zavolat náš nový kód:
1290+
```python
1291+
def pozdrav(meno):
1292+
print('Vitam ťa,', meno)
1293+
if meno == 'Ola':
1294+
print('Ty umíš programovať!')
12581295

1296+
pozdrav('Hubert')
1297+
pozdrav('Ola')
1298+
pozdrav('Soňa')
12591299
```
1260-
$ python3 python_intro.py
1261-
Hi Rachel!
1262-
```
1263-
1264-
Blahopřejeme! Právě ses naučila, jak psát funkce :)
12651300

12661301
## Smyčky/Loops
12671302

0 commit comments

Comments
 (0)