{% if var('pyladies') %}
[note] Pro kouče Slajdy jsou k dispozici na stránkách PyLadies.
Pokud jsi minule udělal{{a}} projekt navíc, tak jsi nejspíš do programu zadal{{a}} hotnotu čísla π. {% else %} Pokud jsi v minulých lekcíh pracoval{{a}} s kruhy, tak jsi nejspíš do programu zadal{{a}} hotnotu čísla π. {% endif %}
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:
- 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²
- x ≤ y
- sin θ
- Γ(x)
- ∫x
- ⌊x⌋
- a ★ b
- a ⨁ b
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.
[note] 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í
(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)
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()
{% filter solution %}
Funkce print
zavolaná bez argumentů napíše prázdný řádek.
(Je to přesně podle definice – funkce print
všechny své argumenty vypíše
na řádek.)
{% endfilter %}
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.
[note] 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).
[note] 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: ')
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.
{%- if var('pyladies') %}
Teď je hlavní to, že už víš, jak funguje
int(input('zadej číslo: '))
z minula!
{% endif %}
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é „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')
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.