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.
Pí 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 matematice máme spoustu různých operací, které se zapisují symboly – třeba plus a minus. Stejné symboly používá i Python:
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:
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:
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.
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í
(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)
Import a pojmenování souborů
Při importování je potřeba si dávat pozor na pojmenování souborů:
importuješ-li from math
, nesmí se tvůj program jmenovat math.py
.
Proč? Když Python v adresáři, ze kterého program pouštíš, najde soubor
math.py
, bude se snažit importovat sin
z něho místo
z předpřipravené sady matematických 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ě.
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()
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)
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()
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.
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 načtení vstupu, input
,
vypíše otázku, počká na text od uživatele
a ten vrátí jako řetězec.
input('zadej vstup: ')
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!
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
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)
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é reálné čí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')
Pamatuj, když importuješ z modulu random
, nesmí se tvůj soubor
jmenovat random.py
.
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:2019/pyladies-ostrava-podzim:loops:0", "title": "Funkce", "html": "\n \n \n\n <div class=\"admonition note\"><p class=\"admonition-title\">Pro kouče</p>\n<p>Slajdy jsou k dispozici na stránkách\n<a href=\"http://pyladies.cz/v1/s003-looping/functions.html#/\">PyLadies</a>.</p>\n</div><p>Pokud jsi minule udělala projekt navíc, tak jsi nejspíš\ndo programu zadala hotnotu čísla π.</p>\n<p>Python má ale spoustu vychytávek zabudovaných – není třeba je přímo psát,\nstačí jen vědět, kam se podívat.</p>\n<p><em>Pí</em> můžeme zpřístupnit <em>importem</em> z 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ět, π je tak trochu schované.\nPřece jen, <code>print</code> nebo <code>if</code> potřebují všichni, ale ne všichni mají\nrádi matematiku…</p>\n<p>Teď ale u matematiky ještě chvilku zůstaneme.</p>\n<h2>Výrazy</h2>\n<p>V matematice máme spoustu různých operací,\nkteré se zapisují symboly – třeba plus a minus.\nStejné symboly používá i Python:</p>\n<ul>\n<li>3 + 4</li>\n<li><var>a</var> - <var>b</var></li>\n</ul>\n<p>S násobením a dělením už je to složitější,\nmatematický zápis se na běžné klávesnici nedá napsat:</p>\n<ul>\n<li>3 · 4</li>\n<li>¾</li>\n</ul>\n<p>V Pythonu si ale pořád vystačíme s operátorem.</p>\n<p>Matematici ovšem psali na papír,\na tak vymýšleli stále nezapsatelnější klikyháky,\nkteré se programátorům nechtělo přepisovat:</p>\n<ul>\n<li><var>x</var>²</li>\n<li><var>x</var> ≤ <var>y</var></li>\n<li>sin θ</li>\n<li>Γ(<var>x</var>)</li>\n<li>∫<var>x</var></li>\n<li>⌊<var>x</var>⌋</li>\n<li><var>a</var> ★ <var>b</var></li>\n<li><var>a</var> ⨁ <var>b</var></li>\n</ul>\n<p>Ne že by neexistovaly programovací jazyky,\nna které je potřeba speciální klávesnice.\nAle programy v nich se většinou nedají\ndost dobře psát, ani číst.</p>\n<div class=\"admonition note\"><p>Třeba tady je program v jazyce APL:</p>\n<!--z http://catpad.net/michael/apl/ -->\n\n<div class=\"highlight\"><pre><code>⍎’⎕’,∈Nρ⊂S←’←⎕←(3=T)∨M∧2=T←⊃+/(V⌽”⊂M),(V⊖”⊂M),(V,⌽V)⌽”(V,V←1¯1)⊖”⊂M’</code></pre></div></div><p>V Pythonu je operátorů poměrně málo.\nUž z nich známe skoro půlku!\nA i tak některé místo symbolů používají slova.\nTady jsou všechny Pythonní operátory:</p>\n<div>\n <code>==</code> <code>!=</code>\n <code><</code> <code>></code>\n <code><=</code> <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> <code class=\"text-muted\">>></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=\"text-muted\">lambda</code>\n <code class=\"text-muted\">if else</code>\n <code>or</code> <code>and</code> <code>not</code>\n <code class=\"text-muted\">in</code> <code class=\"text-muted\">not in</code>\n <code class=\"text-muted\">is</code> <code class=\"text-muted\">is not</code>\n</div><p>Je asi jasné, že většina operací,\nkteré v programu budeme chtít udělat,\nse nedá vyjádřit operátorem.</p>\n<p>Co s tím?</p>\n<p>Jeden z matematických zápisů, které jsem před chvilkou ukázal,\npoužívá pro operace jména.</p>\n<ul>\n<li><var>x</var> = sin <var>a</var></li>\n</ul>\n<p>A to jde napsat na klávesnici!\nPython jenom přidá závorky,\naby bylo jasnější, k č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íš <em>naimportovat</em>,\njako předtím <em>pí</em>\n(přece jen, ne všichni mají rádi matematiku).\nTakže celý program vypadá následovně:</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ánech)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition warning\"><p class=\"admonition-title\">Import a pojmenování souborů</p>\n<p>Při importování je potřeba si dávat pozor na pojmenování souborů:\nimportuješ-li <code>from math</code>, nesmí se tvůj program jmenovat <code>math.py</code>.</p>\n<p>Proč? Když Python v adresáři, ze kterého program pouštíš, najde soubor\n<code>math.py</code>, bude se snažit importovat <code>sin</code> z něho místo\nz předpřipravené sady matematických funkcí.</p>\n</div><h2>Volání funkcí</h2>\n<p>Funkci voláme <em>jménem</em>.</p>\n<p>Je to jméno jako u proměnných – vlastně to <em>je</em> proměnná,\njen je v ní, místo čísla nebo řetězce, funkce.</p>\n<p>Za jméno funkce patří závorky,\ndo nichž uzavřeme <em>argument</em> (neboli <em>vstup</em>) funkce.\nTo je informace, se kterou bude naše funkce\npracovat – třeba <code>sin()</code> ze svého argumentu vypočítá <em>sinus</em>.</p>\n<p>Volání funkce je <em>výraz</em> a výsledná, neboli <em>návratová</em>, hodnota\n(angl. <em>return value</em>) se dá třeba přiřadit do proměnné.</p>\n<div class=\"highlight\"><pre><code> jméno funkce\n │\n ╭┴╮\n x = sin(1)\n ▲ ╰┬╯\n │ argument\n │\n ╰── návratová hodnota</code></pre></div><p>Nebo se dá použít místo čísla v souč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 podmí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\"><</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n</pre></div><p>Nebo dokonce jako argument jiné 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>… a podobně.</p>\n<h3>Argumenty</h3>\n<p>Některým funkcím můžeme předat i více argumentů.\nTřeba funkci <code>print</code>, která všechny své argumenty vypíše na řádek.\nJednotlivé argumenty oddělujeme čá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\">"Jedna plus dva je"</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ěkteré funkce nepotřebují žádný argument.\nPříkladem je zase <code>print</code>.\nJe ale nutné napsat závorky – i když jsou prázdné.\nHádej, co tohle volání udělá?</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>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2019/pyladies-ostrava-podzim/beginners/functions/index/solutions/0/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <p>Funkce <code>print</code> zavolaná bez argumentů napíše prázdný řádek.</p>\n<p>(Je to přesně podle definice – funkce <code>print</code> všechny své argumenty vypíše\nna řádek.)</p>\n </div>\n</div><h3>Funkce je potřeba volat</h3>\n<p>Pozor na to, že když nenapíšeš závorky, funkce se nezavolá!\n(Nedostaneš návratovou hodnotu, ale samotnou funkci.)\nZkus si, co dělají tyhle příklady, abys pak podobné 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é argumenty</h3>\n<p>Některé funkce umí pracovat i s <em>pojmenovanými</em> argumenty.\nPíšou se podobně jako přiřazení do proměnné,\ns rovnítkem, ale uvnitř závorek.</p>\n<p>Třeba funkce <code>print</code> normálně ukončí výpis novým řádkem,\nale pomocí argumentu <code>end</code> se dá vypsat i něco jiného.</p>\n<div class=\"admonition note\"><p>Tenhle příklad je potřeba napsat do souboru; v interaktivní konzoli\nnebude výstup vypadat, jak má.</p>\n</div><div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'1 + 2'</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">' '</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'='</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">' '</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\">'!'</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">()</span>\n</pre></div><h2>Užitečné funkce</h2>\n<p>Nakonec si ukážeme pár základních funkcí, které nám Python nabízí.\nMůžeš si stáhnout i\n<a href=\"https://github.com/encukou/cheatsheets/raw/master/basic-functions/basic-functions-cs.pdf\">přehled</a>,\nkterý se rozdává na srazech.</p>\n<h3>Vstup a výstup</h3>\n<p>Tyhle funkce už známe.\n<code>print</code> vypíše nepojmenované argumenty, oddělené mezerou.\nPojmenovaný argument <code>end</code> určuje, co se vypíše na konci (místo přechodu\nna nový řádek);\n<code>sep</code> zase, co se vypíše mezi jednotlivými argumenty (místo mezery).</p>\n<div class=\"admonition note\"><p>Příklad opět doporučuji spustit ze souboru, ne\ninteraktivně:</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\">"dvě"</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\">" "</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\">", "</span><span class=\"p\">)</span>\n</pre></div><p>Základní funkce na načtení vstupu, <code>input</code>,\nvypíše otázku, počká na text od uživatele\na ten vrátí jako řetězec.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">input</span><span class=\"p\">(</span><span class=\"s1\">'zadej vstup: '</span><span class=\"p\">)</span>\n</pre></div><h3>Převádění typů</h3>\n<p>Co ale když nechceme pracovat s řetězcem, ale třeba s číslem?\nTady nám pomůže skupina funkcí, které umí převádět čísla na řetězce a zpátky.\nKaždý ze tří <em>typů</em> (angl. <em>types</em>) proměnných, které zatím známe,\nmá funkci, která vezme nějakou hodnotu a vrátí podobnou hodnotu „svého“ typu.\nNa celá čísla je funkce <code>int</code> (z angl. <em>integer</em>), na reálná čísla je <code>float</code>\n(z angl. <em>floating-point</em>), a pro řetě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řevod na celé čí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řevod na reálné čí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řevod na řetězec</span>\n</pre></div><p>Pří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\">'3'</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\">'8.12'</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\">'8'</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\">'3'</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\">'3'</span><span class=\"p\">)</span>\n<span class=\"s1\">'3.141'</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\">'3.141'</span><span class=\"p\">)</span>\n</pre></div><p>Ne všechny převody jsou možné:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">'blablabla'</span><span class=\"p\">)</span> <span class=\"c1\"># chyba!</span>\n<span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"s1\">'blablabla'</span><span class=\"p\">)</span> <span class=\"c1\"># chyba!</span>\n<span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">'8.9'</span><span class=\"p\">)</span> <span class=\"c1\"># chyba!</span>\n</pre></div><p>…a jak si poradit s chybou, která nastane,\nkdyž použiješ špatnou hodnotu, si řekneme později.\nTeď je hlavní to, že už víš, jak funguje\n<code>int(input('zadej číslo: '))</code> z minula!</p>\n<h3>Matematické funkce</h3>\n<p>Matematika je občas potřeba, takže se pojďme\npodívat, jak v Pythonu pracovat s čísly.</p>\n<p>Jedna zajímavá matematická funkce je k dispozici vž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í</span>\n</pre></div><p>Spousta dalších se dá importovat z 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á 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í dolů</span>\n<span class=\"n\">ceil</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span> <span class=\"c1\"># zaokrouhlení nahoru</span>\n</pre></div><h3>Nápověda</h3>\n<p>Další funkce pomáhá programátorům:\nMůžeš si přímo z programu (nebo z interaktivního\nrežimu) vyvolat nápovědu k nějaké funkci.\n(Občas bývá srozumitelná i pro začátečníky,\nobčas bohužel spíš ne – v takovém případě zkus\nGoogle).</p>\n<p>Nápověda se zobrazí podle systému buď v prohlížeči,\nnebo přímo v terminálu.\nKdyž je nápověda v terminálu příliš dlouhá, dá se v ní\npohybovat (<kbd>↑</kbd>, <kbd>↓</kbd>,\n<kbd>PgUp</kbd>, <kbd>PgDn</kbd>) a „ven“\nse dostaneš klávesou <kbd>Q</kbd> (od <em>Quit</em>).</p>\n<p>Nápověda k funkci <code>print</code> se zobrazí pří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ápověda se dá vypsat i k celé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áhoda</h3>\n<p>Nakonec si ukážeme dvě funkce z modulu\n<code>random</code>, které jsou velice\nužitečné 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áhodné celé čí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áhodné reálné číslo od a do b</span>\n</pre></div><p>Pozor na to, že <code>randrange(a, b)</code>\nnikdy nevrátí samotné <code>b</code>.\nPokud potřebujeme náhodně vybrat ze tří možností,\npoužij <code>randrange(0, 3)</code>,\ncož vrátí <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\"># čí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\">'Kolečko'</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\">'Čtvereček'</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\">'Trojúhelníček'</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition note\"><p>Pamatuj, když importuješ z modulu <code>random</code>, nesmí se tvůj soubor\njmenovat <code>random.py</code>.</p>\n</div><h3>A další</h3>\n<p>Python dává k dispozici obrovské množství dalších\nfunkcí a modulů, i když ne všem budeš ze začátku\nrozumět.\nVšechny jsou – anglicky – popsány v dokumentaci Pythonu, např.\n<a href=\"https://docs.python.org/3/library/functions.html\">vestavěné funkce</a>,\n<a href=\"https://docs.python.org/3/library/math.html\">matematika</a>.</p>\n\n\n " } } }