Pamatuješ na funkce len()
, print()
nebo randrange()
z modulu random
?
Jsou jako kouzelná zaříkadla z knihy vázané v kůži: když víš jak se jmenují
a umíš je správně napsat, něco pro tebe udělají.
Teď postoupíme na další úroveň: vymyslíme si vlastní zaříkadla! Jak? Budeme kombinovat příkazy, které už známe.
Třeba funkce, která tě pozdraví, by mohla:
Definice funkce v Pythonu začíná klíčovým slovem def
,
dále je uveden název a následují závorky (zatím prázdné).
Pak je jako po if
dvojtečka a odsazené příkazy – tentokrát
příkazy, které má funkce provést.
Napiš to do programu:
def pozdrav():
print('Ahoj!')
print('Jak se máš?')
Tvoje první funkce je připravena!
Když ale tenhle program spustíš, nic neudělá. To proto, že tohle je jen definice funkce. Python teď ví jak pozdravit – ale neřeklo se, že to má udělat!
Na konec programu přidej volání. To už není součást funkce, ale pokračování samotného programu. Proto nesmí být odsazené:
def pozdrav():
print('Ahoj!')
print('Jak se máš?')
pozdrav()
Co se stane, když funkci zavoláš několikrát po sobě?
def pozdrav():
print('Ahoj!')
print('Jak se máš?')
pozdrav()
pozdrav()
pozdrav()
Co se stane, když volání dáš nad definici funkce, místo na konec programu?
pozdrav()
def pozdrav():
print('Ahoj!')
print('Jak se máš?')
Tvoje funkce se dá volat jen jako pozdrav()
.
Funkce ale jako len('slovo')
a print(1 + 2)
umí navíc pracovat s hodnotou.
Poďme teraz napisať funkciu, ktorá ťa pozdraví menom. (Uľahčíme si to použitím jazyka, ktorý nepoužíva piaty pád.)
def pozdrav(meno):
print('Vítam ťa,', meno)
pozdrav('Ola')
pozdrav('Soňa')
pozdrav('Hubert')
pozdrav('Anička')
Jak to funguje? V definici funkce uvedeš závorkách parametr – jméno proměnné se kterou bude funkce pracovat. Hodnotu pro tenhle parametr pak zadáš při volání funkce.
Zvládneš napsat program, který se zeptá na jméno a pak tě pozdraví?
Co se stane, když funkci zavoláš bez hodnoty pro parametr?
Funkce může obsahovat jakýkoli kód.
Třeba podmíněný příkaz, if
.
Příkazy po if
je pak potřeba odsatit o další čtyři mezery:
def pozdrav(meno):
print('Vitam ťa,', meno)
if meno == 'Ola':
print('Ty umíš programovať!')
pozdrav('Hubert')
pozdrav('Ola')
pozdrav('Soňa')
Další věc, kterou funkce jako len
umí, je vrátit výsledek:
delka = len('Ola')
print(delka) # napíše: 3
Jak na to, kdybys takovou funkci chtěla napsat?
V definici funkce můžeš použít příkaz return
.
Ten funkci okamžitě ukončí a vrátí danou hodnotu:
def dvojnasobek(x):
return x * 2
print(dvojnasobek(42))
Zkus se zamyslet, jak napsat funkci, která vrátí pátý pád nějakého jména. Třeba:
paty_pad('Ola')
→ 'Olo'paty_pad('Soňa')
→ 'Soňo'paty_pad('Hubert')
→ 'Huberte'Tohle je velice složitý úkol, tak si ho trochu zjednodušíme. Funkce by měla dělat tohle:
Huberte
a
:o
místo posledního písmenkadef paty_pad(jmeno):
if jmeno == 'Hubert':
return 'Huberte'
elif jmeno[-1] == 'a':
return jmeno[:-1] + 'o'
else:
return jmeno
Dokážeš změnit funkci pozdrav
, aby zdravila v češtině?
Můžeš na to použít funkci paty_pad
.
Co bylo nového tentokrát?
return
ukončí funkci a vrátí hodnotu