< Return to Video

Definování funkce faktoriálu

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

Definování funkce faktoriálu

more » « less
Video Language:
English
Duration:
10:06
Aneta Dufková added a translation

Czech subtitles

Revisions