Cyklus v Pythonu a dotaz v SQL
Máme tabulku s prodejem učebnic chemie v několika městech České republiky.
Město | Prodané kusy v roce 2021 | Prodané kusy v roce 2022 |
---|---|---|
Praha | 4200 | 4900 |
Brno | 2500 | 2100 |
Ostrava | 1500 | 1100 |
Plzeň | 1000 | 700 |
Liberec | 700 | 500 |
Olomouc | 400 | 300 |
Data máme zadaná v Pythonu jako dvourozměrný seznam. Naším úkolem je zjistit, ve kterých městech prodeje učebnice poklesly.
prodej_knih = [
["Praha", 4200, 4900],
["Brno", 2500, 2100],
["Ostrava", 1500, 1100],
["Plzeň", 1000, 700],
["Liberec", 700, 500],
["Olomouc", 400, 300]
]
Řešení úlohy v SQL
Uvažujme, jak bychom řešili příklad v SQL. Tento příklad je založený na tom, že říkáme, jaký by měl být výsledek. Jinak řečeno, říkáme, co chceme. Neříkáme, jakým způsobem by měl počítač k požadovanému výsledku dojít.
SELECT mesto
FROM prodej_knih
WHERE rok2 < rok1;
Řešení úlohy v Pythonu
V Pythonu s využitím cyklu říkáme, co má počítač udělat, tj. dáváme mu posloupnost kroků, kterou má provést, aby dospěl k námi požadovanému výsledku. Instrukce, které počítači dáme, jsou následující:
- Projdi jednotlivé prvky seznamu (projdi tabulku řádek po řádku).
- Pro každý prvek (podseznam) se podívej, jestli je hodnota ta pozici 1 větší než hodnota na pozici 2.
- Pokud ano, vypiš prvek na pozici 0.
# Projdi tabulku prodej knih řádek po řádku
for radek in prodej_knih:
# Podívej se, jestli je hodnota na pozici 1 větší než hodnota na pozici 2
if radek[1] > radek[2]:
# Pokud ano, vypiš na oprazovku hodnotu na pozici 0
print(radek[0])
První opakování cyklu
Python do proměnné radek
vloží to, co je na začátku seznamu, tj. prodeje v Praze. To, že jde o proměnnou radek
, určíme tím, že název radek
vložíme mezi for
a in
.
for radek in prodej_knih:
Nyní je vyhodnocená podmínka
if radek[1] > radek[2]:
Hodnota radek[1]
je 4200 a hodnota radek[2]
je 4900. Není tedy pravda, že je hodnota radek[1]
větší než hodnota na pozici radek[2]
, proto nespouštíme kód uvnitř podmínky. V cyklu již další příkazy nejsou a pokračuje dál.
Druhé opakování cyklu
Python vidí, že není na konci seznamu, a proto tedy spouští cyklus znovu. Do proměnné radek
vloží to, co je na dalším místě, tj. prodeje v Brně.
Nyní je vyhodnocená podmínka
if radek[1] > radek[2]:
Hodnota radek[1]
je 2500 a hodnota radek[2]
je 2100. V tomto případě je pravda, že hodnota radek[1]
je větší než radek[2]
. To znamená, že prodeje skutečně poklesly.
Python nyní spouští příkaz, který je uvnitř podmínky.
print(radek[0])
Hodnota radek[0]
se nyní zobrazí na obrazovce.
Třetí opakování cyklu
Třetí opakování cyklu se týká Ostravy.
I zde bude podmínka vyhodnocena jako pravda a Python vypíše i "Ostrava".
Čtvrté opakování cyklu
Další pokračování se týká Plzně.
Prodeje poklesly i zde.
Páté opakování cyklu
V Liberci prodeje taktéž klesly.
Šesté opakování cyklu
A v Olomouci též prodeje taktéž klesly.