Pro kouče

Slajdy jsou k dispozici na stránkách PyLadies.

Pokud jsi minule udělala projekt navíc, tak jsi nejspíš do programu zadala hotnotu čísla π.

Python má ale spoustu vychytávek zabudovaných – není třeba je přímo psát, stačí jen vědět, kam se podívat.

můžeme zpřístupnit importem z modulu math.

from math import pi

print(pi)

Jak je vidět, π je tak trochu schované. Přece jen, print nebo if potřebují všichni, ale ne všichni mají rádi matematiku…

Teď ale u matematiky ještě chvilku zůstaneme.

Výrazy

V matematice máme spoustu různých operací, které se zapisují symboly – třeba plus a minus. Stejné symboly používá i Python:

  • 3 + 4
  • a - b

S násobením a dělením už je to složitější, matematický zápis se na běžné klávesnici nedá napsat:

  • 3 · 4
  • ¾

V Pythonu si ale pořád vystačíme s operátorem.

Matematici ovšem psali na papír, a tak vymýšleli stále nezapsatelnější klikyháky, které se programátorům nechtělo přepisovat:

  • x²
  • xy
  • sin θ
  • Γ(x)
  • x
  • x
  • ab
  • ab

Ne že by neexistovaly programovací jazyky, na které je potřeba speciální klávesnice. Ale programy v nich se většinou nedají dost dobře psát, ani číst.

Třeba tady je program v jazyce APL:

⍎’⎕’,∈Nρ⊂S←’←⎕←(3=T)∨M∧2=T←⊃+/(V⌽”⊂M),(V⊖”⊂M),(V,⌽V)⌽”(V,V←1¯1)⊖”⊂M’

V Pythonu je operátorů poměrně málo. Už z nich známe skoro půlku! A i tak některé místo symbolů používají slova. Tady jsou všechny Pythonní operátory:

== != < > <= >= | ^ & << >> + - * @ / // % ~ ** [ ] ( ) { } .
lambda if else or and not in not in is is not

Je asi jasné, že většina operací, které v programu budeme chtít udělat, se nedá vyjádřit operátorem.

Co s tím?

Jeden z matematických zápisů, které jsem před chvilkou ukázal, používá pro operace jména.

  • x = sin a

A to jde napsat na klávesnici! Python jenom přidá závorky, aby bylo jasnější, k čemu se operace vztahuje:

x = sin(a)

Ten sin musíš naimportovat, jako předtím (přece jen, ne všichni mají rádi matematiku). Takže celý program vypadá následovně:

from math import sin

x = sin(1)  # (v radiánech)
print(x)

Volání funkcí

Funkci voláme jménem.

Je to jméno jako u proměnných – vlastně to je proměnná, jen je v ní, místo čísla nebo řetězce, funkce.

Za jméno funkce patří závorky, do nichž uzavřeme argument (neboli vstup) funkce. To je informace, se kterou bude naše funkce pracovat – třeba sin() ze svého argumentu vypočítá sinus.

Volání funkce je výraz a výsledná, neboli návratová, hodnota (angl. return value) se dá třeba přiřadit do proměnné.

        jméno funkce
                 │
                ╭┴╮
            x = sin(1)
            ▲      ╰┬╯
            │     argument
            │
            ╰── návratová hodnota

Nebo se dá použít místo čísla v součtu:

a = sin(1) + cos(2)

Nebo v podmínce ifu:

if sin(1) < 3:

Nebo dokonce jako argument jiné funkce:

print(sin(1))

… a podobně.

Argumenty

Některým funkcím můžeme předat i více argumentů. Třeba funkci print, která všechny své argumenty vypíše na řádek. Jednotlivé argumenty oddělujeme čárkami:

print(1, 2, 3)
print("Jedna plus dva je", 1 + 2)

Některé funkce nepotřebují žádný argument. Příkladem je zase print. Je ale nutné napsat závorky – i když jsou prázdné. Hádej, co tohle volání udělá?

print()

Řešení

Funkce je potřeba volat

Pozor na to, že když nenapíšeš závorky, funkce se nezavolá! (Nedostaneš návratovou hodnotu, ale samotnou funkci.) Zkus si, co dělají tyhle příklady, abys pak podobné chyby poznala:

from math import sin
print(sin(1))
print(sin)
print(sin + 1)

Pojmenované argumenty

Některé funkce umí pracovat i s pojmenovanými argumenty. Píšou se podobně jako přiřazení do proměnné, s rovnítkem, ale uvnitř závorek.

Třeba funkce print normálně ukončí výpis novým řádkem, ale pomocí argumentu end se dá vypsat i něco jiného.

Tenhle příklad je potřeba napsat do souboru; v interaktivní konzoli nebude výstup vypadat jak má.

print('1 + 2', end=' ')
print('=', end=' ')
print(1 + 2, end='!')
print()

Užitečné funkce

Nakonec si ukážeme pár základních funkcí, které nám Python nabízí. Můžeš si stáhnout i přehled, který se rozdává na srazech.

Vstup a výstup

Tyhle funkce už známe. print vypíše nepojmenované argumenty, oddělené mezerou. Pojmenovaný argument end určuje, co se vypíše na konci (místo přechodu na nový řádek); sep zase, co se vypíše mezi jednotlivými argumenty (místo mezery).

Příklad opět doporučuji spustit ze souboru, ne interaktivně:

print(1, "dvě", False)
print(1, end=" ")
print(2, 3, 4, sep=", ")

Základní funkce na výstup, input, vypíše otázku, načte vstup od uživatele a vrátí ho jako řetězec.

input('zadej vstup: ')

Převádění typů

Co ale když nechceme pracovat s řetězcem, ale třeba s číslem? Tady nám pomůže skupina funkcí, které umí převádět čísla na řetězce a zpátky. Každý ze tří typů (angl. types) proměnných, které zatím známe, má funkci, která vezme nějakou hodnotu a vrátí podobnou hodnotu „svého“ typu. Na celá čísla je funkce int (z angl. integer), na reálná čísla je float (z angl. floating-point), a pro řetězce str (z angl. string).

int(x)              # převod na celé číslo
float(x)            # převod na reálné číslo
str(x)              # převod na řetězec

Příklady:

3 == int('3') == int(3.0) == int(3.141) == int(3)
8.12 == float('8.12') == float(8.12)
8.0 == float(8) == float('8') == float(8.0)
'3' == str(3) == str('3')
'3.141' == str(3.141) == str('3.141')

Ne všechny převody jsou možné:

int('blablabla')    # chyba!
float('blablabla')  # chyba!
int('8.9')          # chyba!

…a jak si poradit s chybou, která nastane, když použiješ špatnou hodnotu, si řekneme později. Teď je hlavní to, že už víš, jak funguje int(input('zadej číslo: ')) z minula!

Matematické funkce

Matematika je občas potřeba, takže se pojďme podívat, jak v Pythonu pracovat s čísly.

Jedna zajímavá matematická funkce je k dispozici vždy:

round(cislo)    # zaokrouhlení

Spousta dalších se dá importovat z modulu math:

from math import sin, cos, tan, sqrt, floor, ceil

sin(uhel)       # sinus
cos(uhel)       # kosinus
tan(uhel)       # tangens
sqrt(cislo)     # druhá odmocnina

floor(cislo)    # zaokrouhlení dolů
ceil(cislo)     # zaokrouhlení nahoru

Nápověda

Další funkce pomáhá programátorům: Můžeš si přímo z programu (nebo z interaktivního režimu) vyvolat nápovědu k nějaké funkci. (Občas bývá srozumitelná i pro začátečníky, občas bohužel spíš ne – v takovém případě zkus Google).

Nápověda se zobrazí podle systému buď v prohlížeči, nebo přímo v terminálu. Když je nápověda v terminálu příliš dlouhá, dá se v ní pohybovat (, , PgUp, PgDn) a „ven“ se dostaneš klávesou Q (od Quit).

Nápověda k funkci print se zobrazí příkazem:

help(print)

Nápověda se dá vypsat i k celému modulu.

import math

help(math)

Náhoda

Nakonec si ukážeme dvě funkce z modulu random, které jsou velice užitečné pro hry.

from random import randrange, uniform

randrange(a, b)   # náhodné celé číslo od a do b-1
uniform(a, b)     # náhodné „desetinné“ číslo od a do b

Pozor na to, že randrange(a, b) nikdy nevrátí samotné b. Pokud potřebujeme náhodně vybrat ze tří možností, použij randrange(0, 3), což vrátí 0, 1, nebo 2:

from random import randrange

cislo = randrange(0, 3)  # číslo je od 0, 1, nebo 2
if cislo == 0:
    print('Kolečko')
elif cislo == 1:
    print('Čtvereček')
else:  # 2
    print('Trojúhelníček')

A další

Python dává k dispozici obrovské množství dalších funkcí a modulů, i když ne všem budeš ze začátku rozumět. Všechny jsou – anglicky – popsány v dokumentaci Pythonu, např. vestavěné funkce, matematika.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2017/pyladies-ostrava-podzim:loops:0",
      "title": "Funkce",
      "html": "\n          \n    \n\n    <div class=\"admonition note\"><p class=\"admonition-title\">Pro kou&#x10D;e</p>\n<p>Slajdy jsou k dispozici na str&#xE1;nk&#xE1;ch\n<a href=\"http://pyladies.cz/v1/s003-looping/functions.html#/\">PyLadies</a>.</p>\n</div><p>Pokud jsi minule ud&#x11B;lala projekt nav&#xED;c, tak jsi nejsp&#xED;&#x161;\ndo programu zadala hotnotu &#x10D;&#xED;sla &#x3C0;.</p>\n<p>Python m&#xE1; ale spoustu vychyt&#xE1;vek zabudovan&#xFD;ch &#x2013; nen&#xED; t&#x159;eba je p&#x159;&#xED;mo ps&#xE1;t,\nsta&#x10D;&#xED; jen v&#x11B;d&#x11B;t, kam se pod&#xED;vat.</p>\n<p><em>P&#xED;</em> m&#x16F;&#x17E;eme zp&#x159;&#xED;stupnit <em>importem</em> z&#xA0;modulu <code>math</code>.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">pi</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">)</span>\n</pre></div><p>Jak je vid&#x11B;t, &#x3C0; je tak trochu schovan&#xE9;.\nP&#x159;ece jen, <code>print</code> nebo <code>if</code> pot&#x159;ebuj&#xED; v&#x161;ichni, ale ne v&#x161;ichni maj&#xED;\nr&#xE1;di matematiku&#x2026;</p>\n<p>Te&#x10F; ale u&#xA0;matematiky je&#x161;t&#x11B; chvilku z&#x16F;staneme.</p>\n<h2>V&#xFD;razy</h2>\n<p>V&#xA0;matematice m&#xE1;me spoustu r&#x16F;zn&#xFD;ch operac&#xED;,\nkter&#xE9; se zapisuj&#xED; symboly &#x2013; t&#x159;eba plus a&#xA0;minus.\nStejn&#xE9; symboly pou&#x17E;&#xED;v&#xE1; i&#xA0;Python:</p>\n<ul>\n<li>3 + 4</li>\n<li><var>a</var> - <var>b</var></li>\n</ul>\n<p>S&#xA0;n&#xE1;soben&#xED;m a&#xA0;d&#x11B;len&#xED;m u&#x17E; je to slo&#x17E;it&#x11B;j&#x161;&#xED;,\nmatematick&#xFD; z&#xE1;pis se na b&#x11B;&#x17E;n&#xE9; kl&#xE1;vesnici ned&#xE1; napsat:</p>\n<ul>\n<li>3 &#xB7; 4</li>\n<li>&#xBE;</li>\n</ul>\n<p>V Pythonu si ale po&#x159;&#xE1;d vysta&#x10D;&#xED;me s&#xA0;oper&#xE1;torem.</p>\n<p>Matematici ov&#x161;em psali na pap&#xED;r,\na&#xA0;tak vym&#xFD;&#x161;leli st&#xE1;le nezapsateln&#x11B;j&#x161;&#xED; klikyh&#xE1;ky,\nkter&#xE9; se program&#xE1;tor&#x16F;m necht&#x11B;lo p&#x159;episovat:</p>\n<ul>\n<li><var>x</var>&#xB2;</li>\n<li><var>x</var> &#x2264; <var>y</var></li>\n<li>sin &#x3B8;</li>\n<li>&#x393;(<var>x</var>)</li>\n<li>&#x222B;<var>x</var></li>\n<li>&#x230A;<var>x</var>&#x230B;</li>\n<li><var>a</var> &#x2605; <var>b</var></li>\n<li><var>a</var> &#x2A01; <var>b</var></li>\n</ul>\n<p>Ne &#x17E;e by neexistovaly programovac&#xED; jazyky,\nna kter&#xE9; je pot&#x159;eba speci&#xE1;ln&#xED; kl&#xE1;vesnice.\nAle programy v&#xA0;nich se v&#x11B;t&#x161;inou nedaj&#xED;\ndost dob&#x159;e ps&#xE1;t, ani &#x10D;&#xED;st.</p>\n<div class=\"admonition note\"><p>T&#x159;eba tady je program v jazyce APL:</p>\n<!--z http://catpad.net/michael/apl/ -->\n\n<div class=\"highlight\"><pre><code>&#x234E;&#x2019;&#x2395;&#x2019;,&#x2208;N&#x3C1;&#x2282;S&#x2190;&#x2019;&#x2190;&#x2395;&#x2190;(3=T)&#x2228;M&#x2227;2=T&#x2190;&#x2283;+/(V&#x233D;&#x201D;&#x2282;M),(V&#x2296;&#x201D;&#x2282;M),(V,&#x233D;V)&#x233D;&#x201D;(V,V&#x2190;1&#xAF;1)&#x2296;&#x201D;&#x2282;M&#x2019;</code></pre></div></div><p>V&#xA0;Pythonu je oper&#xE1;tor&#x16F; pom&#x11B;rn&#x11B; m&#xE1;lo.\nU&#x17E; z&#xA0;nich zn&#xE1;me skoro p&#x16F;lku!\nA&#xA0;i&#xA0;tak n&#x11B;kter&#xE9; m&#xED;sto symbol&#x16F; pou&#x17E;&#xED;vaj&#xED; slova.\nTady jsou v&#x161;echny Pythonn&#xED; oper&#xE1;tory:</p>\n<div>\n    <code>==</code> <code>!=</code>\n    <code>&lt;</code> <code>&gt;</code>\n    <code>&lt;=</code> <code>&gt;=</code>\n    <code class=\"text-muted\">|</code> <code class=\"text-muted\">^</code>\n    <code class=\"text-muted\">&amp;</code>\n    <code class=\"text-muted\">&lt;&lt;</code> <code class=\"muted\">&gt;&gt;</code>\n    <code>+</code> <code>-</code>\n    <code>*</code> <code class=\"text-muted\">@</code> <code>/</code>\n    <code>//</code> <code>%</code>\n    <code class=\"text-muted\">~</code>\n    <code>**</code>\n    <code class=\"text-muted\">[ ]</code> <code class=\"text-muted\">( )</code>\n    <code class=\"text-muted\">{ }</code>\n    <code class=\"text-muted\">.</code>\n</div><div>\n    <code class=\"muted\">lambda</code>\n    <code class=\"muted\">if else</code>\n    <code>or</code> <code>and</code> <code>not</code>\n    <code class=\"muted\">in</code> <code class=\"muted\">not in</code>\n    <code class=\"muted\">is</code> <code class=\"muted\">is not</code>\n</div><p>Je asi jasn&#xE9;, &#x17E;e v&#x11B;t&#x161;ina operac&#xED;,\nkter&#xE9; v&#xA0;programu budeme cht&#xED;t ud&#x11B;lat,\nse ned&#xE1; vyj&#xE1;d&#x159;it oper&#xE1;torem.</p>\n<p>Co s&#xA0;t&#xED;m?</p>\n<p>Jeden z&#xA0;matematick&#xFD;ch z&#xE1;pis&#x16F;, kter&#xE9; jsem p&#x159;ed chvilkou uk&#xE1;zal,\npou&#x17E;&#xED;v&#xE1; pro operace jm&#xE9;na.</p>\n<ul>\n<li><var>x</var> = sin <var>a</var></li>\n</ul>\n<p>A&#xA0;to jde napsat na kl&#xE1;vesnici!\nPython jenom p&#x159;id&#xE1; z&#xE1;vorky,\naby bylo jasn&#x11B;j&#x161;&#xED;, k&#xA0;&#x10D;emu se operace vztahuje:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div><p>Ten <code>sin</code> mus&#xED;&#x161; <em>naimportovat</em>,\njako p&#x159;edt&#xED;m <em>p&#xED;</em>\n(p&#x159;ece jen, ne v&#x161;ichni maj&#xED; r&#xE1;di matematiku).\nTak&#x17E;e cel&#xFD; program vypad&#xE1; n&#xE1;sledovn&#x11B;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sin</span>\n\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># (v radi&#xE1;nech)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div><h2>Vol&#xE1;n&#xED; funkc&#xED;</h2>\n<p>Funkci vol&#xE1;me <em>jm&#xE9;nem</em>.</p>\n<p>Je to jm&#xE9;no jako u&#xA0;prom&#x11B;nn&#xFD;ch &#x2013; vlastn&#x11B; to <em>je</em> prom&#x11B;nn&#xE1;,\njen je v&#xA0;n&#xED;, m&#xED;sto &#x10D;&#xED;sla nebo &#x159;et&#x11B;zce, funkce.</p>\n<p>Za jm&#xE9;no funkce pat&#x159;&#xED; z&#xE1;vorky,\ndo nich&#x17E; uzav&#x159;eme <em>argument</em> (neboli <em>vstup</em>) funkce.\nTo je informace, se kterou bude na&#x161;e funkce\npracovat &#x2013; t&#x159;eba <code>sin()</code> ze sv&#xE9;ho argumentu vypo&#x10D;&#xED;t&#xE1; <em>sinus</em>.</p>\n<p>Vol&#xE1;n&#xED; funkce je <em>v&#xFD;raz</em> a&#xA0;v&#xFD;sledn&#xE1;, neboli <em>n&#xE1;vratov&#xE1;</em>, hodnota\n(angl. <em>return value</em>) se d&#xE1; t&#x159;eba p&#x159;i&#x159;adit do prom&#x11B;nn&#xE9;.</p>\n<div class=\"highlight\"><pre><code>        jm&#xE9;no funkce\n                 &#x2502;\n                &#x256D;&#x2534;&#x256E;\n            x = sin(1)\n            &#x25B2;      &#x2570;&#x252C;&#x256F;\n            &#x2502;     argument\n            &#x2502;\n            &#x2570;&#x2500;&#x2500; n&#xE1;vratov&#xE1; hodnota</code></pre></div><p>Nebo se d&#xE1; pou&#x17E;&#xED;t m&#xED;sto &#x10D;&#xED;sla v&#xA0;sou&#x10D;tu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div><p>Nebo v&#xA0;podm&#xED;nce ifu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n</pre></div><p>Nebo dokonce jako argument jin&#xE9; funkce:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n</pre></div><p>&#x2026; a&#xA0;podobn&#x11B;.</p>\n<h3>Argumenty</h3>\n<p>N&#x11B;kter&#xFD;m funkc&#xED;m m&#x16F;&#x17E;eme p&#x159;edat i&#xA0;v&#xED;ce argument&#x16F;.\nT&#x159;eba funkci <code>print</code>, kter&#xE1; v&#x161;echny sv&#xE9; argumenty vyp&#xED;&#x161;e na &#x159;&#xE1;dek.\nJednotliv&#xE9; argumenty odd&#x11B;lujeme &#x10D;&#xE1;rkami:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div><div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Jedna plus dva je&quot;</span><span class=\"p\">,</span> <span class=\"mi\">1</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div><p>N&#x11B;kter&#xE9; funkce nepot&#x159;ebuj&#xED; &#x17E;&#xE1;dn&#xFD; argument.\nP&#x159;&#xED;kladem je zase <code>print</code>.\nJe ale nutn&#xE9; napsat z&#xE1;vorky &#x2013;&#xA0;i&#xA0;kdy&#x17E; jsou pr&#xE1;zdn&#xE9;.\nH&#xE1;dej, co tohle vol&#xE1;n&#xED; ud&#x11B;l&#xE1;?</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">()</span>\n</pre></div><div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2017/pyladies-ostrava-podzim/beginners/functions/index/solutions/0/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <p>Funkce <code>print</code> zavolan&#xE1; bez argument&#x16F; nap&#xED;&#x161;e pr&#xE1;zdn&#xFD; &#x159;&#xE1;dek.</p>\n<p>(Je to p&#x159;esn&#x11B; podle definice &#x2013; funkce <code>print</code> v&#x161;echny sv&#xE9; argumenty vyp&#xED;&#x161;e\nna &#x159;&#xE1;dek.)</p>\n    </div>\n</div><h3>Funkce je pot&#x159;eba volat</h3>\n<p>Pozor na to, &#x17E;e kdy&#x17E; nenap&#xED;&#x161;e&#x161; z&#xE1;vorky, funkce se nezavol&#xE1;!\n(Nedostane&#x161; n&#xE1;vratovou hodnotu, ale samotnou funkci.)\nZkus si, co d&#x11B;laj&#xED; tyhle p&#x159;&#xED;klady, abys pak podobn&#xE9; chyby poznala:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sin</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div><h3>Pojmenovan&#xE9; argumenty</h3>\n<p>N&#x11B;kter&#xE9; funkce um&#xED; pracovat i&#xA0;s&#xA0;<em>pojmenovan&#xFD;mi</em> argumenty.\nP&#xED;&#x161;ou se podobn&#x11B; jako p&#x159;i&#x159;azen&#xED; do prom&#x11B;nn&#xE9;,\ns&#xA0;rovn&#xED;tkem, ale uvnit&#x159; z&#xE1;vorek.</p>\n<p>T&#x159;eba funkce <code>print</code> norm&#xE1;ln&#x11B; ukon&#x10D;&#xED; v&#xFD;pis nov&#xFD;m &#x159;&#xE1;dkem,\nale pomoc&#xED; argumentu <code>end</code> se d&#xE1; vypsat i&#xA0;n&#x11B;co jin&#xE9;ho.</p>\n<div class=\"admonition note\"><p>Tenhle p&#x159;&#xED;klad je pot&#x159;eba napsat do souboru; v&#xA0;interaktivn&#xED; konzoli\nnebude v&#xFD;stup vypadat jak m&#xE1;.</p>\n</div><div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;1 + 2&apos;</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;=&apos;</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&apos;!&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">()</span>\n</pre></div><h2>U&#x17E;ite&#x10D;n&#xE9; funkce</h2>\n<p>Nakonec si uk&#xE1;&#x17E;eme p&#xE1;r z&#xE1;kladn&#xED;ch funkc&#xED;, kter&#xE9; n&#xE1;m Python nab&#xED;z&#xED;.\nM&#x16F;&#x17E;e&#x161; si st&#xE1;hnout i\n<a href=\"https://github.com/encukou/cheatsheets/raw/master/basic-functions/basic-functions-cs.pdf\">p&#x159;ehled</a>,\nkter&#xFD; se rozd&#xE1;v&#xE1; na srazech.</p>\n<h3>Vstup a v&#xFD;stup</h3>\n<p>Tyhle funkce u&#x17E; zn&#xE1;me.\n<code>print</code> vyp&#xED;&#x161;e nepojmenovan&#xE9; argumenty, odd&#x11B;len&#xE9; mezerou.\nPojmenovan&#xFD; argument <code>end</code> ur&#x10D;uje, co se vyp&#xED;&#x161;e na konci (m&#xED;sto p&#x159;echodu\nna nov&#xFD; &#x159;&#xE1;dek);\n<code>sep</code> zase, co se vyp&#xED;&#x161;e mezi jednotliv&#xFD;mi argumenty (m&#xED;sto mezery).</p>\n<div class=\"admonition note\"><p>P&#x159;&#xED;klad op&#x11B;t doporu&#x10D;uji spustit ze souboru, ne\ninteraktivn&#x11B;:</p>\n</div><div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;dv&#x11B;&quot;</span><span class=\"p\">,</span> <span class=\"bp\">False</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s2\">&quot; &quot;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"o\">=</span><span class=\"s2\">&quot;, &quot;</span><span class=\"p\">)</span>\n</pre></div><p>Z&#xE1;kladn&#xED; funkce na v&#xFD;stup, <code>input</code>,\nvyp&#xED;&#x161;e ot&#xE1;zku, na&#x10D;te vstup od u&#x17E;ivatele\na&#xA0;vr&#xE1;t&#xED; ho jako &#x159;et&#x11B;zec.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">&apos;zadej vstup: &apos;</span><span class=\"p\">)</span>\n</pre></div><h3>P&#x159;ev&#xE1;d&#x11B;n&#xED; typ&#x16F;</h3>\n<p>Co ale kdy&#x17E; nechceme pracovat s&#xA0;&#x159;et&#x11B;zcem, ale t&#x159;eba s&#xA0;&#x10D;&#xED;slem?\nTady n&#xE1;m pom&#x16F;&#x17E;e skupina funkc&#xED;, kter&#xE9; um&#xED; p&#x159;ev&#xE1;d&#x11B;t &#x10D;&#xED;sla na &#x159;et&#x11B;zce a&#xA0;zp&#xE1;tky.\nKa&#x17E;d&#xFD; ze t&#x159;&#xED; <em>typ&#x16F;</em> (angl. <em>types</em>) prom&#x11B;nn&#xFD;ch, kter&#xE9; zat&#xED;m zn&#xE1;me,\nm&#xE1; funkci, kter&#xE1; vezme n&#x11B;jakou hodnotu a&#xA0;vr&#xE1;t&#xED; podobnou hodnotu &#x201E;sv&#xE9;ho&#x201C; typu.\nNa cel&#xE1; &#x10D;&#xED;sla je funkce <code>int</code> (z angl. <em>integer</em>), na re&#xE1;ln&#xE1; &#x10D;&#xED;sla je <code>float</code>\n(z angl. <em>floating-point</em>), a pro &#x159;et&#x11B;zce <code>str</code> (z angl. <em>string</em>).</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>              <span class=\"c1\"># p&#x159;evod na cel&#xE9; &#x10D;&#xED;slo</span>\n<span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>            <span class=\"c1\"># p&#x159;evod na re&#xE1;ln&#xE9; &#x10D;&#xED;slo</span>\n<span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>              <span class=\"c1\"># p&#x159;evod na &#x159;et&#x11B;zec</span>\n</pre></div><p>P&#x159;&#xED;klady:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"mi\">3</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">&apos;3&apos;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"mf\">3.0</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"mf\">3.141</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"mf\">8.12</span> <span class=\"o\">==</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"s1\">&apos;8.12&apos;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mf\">8.12</span><span class=\"p\">)</span>\n<span class=\"mf\">8.0</span> <span class=\"o\">==</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mi\">8</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"s1\">&apos;8&apos;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mf\">8.0</span><span class=\"p\">)</span>\n<span class=\"s1\">&apos;3&apos;</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"s1\">&apos;3&apos;</span><span class=\"p\">)</span>\n<span class=\"s1\">&apos;3.141&apos;</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mf\">3.141</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"s1\">&apos;3.141&apos;</span><span class=\"p\">)</span>\n</pre></div><p>Ne v&#x161;echny p&#x159;evody jsou mo&#x17E;n&#xE9;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">&apos;blablabla&apos;</span><span class=\"p\">)</span>    <span class=\"c1\"># chyba!</span>\n<span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"s1\">&apos;blablabla&apos;</span><span class=\"p\">)</span>  <span class=\"c1\"># chyba!</span>\n<span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">&apos;8.9&apos;</span><span class=\"p\">)</span>          <span class=\"c1\"># chyba!</span>\n</pre></div><p>&#x2026;a&#xA0;jak si poradit s&#xA0;chybou, kter&#xE1; nastane,\nkdy&#x17E; pou&#x17E;ije&#x161; &#x161;patnou hodnotu, si &#x159;ekneme pozd&#x11B;ji.\nTe&#x10F; je hlavn&#xED; to, &#x17E;e u&#x17E; v&#xED;&#x161;, jak funguje\n<code>int(input(&apos;zadej &#x10D;&#xED;slo: &apos;))</code> z&#xA0;minula!</p>\n<h3>Matematick&#xE9; funkce</h3>\n<p>Matematika je ob&#x10D;as pot&#x159;eba, tak&#x17E;e se poj&#x10F;me\npod&#xED;vat, jak v&#xA0;Pythonu pracovat s&#xA0;&#x10D;&#xED;sly.</p>\n<p>Jedna zaj&#xED;mav&#xE1; matematick&#xE1; funkce je k&#xA0;dispozici v&#x17E;dy:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>    <span class=\"c1\"># zaokrouhlen&#xED;</span>\n</pre></div><p>Spousta dal&#x161;&#xED;ch se d&#xE1; importovat z&#xA0;modulu <code>math</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sin</span><span class=\"p\">,</span> <span class=\"n\">cos</span><span class=\"p\">,</span> <span class=\"n\">tan</span><span class=\"p\">,</span> <span class=\"n\">sqrt</span><span class=\"p\">,</span> <span class=\"n\">floor</span><span class=\"p\">,</span> <span class=\"n\">ceil</span>\n\n<span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">uhel</span><span class=\"p\">)</span>       <span class=\"c1\"># sinus</span>\n<span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">uhel</span><span class=\"p\">)</span>       <span class=\"c1\"># kosinus</span>\n<span class=\"n\">tan</span><span class=\"p\">(</span><span class=\"n\">uhel</span><span class=\"p\">)</span>       <span class=\"c1\"># tangens</span>\n<span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>     <span class=\"c1\"># druh&#xE1; odmocnina</span>\n\n<span class=\"n\">floor</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>    <span class=\"c1\"># zaokrouhlen&#xED; dol&#x16F;</span>\n<span class=\"n\">ceil</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>     <span class=\"c1\"># zaokrouhlen&#xED; nahoru</span>\n</pre></div><h3>N&#xE1;pov&#x11B;da</h3>\n<p>Dal&#x161;&#xED; funkce pom&#xE1;h&#xE1; program&#xE1;tor&#x16F;m:\nM&#x16F;&#x17E;e&#x161; si p&#x159;&#xED;mo z&#xA0;programu (nebo z&#xA0;interaktivn&#xED;ho\nre&#x17E;imu) vyvolat n&#xE1;pov&#x11B;du k&#xA0;n&#x11B;jak&#xE9; funkci.\n(Ob&#x10D;as b&#xFD;v&#xE1; srozumiteln&#xE1; i&#xA0;pro za&#x10D;&#xE1;te&#x10D;n&#xED;ky,\nob&#x10D;as bohu&#x17E;el sp&#xED;&#x161; ne &#x2013; v&#xA0;takov&#xE9;m p&#x159;&#xED;pad&#x11B; zkus\nGoogle).</p>\n<p>N&#xE1;pov&#x11B;da se zobraz&#xED; podle syst&#xE9;mu bu&#x10F; v&#xA0;prohl&#xED;&#x17E;e&#x10D;i,\nnebo p&#x159;&#xED;mo v&#xA0;termin&#xE1;lu.\nKdy&#x17E; je n&#xE1;pov&#x11B;da v&#xA0;termin&#xE1;lu p&#x159;&#xED;li&#x161; dlouh&#xE1;, d&#xE1; se v&#xA0;n&#xED;\npohybovat (<kbd>&#x2191;</kbd>, <kbd>&#x2193;</kbd>,\n<kbd>PgUp</kbd>, <kbd>PgDn</kbd>) a&#xA0;&#x201E;ven&#x201C;\nse dostane&#x161; kl&#xE1;vesou <kbd>Q</kbd> (od <em>Quit</em>).</p>\n<p>N&#xE1;pov&#x11B;da k&#xA0;funkci <code>print</code> se zobraz&#xED; p&#x159;&#xED;kazem:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">help</span><span class=\"p\">(</span><span class=\"k\">print</span><span class=\"p\">)</span>\n</pre></div><p>N&#xE1;pov&#x11B;da se d&#xE1; vypsat i&#xA0;k&#xA0;cel&#xE9;mu modulu.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n\n<span class=\"n\">help</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"p\">)</span>\n</pre></div><h3>N&#xE1;hoda</h3>\n<p>Nakonec si uk&#xE1;&#x17E;eme dv&#x11B; funkce z&#xA0;modulu\n<code>random</code>, kter&#xE9; jsou velice\nu&#x17E;ite&#x10D;n&#xE9; pro hry.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">randrange</span><span class=\"p\">,</span> <span class=\"n\">uniform</span>\n\n<span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">)</span>   <span class=\"c1\"># n&#xE1;hodn&#xE9; cel&#xE9; &#x10D;&#xED;slo od a do b-1</span>\n<span class=\"n\">uniform</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">)</span>     <span class=\"c1\"># n&#xE1;hodn&#xE9; &#x201E;desetinn&#xE9;&#x201C; &#x10D;&#xED;slo od a do b</span>\n</pre></div><p>Pozor na to, &#x17E;e <code>randrange(a, b)</code>\nnikdy nevr&#xE1;t&#xED; samotn&#xE9; <code>b</code>.\nPokud pot&#x159;ebujeme n&#xE1;hodn&#x11B; vybrat ze t&#x159;&#xED; mo&#x17E;nost&#xED;,\npou&#x17E;ij <code>randrange(0, 3)</code>,\nco&#x17E; vr&#xE1;t&#xED; <code>0</code>, <code>1</code>, nebo\n<code>2</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">random</span> <span class=\"kn\">import</span> <span class=\"n\">randrange</span>\n\n<span class=\"n\">cislo</span> <span class=\"o\">=</span> <span class=\"n\">randrange</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># &#x10D;&#xED;slo je od 0, 1, nebo 2</span>\n<span class=\"k\">if</span> <span class=\"n\">cislo</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Kole&#x10D;ko&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">cislo</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;&#x10C;tvere&#x10D;ek&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>  <span class=\"c1\"># 2</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Troj&#xFA;heln&#xED;&#x10D;ek&apos;</span><span class=\"p\">)</span>\n</pre></div><h3>A dal&#x161;&#xED;</h3>\n<p>Python d&#xE1;v&#xE1; k dispozici obrovsk&#xE9; mno&#x17E;stv&#xED; dal&#x161;&#xED;ch\nfunkc&#xED; a&#xA0;modul&#x16F;, i&#xA0;kdy&#x17E; ne v&#x161;em bude&#x161; ze za&#x10D;&#xE1;tku\nrozum&#x11B;t.\nV&#x161;echny jsou &#x2013; anglicky &#x2013; pops&#xE1;ny v&#xA0;dokumentaci Pythonu, nap&#x159;.\n<a href=\"https://docs.python.org/3/library/functions.html\">vestav&#x11B;n&#xE9; funkce</a>,\n<a href=\"https://docs.python.org/3/library/math.html\">matematika</a>.</p>\n\n\n        "
    }
  }
}