-
V minulém videu jsme si tady napsali hezký malý program,
-
který vyžadoval číselný vstup od uživatele
-
a potom vypočítal faktoriál tohoto čísla
-
a nakonec ho vypsal.
-
A to je krásné, ale můžete si představit svět,
-
kde byste chtěli vypočítat faktoriál na několika místech
-
nebo v několika různých programech
-
nebo byste ve stejném programu chtěli vypočítat
-
faktoriál několikrát.
-
A nemůžete psát tento kód
-
znovu a znovu,
-
abyste vypočítali faktoriál.
-
Takže co chci dělat v tomto videu je to,
-
že definuji funkci, která vypočítá faktoriál
-
a potom tuto funkci budeme moc použít
-
pokaždé, když budeme chtít faktoriál vypočítat.
-
Co tahle funkce v podstatě bude dělat je to,
-
že v podstatě dá tento kód,
-
dá tento kód přímo zde,
-
na jedno místo a potom další
-
program, po kterém budu chtít vypočítat faktoriál,
-
prostě zavolá tento kód.
-
Nebudu to přepisovat.
-
Tak vám ukážu, o čem mluvím.
-
Jdu definovat funkci
-
a klíčové slovo v Pythonu,
-
takže toto je druh speciálního slova,
-
které říká interpretu, že je tady něco
-
speciálního, co se stane.
-
Klíčové slovo v Pythonu pro definování funkce je "def".
-
Takže jdu definovat funkci,
-
jdu zavolat funkci faktoriálu.
-
A to směřuje k dobrému nápadu
-
- pojmenovávat věci tak, aby jejich názvy napovídaly, co skutečně dělají.
-
Někteří začínající programátoři mají zvyk
-
pojmenovávat věci například "x245"
-
a někdo, kdo přijde později,
-
potom nemá ponětí, o čem tato proměnná
-
nebo funkce vlastně je.
-
Takže je určitě lepší ji pojmenovat tak,
-
abychom mohli předpokládat, co asi bude dělat.
-
Moje funkce se jmenuje faktoriál
-
a uživatelé, když zavolají faktoriál,
-
potřebují říci číslo,
-
ze kterého se faktoriál vypočítá.
-
A tak jej vloží do argumentu, který se jmenuj "číslo".
-
A přestože jsou tato slova trochu matoucí,
-
za chvíli je detailně vysvětlím,
-
a můžete doufat, že až je uvidíte po několikáté,
-
budou vám již povědomé.
-
A tak napíšou číslo
-
a já se musím vrátit zpět,
-
abych zavolala program
-
a vlastně jsem neměl říkat,
-
že uživatel zadá číslo.
-
Volací program zadá číslo
-
a já potřebuji vrátit faktoriál tohoto čísla,
-
abych zavolal program.
-
Tak to napíšu dolů jako komentář.
-
Takže vrátit faktoriál argumentu "číslo".
-
A někdy můžete slyšet slovo parametr
-
a někdy zase slovo argument.
-
Když děláte definici funkce,
-
je více formální nazývat to parametr.
-
"Číslo" je jedno z parametrů
-
funkce faktoriál.
-
Aktuální číslo do něj někdo vložil,
-
říkáme tak, že někdo zavolal faktoriál s "3" tady,
-
to je formálnější než kdyby 3 byla argumentem.
-
Takže vrátí faktoriál argumentu "číslo".
-
A toto přímo zde je argument "číslo".
-
Nemyslím, že je to jako libovolné slovo číslo,
-
mluvím o tom číslu přímo zde.
-
Možná řeknu argument "číslo".
-
Možná to dám do uvozovek, aby bylo jasnější,
-
že toto je argument.
-
Nemluvím o žádném obecném čísle.
-
Tak ho definujme.
-
V podstatě použijeme ten stejný kód,
-
takže ho jen zkopíruji a vložím,
-
zkopíruji a vložím to, co jsem vzal tady.
-
Takže to odsud vyjmu
-
a tady to vložím.
-
Ale musím být opatrný u odsazení,
-
protože odsazení je způsob, jak Python ví,
-
která část k čemu patří, ví, jak ji má interpretovat.
-
Takže všechno v definici této funkce
-
musí být odsazeno a uděláme to čtyřmi mezerami.
-
Jeden, dva, tři, čtyři.
-
A další čtyři.
-
Jeden, dva, tři, čtyři.
-
A další část cyklu for.
-
Jeden, dva, tři, čtyři.
-
A pojďme popřemýšlet o tom, co zatím máme.
-
Vloží to nějaké číslo,
-
definujeme proměnnou "produkt", která se rovná 1.
-
A budeme více mluvit o pravidlech definování proměnných,
-
ale tato proměnná může být použita pouze
-
v definici tohoto faktoriálu,
-
protože poprvé, když jsem ji definoval,
-
byla venku - přímo zde.
-
Takže potzději se více dostaneme k pravidlům definování proměnných.
-
A teď se stejnou logikou, jako jsme to dělali předtím,
-
"for i in range(number)".
-
Teď nedostáváme číslo s použitím funkce input (vložit),
-
číslo je pouze vloženo do funkce,
-
potom se "produkt" rovná "produkt" x("i" + 1).
-
Ta stejná logika, jakou jsme dělali předtím.
-
Potom půjdete přímo do tohoto cyklu for,
-
a až ho přejdete,
-
v podstatě přes něj půjdete ještě "číslo" krát.
-
"Produkt" v něm bude obsahovat faktoriál "čísla".
-
A namísto toho, aby se přímo vypsalo,
-
vrátí se,
-
vrátíme se do volacího programu
-
a v dalším videu udělám diagram,
-
aby to bylo jasnější a méně matoucí pro vás.
-
Jdu vrátit produkt.
-
Je to v podstatě přesně stejný kód, jaký jsme měli předtím,
-
ale zabalil jsem ho dovnitř funkce,
-
definovali jsme funkci.
-
Je vložen v ní, má parametr, který se jmenuje "číslo",
-
když chcete faktoriál čísla 3,
-
vyzkoušejte faktoriál 3
-
a 3 bude argument, bude to hodnota,
-
která bude vložena na místě proměnné "číslo"
-
nebo hodnota, na kterou "číslo" odkazuje.
-
Definovali jsme, že se "produkt" rovná 1
-
a potom půjdeme "číslo" krát.
-
Takže "for i in range(number)",
-
logiku tohoto jsme si vysvětlili v předchozím videu.
-
Pokaždé, když začnete s 1,
-
dostanete 1 x 1 a to se rovná 1,
-
potom se bude "produkt" rovnat 1,
-
ale potom se "i" bude rovnat 1.
-
"i" začíná na nule,
-
takže to bude 1 x (0 + 1) a to nám dá 1,
-
potom "i" bude 2, takže to bude 1 x 1,
-
promiňte, potom bude "i" 1.
-
To bude 1 x (1 + 1), což je 1 x 2,
-
a to je 2,
-
potom a tímto způsobem se bude provádět inkremetace,
-
detailně jsme si to vysvětlili v minulém videu.
-
A nakonec to vrátí tento "produkt".
-
Takže chceme, aby se program choval úplně stejně jako předtím,
-
ale teď používáme tuto funkci.
-
Co bychom měli udělat je, že bychom měli říci,
-
stále máme vstup, takže toto je definice naší funkce,
-
ale podle našeho hlavního programu
-
jsme definovali funkci
-
a teď bychom měli říci:
-
"Podívej, od uživatele jsme nedostali žádné negativní číslo,
-
abychom z něj vypočítali faktoriál."
-
A dejme to do proměnné,
-
kterou pojmenujme "user_input".
-
A potom to, co udělám, je,
-
že definuji další proměnnou,
-
kterou pojmenuji "factorialofuser_input"
-
a teď to bude zajímavé.
-
Tady tu funkci zavolám,
-
takže se to bude rovnat
-
faktoriálu čehokoliv, co uživatel vloží.
-
Takže faktoriál "user_input",
-
faktoriál této proměnné přímo zde.
-
Faktoriál uživatelského vstupu.
-
Takže teď "factorialofuser_input" bude uchovávat,
-
hádám, že bychom měli říci,
-
že bude ukazovat aktuální odpověď
-
a teď bychom ji měli vypsat.
-
Takže teď můžeme vypsat "factoriaůofuser_input".
-
Vypadají jako věty,
-
ale jsou to pouze názvy proměnných,
-
které jsem tímto způsobem pojmenoval,
-
abyste věděli, co je uvnitř těchto proměnných
-
nebo na co každá proměnná opravdu ukazuje.
-
Takže "factorialofuser_input".
-
Teď přijde moment pravdy,
-
kdy pokaždé ukládám program a potom se ho pokouším spouštět.
-
Takže vyzkoušejme jeho běh právě teď a sledujme, co se stane.
-
Sledujme, co se zde stane.
-
Tak zatím se nic nevypsalo,
-
takže znovu,
-
jsem si jistý, že program tady začne,
-
ale vše, co ve všem, co jsme definovali,
-
jsme ještě nevytvořili žádnou interakci s uživatelem
-
takže to opravdu ještě fungovat nemůže.
-
Pouze jsme definovali tuto funkci,
-
která řekne: "Ok, dej mi nějaký vklad od uživatele"
-
a to je to, co tady děláme.
-
Po tom, co jsem vložíme nějaké číslo,
-
to zavolá tuto funkci s číslem,
-
které jsme vložili a číslo, které jsme vložili,
-
se vloží do proměnné "user_input"
-
a potom zavolá faktoriál
-
s proměnnou "user_input" jako argumentem.
-
Tak to pojďme vyzkoušet s číslem 3.
-
A nefunguje to!
-
Oh, už vidím, proč to nefunguje.
-
Protože tady je tento pozůstatek z předchozího programu,
-
který tady nemá žádný smysl.
-
Dovolte mi tedy se ho zbavit.
-
To je skvělá hodina, kdy se mi poprvé
-
nepodařilo udělat něco, co perfektně funguje.
-
Tak mě to nechte zkusit znovu!
-
To byl prostě nesmysl,
-
že jsem si ani neuvědomil, co je tam dole.
-
Takže mě to nechte zkusit znovu.
-
Tak znovu 3.
-
A dá mi to správnou odpověď.
-
Dá mi to faktoriál čísla 3
-
a to je fajn,
-
protože teď interpret mého Pythonu předpokládá,
-
že tato definice byla vytvořena.
-
Teď můžu zavolat faktoriál přímo z interpretu,
-
když mám další program,
-
mohu ho zavolat několika způsoby
-
a teď byste snad měli ocenit,
-
proč je to, co jsme udělali v definici této funkce, tak fajn.
-
Protože můžeme počítat,
-
z toho důvodu, že jsem definoval tuto funkci faktoriálu,
-
mohu vypočítat faktoriál čísla 4.
-
Je to 24.
-
Mohu říci, že faktoriál 5 - faktoriál 3.
-
114.
-
Můžu získat faktoriál 12
-
a můžete říct počítači,
-
dokonce přestože tohle všechno je pouze interpret,
-
budeme si o interpretu a kompilování kódu povídat více,
-
je to neuvěřitelné rychlé.
-
Rychlejší, než jsme schopni pochopit.
-
Takže toto je ta pravá síla funkcí,
-
je to to, že nemusím pokaždé přepisovat kód,
-
pouze ho mohu volat s rozdílnými argumenty.
-
Takže faktoriál 2, mohu to dělat pořád,
-
nemusím vracet program.
-
A když píšu další programy, které používají faktoriál,
-
možná to mohu kombinovat,
-
mohu pouze použít toto jako funkci,
-
ve skutečnosti ani nevím,
-
co se děje uvnitř funkce.
-
Jeden z těch dalších mocných aspektů funkcí je,
-
že řekněme mohu napsat hromady programů jako je tento,
-
takže mám tady tento program, který volá faktoriál.
-
Ale řekněme, že můžete přijít s lepším způsobem toho,
-
jak to napsat.
-
Po veškerý čas, kdy bude váš program
-
dělat stejné věci ale s jiným kóde uvnitř
-
koncový uživatel nic nezpozoruje.
-
Možná napíšete rychlejší
-
nebo jednoduší způsob toho, jak toto udělat.
-
Způsob, který využívá méně paměti nebo méně energie procesoru.
-
Později to tedy budete moci nahradit
-
a potom program, který to volá,
-
během doby, kdy bude stále pracovat,
-
bude pracovat lépe.
-
Bude pracovat lépe než toto.