Programovací jazyk Python

Přejít ke cvičením na toto téma »

Python je v současnosti nejoblíbenější programovací jazyk pro výuku programování. Není to však jen výukový jazyk, je také široce prakticky používaný. Na Umíme programovat používáme Python 3.

Pokud chcete v Pythonu více programovat, doporučujeme nainstalovat si ho na vlastní počítač. Nicméně na to, abyste se naučili základy programování v Pythonu, vystačíte i s prohlížečem. Na Umíme programovat nabízíme spoustu cvičení a příkladů, které můžete řešit přímo na stránkách:

  • Pro úplné začátky zkuste cvičení Rozhodovačka, kde pouze vybíráte z nabízených možností. Jak se trochu rozcvičíte, můžete zkusit Výstup programu, kde píšete odpověď na klávesnici.
  • Ve cvičení Porozumění programům máte k dispozici vypracované příklady. Na nich se můžete podívat, jak programy v Pythonu vypadají. Ke každému příkladu je připravena série kontrolních otázek, pomocí kterých si můžete prověřit, jak programu rozumíte.
  • Především si však zkuste samostatné programování. K tomu slouží cvičení Programování v PythonuPython želva. Program píšete přímo v prohlížeči, kde si ho můžete i spustit a hlavně automaticky otestovat, zda je správně.

Pro úplné začátečníky doporučujeme jako rozcvičku příklady ze sekce algoritmické myšlení, kde si lze základní koncepty vyzkoušet formou grafického programování.

Inspirace pro učitele

Pro učitele na SŠ je dispozici stručný metodický text.

Konkrétní inspiraci pro začlenění do výuky pak nabízí výukové moduly, které poskytují náměty, jakým způsobem učivo procvičovat a v jakém pořadí:

Práce s proměnnými a výrazy představují základní stavební bloky, ze kterých následně stavíme programy pomocí konstrukcí pro řízení výpočtu.

Základní procvičování v této oblasti máme rozdělené na dvě větve:

Další výrazy pak tvoříme například za využití řetězců a seznamů.

Pro úplné začátečníky v Pythonu může být užitečné si jako rozcvičku projít cvičení na proměnné ze sekce algoritmické myšlení. Tam je možné si procvičit základní principy proměnných bez specifik Pythonu.

Proměnné a číselné výrazy v Pythonu

Přejít ke cvičením na toto téma »

Proměnná je jméno, které odkazuje na nějakou hodnotu. Hodnota proměnné se může měnit – ostatně se taky jmenuje „proměnná“.

Názvy proměnných

Názvy proměnných mohou obsahovat písmena, čísla a znak podtržítko. Nesmí obsahovat mezeru a nesmí začínat na číslo. V názvech proměnných se rozlišují velká a malá písmena, tj. number a Number jsou dvě různé proměnné. V Pythonu je zvykem psát jména proměnných malými písmeny. Ve víceslovných názvech proměnných používáme podtržítko, např. list_length. Python 3 umožňuje používat v názvech proměnných i znaky české abecedy. Dobrá praxe však je psát názvy proměnných anglicky. Názvy proměnných volíme popisné.

Příklady:

  • korektní názvy proměnných: name, k, max_value
  • neplatné názvy proměnných: 2nd_var, actor name, max-value

Vytvoření a aktualizace proměnné

Proměnnou vytvoříme prostě tak, že do ní přiřadíme hodnotu. Hodnotu můžeme následně aktualizovat. Proměnná drží poslední hodnotu, která do ní byla přiřazena. Pro přiřazení používáme rovnítko:

Proměnné mohou být různého typu. Python je dynamicky typovaný programovací jazyk. To znamená, že v programu nemusíme uvádět typ proměnné, interpret jazyka jej určí automaticky. Pokud provedeme přiřazení x = 5, proměnná x bude automaticky typu int (celé číslo).

Výpis proměnných a výrazů

Výpis provádíme pomocí funkce print. Ta může mít více parametrů. Pokud chceme vypisovat znaky pro aritmetické operace, musíme je dát do uvozovek či apostrofů. Příklady:

Aritmetické operace

S čísly můžeme provádět základní aritmetické operace, zápis je stejný jako na běžných kalkulačkách (+, -, /, *). Python také nabízí podporu pro operace celočíselné dělení (//), dělení se zbytkem (%) a umocňování (**) – tyto operace se při programování často hodí.

V programování nemůžeme vynechávat zápis násobení tak jako v matematice, tj. nemůžeme psát y = 2x, musíme násobení zapsat s hvězdičkou y = 2*x.

Priorita operací je stejná jako v matematice a stejně jako v matematice můžeme používat závorky:

Zkrácený zápis

Při programování často aktualizujeme hodnotu proměnné tak, že k ní přičítáme určitou hodnotu, např. x = x + 1, money = money + wage. Protože to je častá operace, nabízí Python zkrácený zápis pomocí operátoru +=. Podobný operátor máme i pro další aritmetické operace.

Matematické funkce v Pythonu

Přejít ke cvičením na toto téma »

Python nabízí vestavěné funkce pro základní matematické funkce, například:

Další užitečné matematické funkce (např. log, sqrt, sin, floor) Python nabízí v knihovně math.

Logické výrazy v Pythonu

Přejít ke cvičením na toto téma »

Logické výrazy Python vyhodnocuje na hodnoty True (pravda) a False (nepravda). Přesný zápis těchto konstant bývá zdrojem chyb:

  • Velké písmeno je důležité: True je logická konstanta (pravda), kdežto true je název proměnné (která může držet libovolnou hodnotu).
  • "True" a "False" (tj. názvy logických konstant psány v uvozovkách) jsou obyčejné řetězce, nikoliv konstanty se speciálním významem.

Operátory porovnání

Základním logickým výrazem je porovnání mezi dvěma výrazy (např. porovnání hodnoty proměnné a konstanty). Operátory větší/menší zapisujeme podobně jako v matematice (> a <), „větší/menší nebo rovno“ zapisujeme >= a <=. Test na rovnost provádíme pomocí dvou rovnítek (==). Test na nerovnost zapisujeme !=.

Příklady:

Pozor na rozdíl mezi přiřazením do proměnné (jedno rovnítko) a testem na rovnost (dvě rovnítka).

Varování: operátor is

Python obsahuje i další pokročilejší operátory. Mezi záludné patří is, které se zdánlivě chová podobně jako == a jeho použití bývá zdrojem chyb. Operátor is je užitečný nástroj pro pokročilé programátory, začátečníkům silně doporučujeme se mu vyhnout.

Logické spojky

Základní logické výrazy můžeme kombinovat pomocí klasických logických spojek:

  • not = negace
  • and = a zároveň (konjunkce) = výsledek je True, pokud jsou oba dva argumenty True
  • or = nebo (disjunkce) = výsledek je True, pokud je alespoň jeden z argumentů True

Pro procvičení významu spojek využijte cvičení Binární křížovka.

Zajímavost: logické spojky v jiných jazycích

V některých programovacích jazycích se logické spojky zapisují pomocí symbolů &, |, !. Na tyto symboly můžete v Pythonu také narazit (např. u množinových operací), ale pro logické spojky se nepoužívají, ty se v Pythonu píší anglickými názvy and, or, not.

Priority logický spojek

Priority operátorů jsou sestupně: not, and, or (tj. nejvyšší prioritu má not). Pro změnu priority či větší čitelnost výrazů můžeme využít závorky.

Program v Pythonu se skládá z více příkazů, které vhodným způsobem kombinujeme:

  • Sekvence příkazů znamená, že prostě voláme příkazy jeden po druhém. Věnujeme při tom pozornost jejich výběru a řazení.
  • Podmíněný příkaz nám umožňuje některé příkazy vykonat, jen pokud je splněná zadaná podmínka.
  • Cyklus for a while využíváme pro opakované spouštění příkazů. Každý z těchto cyklů má trochu jiné použití a je dobré si důkladně procvičit oba dva.
  • Řídicí struktury můžeme do sebe vnořit, např. mít podmínku uvnitř cyklu. Samostatně vyčlené máme téma vnořené cykly, protože to je oblast, se kterou začátečníci typicky bojují.
  • Programy dělíme do funkcí, které nám umožňují části kódu opakovaně používat.

Pro úplné začátečníky v Pythonu může být užitečné si jako rozcvičku projít cvičení na základy algoritmického myšlení, kde je možné si základy použití cyklů a podmínek procvičit formou grafického programování.

Podmíněný příkaz (if) v Pythonu

Přejít ke cvičením na toto téma »

Podmíněné vykonání příkazu zapisujeme pomocí if. Jako podmínku můžeme použít libovolný logický výraz. Podmíněně můžeme vykonat také více příkazů. Blok příkazů vyznačujeme odsazením:

Else větev

Můžeme také říct, co se má stát, když podmínka splněna není. K tomu slouží příkaz else, který je následovaný odsazeným blokem příkazů:

Jednotlivým variantám výpočtu říkáme větve a podmíněný příkaz můžeme také označovat jako větvení.

Vícenásobné větvení

Pokud chceme testovat více možností, můžeme použít konstrukci if / elif / else. V některých programovacích jazycích se pro vícenásobné větvení používá příkaz switch. Tento příkaz v Pythonu nemáme, vystačíme si s využitím elif. Příklad:

Z if/elif větví se provede maximálně jedna z nich –⁠ ta první, u které je splněna podmínka. Pokud v uvedeném příkladě je v proměnné age uložena hodnota 15, vypíše se pouze text „školák“. Podmínka age < 65 je sice také splněna, ale k jejímu vyhodnocování již nedojde.

Vnořené větvení

Podmíněné příkazy můžeme i zanořovat, tj. některá z větví můžem mít další větvení. U následných větví pak musíme zvýšit odsazení. Můžeme tedy psát například:

V některých případech je však jednodušší a přehlednější místo vnořeného kódu použít jednoduchý podmíněný příkaz s podmínkou využívající logické operace. Například druhý uvedený příklad můžeme zjednodušit takto:

Cykly při programování využíváme pro opakování skupiny příkazů. Opakování označujeme často pojmem iterace.

Cyklus for využíváme, pokud dopředu víme, kolik opakování bude cyklus mít. V ostatních případech využíváme cyklus while.

Jednoduchý for cyklus

Základní využití cyklu for je pro prosté opakování sady příkazů. Pomocí for i in range(10) zopakujeme 10× sadu příkazů. Příkazy, které se mají opakovat, musíme odsadit. Takto tedy vypíšeme desetkrát Ahoj:

Řídící proměnná

V průběhu cyklu se mění hodnota řídící proměnné (ve výše uvedeném příkladu je to i). V každém opakování cyklu tak můžeme provést něco trochu jiného v závislosti na aktuální hodnotě této proměnné. Jakých hodnot řídící proměnná nabývá určuje část za in. Pokud použijeme základní range, bude se řídící proměnná postupně zvětšovat o jedničku. Tento cyklus například vypíše čísla od 0 do 9:

V rámci cyklu můžeme využívat více proměnných, pouze u řídící proměnné se však hodnota mění automaticky. Uvažme tento příklad:

Řídící proměnnou cyklu je x, jehož hodnota se tedy bude postupně měnit (od 0 po 9). U proměnné y se bude hodnota měnit, protože v rámci cyklu máme přiřazovací příkaz do y. Hodnota proměnné z zůstane ve všech opakováních stejná, protože z není řídící proměnná ani do ní v cyklu nic nepřiřazujeme.

Využití range

Při základním použití kombinujeme for cyklus s funkcí range, která vrací interval čísel a řídící proměnná následně nabývá hodnot z tohoto intervalu.

Pozor: V informatice často počítáme od nuly (nikoliv od jedničky jako normální lidi). Na to narážíme i zde: range(n) vrací hodnoty od 0 do n-1.

Pokud funkci range zadáme dva parametry, tj. voláme range(a, b) dá nám interval čísel od a do b-1. Můžeme zadat i třetí parametr, který udává délku skoku. Příklady:

For cyklus se dá využít nejen ve spojení s range, ale i obecněji. Můžeme například použít seznamy:

Ukázky použití for cyklu

Sudá a lichá

Výpis informace o sudosti a lichosti prvních n čísel:

Součet řady čísel

Výpočet součtu čísel od 1 do n:

Mocniny dvojky

Výpis informaci o prvních n mocninách dvojky:

Cykly při programování využíváme pro opakování skupiny příkazů. Opakování označujeme často pojmem iterace.

Cyklus while využíváme, pokud dopředu nevíme, kolikrát se bude cyklus opakovat. Pokud dopředu počet opakování známe, využíváme cyklus for.

Základní použití

While cyklus se opakuje tak dlouho, dokud je splněna řídící podmínka cyklu (v následující ukázce jde o n > 5). Tělo cyklu (příkazy, které se mají opakovat) vyznačujeme odsazením.

Tímto cyklem vypisujeme mocniny dvou, dokud nepřekročí stovku:

Nula i nekonečno opakování

Podmínka se vyhodnocuje ještě před prvním vykonáním těla cyklu. Pokud není splněna, tak se tělo while cyklu neprovede ani jednou:

Může se stát, že while cyklus neskončí nikdy. Tento program vypisuje donekonečna jedničky:

Takový nekonečný cyklus většinou znamená chybu v programu. Typickou chybou je, že zapomeneme v těle cyklu měnit hodnotu proměnné vystupující v podmínce cyklu. Tuto situaci označujeme jako „zacyklení programu“.

Ukázky použití while cyklu

Mocniny dvojky

Výpis všech mocnin dvojky menších než 1000:

Sčítačka

Následující program načítá čísla od uživatele a průběžně je sčítá. Výpočet se ukončí, když uživatel zadá číslo 0.

Vnořené cykly v Pythonu

Přejít ke cvičením na toto téma »

K opakování příkazů slouží základní cyklus for a cyklus while.

V těle cyklu mohou být nejen základní příkazy, ale třeba i další cyklus – ten nazýváme vnořený cyklus. Pro jeho použití nepotřebujeme žádný nový příkaz. Prostě jen cyklus zapíšeme (a odsadíme) uvnitř jiného cyklu. Vnořené cykly se ovšem vyplatí trénovat, jsou častým zdrojem problémů.

Příklad:

Tento program vypisuje tuto tabulku:

Vnitřní cyklus (s řídící proměnnou j) vypisuje jednotlivé řádky. Vnější cyklus (s řídící proměnnou i) pak zařídí vypsání celé tabulky. Na tomto příkladu je dobře vidět důležitá role správného odsazení. Příkaz print() způsobuje odřádkování – používáme jej v programu vždy po výpisu kompletního řádku.

Co by se stalo, kdybychom příkaz print() odsadili více či méně?

  • Kdybychom print() odsadili o úroveň více:
    • Byl by součástí vnitřního cyklu takže by se odřádkování provedlo po každém čísle.
    • Výstupem programu by pak byla řada čísel pod sebou.
  • Kdybychom print() odsadili o úroveň méně:
    • Byl by zcela mimo cykly, takže by se odřádkování provedlo jen jednou, až úplně nakonec.
    • Výstupem programu by pak byla řada čísel v jednom řádku.

Funkce je pojmenovaný blok příkazů. Funkcím můžeme předávat argumenty. Funkce vrací návratovou hodnotu.

Definice funkce

Python nabízí celou řadu vestavěných funkcí, tedy takových, které jsou již připravené tvůrci jazyka. Příkladem je třeba funkce len, která počítá délku řetězce.

Vlastní funkci definujeme pomocí klíčového slova def:

Tímto jsme definovali funkci say_hello, která má parametr name. Funkce může mít i více parametrů.

Volání funkce

Tím, že definujeme funkci, se ještě nevykoná. Aby se funkce vykonala, musíme ji zavolat. To uděláme tak, že napíšeme jméno funkce a do závorek předáme konkrétní argument:

Některé funkce jsou bez parametrů. U jejich volání musíme závorky stále uvést, např. say_goodbye().

Návratová hodnota

Funkce může vracet návratovou hodnotu pomocí klíčového slova return. Následující funkce vypočítá a vrátí faktoriál.

Takováto funkce sama o sobě nic neprovede, pouze vrátí hodnotu, se kterou můžeme dále pracovat.

Příkaz return ukončuje provádění funkce. Při volání následující funkce se tedy vypíše pouze foo:

Rozdíl return a print

Častý zdroj problémů u začátečníků je správné rozlišování mezi použitím print a return ve funkcích.

Použití print způsobí okamžitý výpis hodnoty, nelze však s touto hodnotou nijak dál pracovat.

Použití return ukončí funkci a vrátí hodnotu. Ta se automaticky nevypíše, ale můžeme ji přiřadit do proměnné a dále s ní pracovat.

Datové typy a jejich využití

Přejít ke cvičením na toto téma »

Základním prvkem programování je práce s daty. Data si udržujeme v proměnných a datových strukturách. Pro tento účel máme v Pythonu různé datové typy a každý z nich má své specifické způsoby použití. Základnímu notaci a označení v Pythonu se věnuje téma přehled datových typů.

Procvičování na Umíme se soustředí na nejvíce používané datové typy:

  • Číselné typy (int, float) pokrývá základní téma proměnné a číselné výrazy.
  • Logický typ (bool) souvisí úzce s tématem logické výrazy.
  • Řetězce jsou sekvence znaků, které oproti číslům přidávají navíc především princip indexování.
  • Seznamy jsou obecnější než řetězce, mimo jiné tím, že jsou dynamicky měnitelné a mohou obsahovat prvky různých typů.
  • Slovníky umožňují indexování nejen čísly, ale třeba i řetězci.

S datovými typy pak souvisí obecnější téma objektů, které už patří k pokročilejším a zde pokrýváme jen úplné základy.

Přehled typů

Základní datové typy v Pythonu jsou:

Typ Popis Příklady hodnot
int celá čísla 1, 42, -5, 200
float reálná čísla (přesněji čísla v plovoucí desetinné čárce, přičemž Python používá desetinnou tečku, nikoliv čárku) 2.5, 3.25, -12.37832
bool pravdivostní hodnoty True, False
str řetězce "prase", "pes"
list seznamy, což jsou uspořádané soubory hodnot [1, 3, 8, 2], ["koza", "ovce", "klokan"]
dict slovníky, což jsou neuspořádané dvojice klíč-hodnota (slovník mapuje klíče na hodnoty) {"a": 5, "b": 10}

Python nabízí i další typy, např. complex (komplexní čísla), tuple (entice, neměnitelná sekvence), set (množina).

Měnitelnost a neměnitelnost

Typy rozlišujeme podle toho, zda jejich hodnoty můžeme měnit:

  • měnitelné (mutable) typy jsou list, set, dict,
  • neměnitelné (immutable) typy jsou int, float, bool, str, tuple.

Toto rozlišení je důležité například při využití slovníků – slovníky můžeme indexovat pouze neměnitelnými typy.

Přetypování

Názvy typů jsou současně názvy vestavěných funkcí, které provedou přetypování. Typy proměnných jsou velice důležité. Ovlivňují například význam operátorů. Typický příklad je přetypování čísla na řetězec:

Zápis řetězců

Řetězce zapisujeme do uvozovek nebo apostrofů. V Pythonu 3 mohou řetězce obsahovat i znaky s diakritikou.

Indexování

K jednotlivým znakům řetězce přistupujeme pomocí indexování hranatými závorkami. Pozor, indexujeme od nuly. Python (na rozdíl od většiny jiných programovacích jazyků) umožňuje indexovat i od konce pomocí záporných čísel.

Pomocí dvojtečky můžeme indexovat podřetězec.

Pokročilejším prvkem pak je využití dvou dvojteček, kde třetí hodnota udává délku skoku:

Iterování přes řetězec

Jednotlivé znaky řetězce můžeme snadno procházet pomocí for cyklu.

Neměnitelnost řetězců

Řetězce jsou v Python neměnitelný datový typ. To je jeden z výrazných rysů, ve kterých se liší od seznamů. Neměnitelnost znamená, že nemůžeme změnit dílčí písmeno v znaku. Musíme vytvořit nový řetězec, ve kterém bude příslušné písmeno změněno.

Operace s řetězci

Řetězce můžeme sčítat (= zřetězit). Řetězce můžeme také násobit celým číslem (= opakovaně zřetězit). Mezi další užitečné operace patří zjištění délky (len) či test na přítomnost podřetězce (in).

Řetězce jsou objekty, které mají k dispozici řadu užitečných metod, které voláme pomocí tečkové notace. Příklady jsou převod na velká/malá písmena (upper, lower), rozdělení řetězce podle zadaného znaku (split), nebo nahrazování podřetězce (replace):

Všimněte si, že zde využíváme takzvanou tečkovou notaci: píšeme text.upper(), nikoliv běžné volání funkce tvaru upper(text). To souvisí s tím, že řetězce jsou reprezentovány jako objekty.

Operace se znaky

Při práci s řetězci se občas hodí i operace pro manipulaci s jednotlivými znaky, především funkce ord a chr, které převádí znaky na celá čísla a zpět:

  • ord(c) vrátí pořadové číslo znaku c,
  • chr(i) vrátí znak s pořadovým číslem i.

Pod „pořadové číslo“ se rozumí číslo v kódování Unicode. Pro základní programátorské úlohy stačí vědět, že písmena jsou v tomto kódování abecedně za sebou (bohužel to však platí jen pro písmena anglické abecedy). Takto tedy můžeme vypsat písmena anglické abecedy:

Seznam (list) je uspořádaná kolekce hodnot libovolného typu.

Vytvoření seznamu

Seznamy zapisujeme pomocí hranatých závorek:

Seznam můžeme také vytvořit pomocí klíčového slova list.

Indexování

K jednotlivým prvkům seznamu přistupujeme pomocí indexování hranatými závorkami. Pozor, indexujeme od nuly. Zápornými čísly můžeme indexovat odzadu:

Pomocí dvojtečky můžeme indexovat část seznamu:

Operace se seznamy

Užitečné funkce se seznamy:

Všimněte si, že zde využíváme takzvanou tečkovou notaci: píšeme s.sort(), nikoliv běžné volání funkce tvaru sort(s). To souvisí s tím, že seznamy jsou reprezentovány jako objekty.

Seznamy a for cyklus

Pomocí for cyklu můžeme procházet prvky seznamu:

Alternativně můžeme procházet prvky seznamu takto (tento zápis je bližší tomu, jak procházíme seznamy v jiných programovacích jazycích):

Slovník (dictionary, dict) udává mapování klíčů na hodnoty. Můžeme si třeba pamatovat počty kusů ovoce na skladě.

Vytvoření slovníku

Slovník vytváříme v Pythonu pomocí složených závorek.

Přístup k položkám

K položkám slovníku přistupujeme pomocí indexování hranatými závorkami. Podobně můžeme do slovníku položku přidat.

Pokud se pokusíme přistoupit k položce, která ve slovníku není, dostaneme chybu. Bezpečný přístup provedeme pomocí get:

Práce se slovníky

Další užitečné funkce pro práci se slovníky:

Python, stejně jako většina dalších moderních programovacích jazyků, podporuje objektově orientované programování. To už je poměrně pokročilé programátorské téma. Zde si shrneme jen některé základní pojmy.

Objekt (object) je kolekce dat (proměnných) a metod (funkcí), které s těmito daty pracují. V Pythonu jsou téměř všechna data, se kterými se setkáme, objekty (čísla, řetězce, seznamy, …).

Objekty jsou speciální instance tříd (class). Třídu můžeme chápat jako obecný vzor, podle kterého se tvoří objekty.

Příklad definice třídy:

A takto vytvoříme objekty (instance třídy) a použijeme je:

V tomto příkladě:

  • Person je třída,
  • homer a bart jsou objekty,
  • name a age jsou datové atributy,
  • introduce() je metoda,
  • __init__ je inicializační metoda, která se automaticky volá při vytváření objektu.
NAPIŠTE NÁM

Děkujeme za vaši zprávu, byla úspěšně odeslána.

Napište nám

Nevíte si rady?

Nejprve se prosím podívejte na časté dotazy:

Čeho se zpráva týká?

Vzkaz Obsah Ovládání Přihlášení Licence