= a ==.
Podmínka je pravidlo: když něco platí, tak udělej tohle, jinak něco jiného. Přesně takhle přemýšlíme i my. Když prší, vezmu deštník. Jinak jdu bez něj.
if prsi:
vezmi_destnik()
else:
jdi_bez_nej()
Zkus vymyslet tři pravidla ze svého života a zapsat je česky. Až pak je převeď do Pythonu. Vazba na vlastní zkušenost je tady důležitější než syntaxe.
Tohle je nejčastější chyba začátečníků, proto je důležité ji odhalit hned.
| Zápis | Význam | Kdy se používá |
|---|---|---|
= |
ulož hodnotu | zivoty = 100 |
== |
ptám se, jestli je to stejné | if zivoty == 100: |
Jedno rovnítko je příkaz: „ulož". Dvě rovnítka jsou otázka: „je to stejné?" Když se ptáš, musíš to napsat dvakrát.
Podívej se, co se stane při záměně:
if zivoty = 100: # SyntaxError
Python to naštěstí odmítne rovnou. V jiných jazycích by to prošlo a způsobilo záhadnou chybu.
zivoty == 100 # je rovno
zivoty != 100 # není rovno
zivoty > 50 # je větší
zivoty < 50 # je menší
zivoty >= 50 # je větší nebo rovno
zivoty <= 50 # je menší nebo rovno
Výsledek porovnání je hodnota typu bool:
Porovnání není nic magického. Je to výpočet, jehož výsledek je
TrueneboFalse. Aifje jen příkaz „když je tadyTrue, pokračuj dovnitř".
Toto Python odlišuje od většiny jazyků a je důležité to pochopit hned.
Odsazení určuje, co do podmínky patří. V jiných jazycích se používají složené závorky, Python používá mezery. Standardem jsou 4 mezery. VS Code vám je udělá klávesou Tab.
Časté chyby, které z toho plynou:
IndentationError: expected an indented block — za if následuje neodsazený řádekToto je koncepčně nejtěžší část hodiny. Podívej se na oba případy vedle sebe:
elifznamená „a když to první neplatilo, zkus tohle". Jakmile jedna větev vyjde, ostatní se ani netestují.
Když napíšeš dvě samostatná
if, Python vyhodnotí obě a může vypsat obě hlášky.
Kdy použít co: elif pro vzájemně se vylučující stavy (jedna z variant).
Samostatná if pro nezávislé kontroly (má klíč, má lektvar, je otrávený).
Zkus najít problém v tomhle kódu:
Při 80 životech platí už první podmínka, takže druhá se nikdy netestuje. Podmínky musí jít od nejpřísnější k nejmírnější.
if ma_klic and zivoty > 0: # obě musí platit
if ma_klic or ma_paklic: # stačí jedna
if not ma_klic: # obrácení
Tabulka pravdivosti pro rychlý přehled:
| A | B | A and B |
A or B |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
andje přísné — chce všechno.orje velkorysé — stačí mu jedna věc.
Praktický herní příklad, který pochopíš okamžitě:
Pro pokročilé, můžeš zkusit až na konci:
stav = "živý" if zivoty > 0 else "mrtvý"
Čte se to zprava doleva jako věta: „stav je 'živý', pokud životy jsou nad nulou, jinak 'mrtvý'". Šetří to místo, ale nepoužívejte to na složité věci.
| Chyba | Příčina | Řešení |
|---|---|---|
SyntaxError: invalid syntax u if x = 5 |
Jedno rovnítko | Použít == |
IndentationError |
Chybí odsazení za if |
4 mezery / Tab |
elif se nikdy neprovede |
Špatné pořadí podmínek | Od nejpřísnější |
| Vypíší se dvě hlášky najednou | Použili if místo elif |
Změnit na elif |
SyntaxError na konci řádku |
Chybí dvojtečka | if x > 5: |
| Porovnání textu nefunguje | Rozdíl velkých písmen | .lower() na vstup |
Tvoje zadání:
Vytvoř ukazatel zdraví, který mění barvu i text podle počtu životů.
- Přidej
st.slider("Životy", 0, 100, 72)- Napiš
ifpro případzivoty <= 0— hrdina zemřel- Přidej
elifprozivoty <= 25— kriticky zraněný- Přidej
elifprozivoty <= 60— zraněný- Přidej
else— v pořádku. Ke každé větvi dej jinou barvu a jiné emoji
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–5, čtyři různé stavy |
| Rozšíření | Přidat st.progress() a st.metric se stavem |
| Výzva | Barvu pozadí boxu počítat podmínkou a použít v HTML style |
Očekávaný výsledek: tažením posuvníku se postupně mění hláška z zelené přes oranžovou po červenou.
Tvoje zadání:
Hrdina smí do jeskyně jen za určitých podmínek. Napiš pravidla.
- Přidej
st.checkbox("Mám pochodeň")ast.checkbox("Mám lano")- Přidej
st.slider("Odvaha", 0, 10, 5)- Napiš podmínku, kdy hrdina může dovnitř: musí mít pochodeň a lano a odvahu nad 3
- Když nemůže, napiš přesně, co mu chybí — použij samostatné
ifpro každou věc- Přidej
st.balloons(), když projde
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3, správně použité and |
| Rozšíření | Bod 4, konkrétní hlášky co chybí |
| Výzva | Přidat alternativu: místo lana stačí checkbox("Umím létat") pomocí or |
Očekávaný výsledek: program řekne buď „můžeš dovnitř", nebo přesně vyjmenuje chybějící věci.
Tvoje zadání:
Dva soupeři, jedno kolo, kdo vyhraje.
- Přidej slidery pro sílu hrdiny a sílu příšery
- Přidej slider „hod kostkou" 1 až 6 pro hrdinu
- Spočítej
utok_hrdiny = sila_hrdiny + hod- Porovnej útok se silou příšery pomocí
if/elif/else: výhra, remíza, prohra- Přidej podmínku, že hod 6 znamená kritický zásah a útok se zdvojnásobí
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–4 |
| Rozšíření | Bod 5, kritický zásah |
| Výzva | Přidat obranu příšery a spočítat, kolik životů skutečně ubylo (nikdy míň než 0) |
Očekávaný výsledek: změna kteréhokoliv slideru okamžitě přepočítá výsledek souboje.
Tvoje zadání:
Program posoudí, jaký typ postavy hráč vytvořil.
- Přidej slidery na sílu, magii a obratnost (každý 1 až 20)
- Napiš podmínku: když je síla největší, je to Bojovník
- Když je magie největší, je to Kouzelník
- Když je obratnost největší, je to Lupič
- Když jsou všechny tři stejné, napiš „Vyvážený univerzál"
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–4 |
| Rozšíření | Bod 5 s trojitým porovnáním |
| Výzva | Přidat hodnocení „síly postavy" (slabá / průměrná / silná) podle součtu bodů |
Očekávaný výsledek: program pojmenuje typ postavy podle rozložení statistik.
Tvoje zadání:
Přidej do hry první skutečné rozhodnutí hráče.
- Přidej
st.radio("Kam půjdeš?", ["Les", "Jeskyně", "Věž"])- Podle volby nastav
nebezpeci,odmenaapopispomocíif/elif/else- Přidej
st.checkbox("Vzít si lektvar"), který sníží nebezpečí o 10- Vyhodnoť, jestli hrdina přežije:
zivoty > nebezpeci- Zobraz výsledek barevnou zprávou a přepočítej zlato po dobrodružství
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2, každá volba dá jiný popis |
| Rozšíření | Body 3–4, přežití se počítá |
| Výzva | Přidat podmínku, že do Věže se dá jít jen s klíčem a nad 50 životů |
Očekávaný výsledek: hráč si vybere cestu a hra mu řekne, jak dopadl.
Přidej do své hry čtvrté místo, kam se dá jít, a vymysli pro něj vlastní pravidlo. Pravidlo musí používat alespoň dvě podmínky spojené pomocí
andneboor. Do komentáře napiš česky, jaké pravidlo to je.
Toto je jedna z možných variant, jak mohl úkol dopadnout. Tvoje řešení se může lišit a to je v pořádku.
Oficiální dokumentace se hodí ve chvíli, kdy si chceš ověřit přesný zápis podmínky, význam operátorů nebo chování logických výrazů. U Pythonu bývají nejdůležitější krátké ukázky a tabulky přímo v referenci.
| Co jsme použili | Oficiální dokumentace | Co tam najdeš |
|---|---|---|
if / elif / else |
The if statement |
přesný zápis podmínky a větvení programu |
porovnávání ==, !=, <, > |
Comparisons | porovnávací operátory a pravidla vyhodnocení |
bool |
bool |
hodnoty True, False a jejich použití |
and, or, not |
Boolean operations | logické spojky a pořadí vyhodnocování |
| odsazení a bloky kódu | Indentation | proč jsou mezery součástí syntaxe Pythonu |
| podmínka v jednom řádku | Conditional expressions | zápis x if podminka else y |
st.slider |
st.slider |
vstupní hodnotu, rozsah a práci s čísly |
st.checkbox |
st.checkbox |
přepínač vracející True nebo False |
st.success, st.warning, st.error |
st.success, st.warning, st.error |
barevné hlášky pro různé stavy hry |
| Cvičení | Odkaz | Proč se hodí |
|---|---|---|
| Logika a řešení problémů | umimeinformatiku.cz | Přímo procvičuje and/or/not |
| Algoritmické myšlení | umimeinformatiku.cz | Rozhodovací postupy |
| Rozhodovačka | umimeinformatiku.cz | Rychlé vyhodnocování podmínek |
| Robotanik | umimeinformatiku.cz | Podmíněné chování robota |