Výpis souhrnů
Řízení výpočtu
Prohlížíte si souhrny informací k určitým tématům. Systémy Umíme se zaměřují hlavně na jejich procvičování. Ke cvičením k jednotlivým podtématům se dostanete pomocí odkazů níže.
Podtémata
Řízení výpočtu
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ěna 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ěné 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í.
NahoruPodmíněný příkaz (if) v Pythonu
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:
if answer != 42: # příkazy se vykonají pouze, pokud je podmínka splněna:
print("Bad answer") # vypíšeme text
answer = 42 # a navíc změníme proměnnou
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ů:
if x < 10:
print("small") # provede se, pokud podmínka je splněna
else:
print("big") # provede se, pokud podmínka není splněna
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:
if age < 6:
print("předškolák")
elif age < 18: # testuje se, pokud neplatí předchozí podmínka
print("školák")
elif age < 65: # testuje se, pokud neplatí ani jedna předchozí podmínka
print("dospělý ")
else: # provede se, pokud neplatí ani jedna předchozí podmínka
print("důchodce")
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:
if choice == "tea":
if money >= 10:
print("ok")
else:
print("refuse")
else:
print("not available")
if n % 2 == 1:
if x > 13:
print("Win!")
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:
NahoruCyklus for v Pythonu
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í lidé). 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 x in range(5, 13): print(x, end=" ") # 5 6 7 8 9 10 11 12
for x in range(5, 16, 3): print(x, end=" ") # 5 8 11 14
for x in range(8, 0, -1): print(x, end=" ") # 8 7 6 5 4 3 2 1
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 informace o prvních n
mocninách dvojky:
Cyklus while v Pythonu
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
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
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 v Pythonu
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.
factorial(5) # vypočítá hodnotu faktoriálu z 5, ale pak se tato
# hodnota nijak nepoužije
print(factorial(4)) # tentokrát výsledek výpočtu vypíšeme
x = factorial(6) # výsledek výpočtu se uloží do proměnné
print(x) # a pak třeba můžeme hodnotu proměnné vypsat
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.