Materiál k cvičení DBM1 týden #2, sezona 2024/2025

Příprava vývojového prostředí, základní syntaxe Pythonu

Úvod k Pythonu a PyCharm

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:

Instalace Pythonu

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

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 .

Vytvoření nového projektu

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ě:

01newprojectpng

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 venv v příkazové řádce v adresáři projektu.

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.

Orientace v prostředí, práce s projektem

Po vytvoření projektu se otevře hlavní okno PyCharmu, které se skládá z několika částí:

01helloworldpng

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 syntaxe

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é

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(ěščřžýáíé, β, 零)

Datové typy

Python má několik základních datových typů, které se používají nejčastěji:

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í?

Odpověď Rozdíl je v imutabilitě. Seznam lze měnit (přidávat, odebírat prvky), zatímco n-tice je neměnná po vytvoření.

Operátory

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

Podmínky

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")

Cykly

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ísto range(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?

Výpisy hodnot, práce s textem

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 age přetypováno na řetězec voláním str(age), dojde k chybě.

Funkce

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)

Práce se seznamy

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?