Materiál k cvičení DBM1 týden #2, sezona 2024/2025
Python je interpretovaný programovací jazyk, který je vhodný pro rychlý vývoj a prototypování. Je to dnes zdánlivě nejpoužívanější jazyk pro analýzu dat a strojové učení a v posledních letech nastolil nevídanou dominanci v TIOBE indexu.
Typicky se u Pythonu vyzdvihují vlastnosti:
Pro ověření, že je Python nainstalovaný, lze otevřít příkazovou řádku WIN+R → "cmd" a zkusit zavolat python --version. Pokud je Python nainstalovaný, měla by se zobrazit verze.
>python --version
Python 3.10.11
Pokud se zdá, že Python není nainstalovaný, je potřeba stáhnout instalační soubor z python.org. Aktuální verze 3.13.2 by měla být vyhovující, ale i se staršími verzemi by neměl být problém (alespoň 3.9).
※ Na PC v laboratořích je Python nainstalovaný.
PyCharm je integrované vývojové prostředí (IDE), které je zaměřené na vývoj v Pythonu. Existují Community (zdarma) a Professional (placená) verze. Pro účely tohoto cvičení je dostatečná verze Community.
PyCharm je ke stažení na https://www.jetbrains.com/pycharm/download/?section=windows .
Po spuštění Pycharmu lze buď z uvítací obrazovky, nebo z menu File → New Project vytvořit nový projekt. Dialog vypadá následovně:

V levé části je volba typu projektu, kde nás bude zajímat Pure Python. V pravé části je možné nastavit umístění projektu a tím i jeho název.
Dále je zde volba interpretru Pythonu, resp. virtuálního prostředí. Většinou je vhodné vytvořit nové virtuální prostředí, které bude izolované od ostatních projektů. Zjednodušeně řečeno, až budou do projektu instalovány knihovny, budou dostupné pouze v tomto projektu/virtuálním prostředí a tím se zamezí konfliktům verzí knihoven a konfigurace mezi projekty.
※ Virtuální prostředí lze vytvořit i ručně pomocí
python -m venv venvv příkazové řádce v adresáři projektu.
Pole Location určuje umístění virtuálního prostředí na disku. Výchozí umístění (adresář venv v projektu) je obvyklé a vhodné.
Pole Base interpreter vybírá, jaká verze Pythonu bude spjatá s virtuálním prostředím.
Zaškrtávací Inherit global site-packages a Make available to all projects jsou volby, které je vhodné nechat nezaškrtnuté, pokud nemáte zvláštní důvod je zapnout.
Dole je možné nechat vygenerovat main.py úvodní skript, abychom měli něco, co můžeme spustit a ověřit, že vše funguje.
Po vytvoření projektu se otevře hlavní okno PyCharmu, které se skládá z několika částí:

venv).main.py (viz záložka nad ním)Run a Terminal. První ukazuje výstup programu. Druhý je příkazová řádka, skrze kterou lze například instalovat knihovny.Vytvořený main.py obsahuje jednoduchý kód, který demonstruje vypsání textu do konzole. Pro ověření funkčnosti lze stisknout zelený trojúhelník v pravém horním rohu, nebo troj´helník na řádku (L13) s kódem.
V konzoli by se měl zobrazit text Hi, PyCharm! a informace, že proces byl úspěšně dokončen (exit code 0).
Python se tváří, že má jednoduchou syntaxi, nicméně některé koncepty mohou být trochu matoucí, pokud jste zvyklí na jiné jazyky.
Proměnné v Pythonu se deklarují přiřazením hodnoty. Python je dynamicky typovaný jazyk, což znamená, že nemusíte explicitně určit typ proměnné. Typ proměnné se vyřeší až během běhu programu.
x = 5
y = 3.14
z = "Hello, World!"
print(x, y, z)
Ohledně názvů proměnných platí několik pravidel:
!@#$%^&*()Python je case-sensitive, což znamená, že proměnné a a A jsou dvě různé proměnné.
Čeština a jiné znaky mimo ASCII jsou podporovány v názvu proměnných, ale není úplně obvyklé je používat. V textové hodnotě není problém použít cokoliv.
ěščřžýáíé = "Čeština je krásný jazyk 😼"
β = True
零 = None
print(ěščřžýáíé, β, 零)
Python má několik základních datových typů, které se používají nejčastěji:
True, False)None (nullová hodnota)Kromě toho existují i komplexnější datové typy - seznamy, slovníky, n-tice...
# seznam
my_list = [1, 2, 3, 4, 5]
# slovník
my_dict = {"name": "John", "age": 36}
# n-tice
my_tuple = (1, 2, 3, 4, 5)
Q1: Jaký je rozdíl mezi seznamem a n-ticí?
Python podporuje většinu běžných operátorů, jako jsou sčítání (+), odčítání (-), násobení (*), dělení (reálné /, celočíselné //), modulo (%), mocnění (**), atd.
x = 5
y = 2
print(x + y) # 7
print(x - y) # 3
print(x * y) # 10
print(x / y) # 2.5
print(x % y) # 1
print(x ** y) # 25
print(x // y) # 2
U podmínek narazíme na první z nuancí Python syntaxe - bloky kódu se oddělují odsazením. To znamená, že kód v rámci jedné podmínky musí být odsazen o stejný počet mezer nebo tabulátorů.
※ Doporučuje se používat 4 mezery pro odsazení dle PEP 8. Není možné ve stejném bloku kódu kombinovat mezery a tabulátory, i když mají stejnou optickou délku.
Podmínky se zapisují pomocí klíčových slov if, elif (else if) a else. Jelikož Python nemá závorky, blok kódu je ukončen na konci řádku dvojtečkou : a následně odsazený kód.
x = 5
y = 10
if x > y:
print("x is greater than y")
elif x < y:
print("x is less than y")
else:
print("x is equal to y")
Python podporuje primárně 2 typy cyklů - for a while. První z nich je vhodný pro iteraci přes kolekce (seznamy, slovníky, n-tice), druhý pro opakování kódu, dokud je splněna podmínka.
# for cyklus
for i in range(5):
print(i)
# while cyklus
i = 0
while i < 5:
print(i)
i += 1
※
range(5)vytvoří sekvenci čísel od 0 do 4.range(5, 10)by vytvořil sekvenci od 5 do 9.range(0, 10, 2)by vytvořil sekvenci od 0 do 8 s krokem 2.
Q2: Zkuste, jak se bude chovat cyklus
for, pokud místorange(5)zadáte nějaký textový řetězec nebo seznam.
Z cyklů lze vystoupit dříve pomocí klíčového slova break nebo přeskočit aktuální iteraci pomocí continue.
for i in range(10):
if i == 5:
break
if i % 2 == 0:
continue
print(i)
Q3: Co vypíše předchozí kód? Jaký je průběh iterace?
Python má několik způsobů jak vypisovat hodnoty. Nejjednodušší je použít funkci print(), která vypíše hodnoty oddělené mezerou, jak již bylo ukázáno dříve.
Pokud chceme do nějakého textu vložit hodnotu proměnné, můžeme použít formátovací řetězce.
name = "John"
age = 36
# konkatenace textů
print("My name is " + name + " and I am " + str(age) + " years old.")
# formátovací řetězec
print(f"My name is {name} and I am {age} years old.")
Při formátování skrze f-string je možné použít i formátovací specifikátory, které umožňují např. zaokrouhlení desetinných čísel, formátování data a času, zarovnání textů na určitou délku, atd.
※ Pokud není číslo
agepřetypováno na řetězec volánímstr(age), dojde k chybě.
Funkce v Pythonu se definují klíčovým slovem def a následně názvem funkce. Funkce může mít parametry a může vracet hodnotu pomocí klíčového slova return. Tohoto si bylo možné všimnout již ve vygenerovaném main.py.
def greet(name):
return f"Hello, {name}!"
print(greet("John"))
Funkce mohou mít některé parametry s výchozí hodnotou, které se použijí, pokud nejsou předány při volání - např. def greet(name="World").
Zároveň mohou funkce vracet více hodnot, které se pak dají uložit do více proměnných.
def get_name():
return "John", "Doe"
first_name, last_name = get_name()
print(first_name, last_name)
Seznamy jsou jedním z nejpoužívanějších datových typů v Pythonu. Jsou to kolekce prvků, které mohou být různých typů a mohou být měněny. Typické operace jsou přidávání prvků, odebírání prvků, změna prvků, vyhledávání, řazení, atd.
my_list = [1, 2, 3, 4, 5]
# přidání prvku
my_list.append(6)
# odebírání hodnoty 3
my_list.remove(3)
# změna prvku na indexu 0 (1. pozice)
my_list[0] = 10
print(my_list)
Ze seznamů lze vytvářet podseznamy pomocí tzv. slicingu.
my_list = [1, 2, 3, 4, 5]
# výběr prvků od indexu 1 do 3 (bez 3)
print(my_list[1:3])
# výběr prvků od začátku do indexu 3 (bez 3)
print(my_list[:3])
# výběr prvků od indexu 3 do konce
print(my_list[3:])
※ Indexace v Pythonu začíná od 0. Lze používat negativní indexy, které počítají od konce seznamu.
Jedna ze zajímavějších technik je List Comprehension je zkrácený zápis pro vytvoření seznamu na základě jiného seznamu.
# varianta s for cyklem
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
new_list = []
for x in fruits:
if "a" in x:
new_list.append(x)
print(new_list)
# varianta s List Comprehension
all_list = [x for x in fruits]
filtered_list = [x for x in fruits if "a" in x]
print(all_list)
print(filtered_list)
Q4: Jak byste skrze List Comprehension vytvořili seznam čísel od 1 do 10?
Q5: Jak byste skrze List Comprehension vytvořili seznam čísel od 1 do 100, které jsou dělitelné 7 nebo 10?