Algoritmizácia v Pythone

doc. Ing. Daniel Hládek, PhD.

https://student.kemt.fei.tuke.sk/python

Osnova

  • Čo je Python
  • Syntax
  • premenné, funkcie a základné typy
  • Reťazce, vstup a výstup, práca so súbormi
  • Kolekcie, iterácia a comprehension
  • Moduly, balíčky, pip a virtuálne prostredia

Prečo sa učiť Python?

Python patrí medzi najpopulárnejšie programovacie jazyky na svete. Je obľúbený najmä vďaka svojej jednoduchej syntaxi, čitateľnosti a širokému spektru využitia.

Oblasti použitia

  • Webové aplikácie (Django, Flask)
  • Príprava a analýza dát – v spojení s výkonnými knižnicami (NumPy, SciPy), náhrada Matlabu
  • Umelá inteligencia a machine learning (TensorFlow, PyTorch)
  • Správa operačných systémov a automatizácia (skripty, DevOps)
  • Rýchle prototypovanie aplikácií
  • Robotika a vývoj hier

Čo je to Python?

  • vysokoúrovňový programovací jazyk
  • interpretovaný jazyk
  • dynamicky (slabo) typovaný jazyk
  • navrhnutý s dôrazom na čitateľnosť kódu

Interpretovaný vs. prekladaný

  • Interpretovaný jazyk (Python) Kód sa vykonáva riadok po riadku pomocou interpretera.

  • Prekladaný jazyk (C, C++) Kód sa najprv preloží do strojového kódu a potom spúšťa.

  • 👉 Výhoda Pythonu: rýchly vývoj

  • 👉 Nevýhoda: "nižší" výkon oproti prekladaným jazykom

Lepidlo na všetko

V Pythone vieme jednoducho zavolať knižnicu napísanú v C/C++ a využiť jej rýchlosť.

  • jednoduchý a čitateľný kód v Pythone pre celý program
  • rýchlosť a výkon v C/C++ pre náročné časti programu

Syntax jazyka

meno = "Python"

def pozdrav(meno):
    return f"Ahoj {meno}"

pozdrav(meno)

Ľahko čitateľný a úsporný kód.

Používa odsadenie namiesto zátvoriek.

Dive Into Python 3 – Your First Python Program

Slabo vs. silno typovaný jazyk

Python je dynamicky typovaný jazyk, čo znamená:

  • typ premennej sa určuje za behu programu

Základné údajové typy

  • int – celé čísla
  • float – desatinné čísla
  • bool – pravda/nepravda
  • str – reťazce

Ďalšie čítanie: Dive Into Python 3 – Native Datatypes

Typové anotácie (type hints)

Voliteľné označenie typov pre lepšiu čitateľnosť:

  • Lepšia podpora v IDE
  • Jednoduchšie ladenie
  • Lepšia dokumentácia
def add(a: int, b: int) -> int:
    c : int = 5
    return a + b + c

doc

Všetko je objekt

  • Python používa referencie – premenné sú odkazy na objekty
  • del – odstránenie premennej
  • Odovzdávanie objektov: referenciou (nie hodnotou)

Pamäť je spravovaná automaticky

Python automaticky spravuje pamäť pomocou garbage collectora:

  • alokuje pamäť podľa potreby
  • automaticky uvoľňuje pamäť, ktorú už program nepoužíva

Objekty majú metódy

Užitočné funkcie, patriace ku objektom

text = "  python "

print(text.upper())     # PYTHON
print(text.lower())     # python
print(text.strip())     # odstráni medzery
print(text.replace("p", "P"))

Dokumentácia, Dive Into Python 3 – Strings

Reťazce (str) v Pythone

Reťazec je nemenná sekvencia znakov UTF8.

  • Jeden znak môže mať viac bajtov.
text = "Ahoj slniečko"

Základné operácie s reťazcami

a = "Hello"
b = "World"

print(len(text))     # dĺžka - počet znakov, nie bajtov
print(a + " " + b)   # spájanie
print(a * 3)         # opakovanie

Reťazec je postupnosť znakov

Každú postupnosť vieme prechádzať

text = "Python"
for c in text:
    print(c)

V každej postupnosti vieme vyhľadávať.

if "y" in text:
    print("y je v reťazci")
if "za" not in text:
    print("za nie je v reťazci")

Indexy a výrezy

text = "Python"

print(text[0])    # P
print(text[-1])   # n
print(text[0:3])  # Pyt - Výrez

Konverzia reťazcov na čísla a naopak

vek = input("Zadaj vek: ") # vek je reťazec
print(f"Tvoj vek je {vek}") # šablóna nového reťazca
vek = int(vek)  # konverzia na celé číslo
print(f"Tvoj vek o rok bude {vek + 1}")

Štandardný vstup alebo súbor je postunosť reťazcov

import sys

for line in sys.stdin:
    print("Zapísal si:")
    print(line.rstrip())

Kontext with automaticky uzavrie súbor

open funguje podobne ako v C

  • "r" – čítanie (read)
  • "w" – zápis (write)
  • "a" – pripísanie (append)
with open("subor.txt", "r") as f:
    for line in f:
        print(line.rstrip())

Ďalšie čítanie: Dive Into Python 3 – Files

Kolekcie

Kolekcie slúžia na uchovávanie viacerých hodnôt v jednej premennej.

Ďalšie čítanie: Dive Into Python 3 – Native Datatypes

Základné kolekcie

  • n-tica (tuple) – nemenná, usporiadaná
  • zoznam (list) – usporiadaný, meniteľný
  • slovník (dict) – dvojice kľúč → hodnota
  • množina (set) – unikátne prvky

n-tice (tuples)

N-ticca je nemenná usporiadaná množina prvkov.

pair = (1, 2)
print(pair[0])  # prístup k prvku

List (zoznam)

Zoznam je usporiadaná množina prvkov.

numbers = [1, 2, 3, 4]
names = ["Anna", "Peter", "Ján"]

Zoznamy je možné prechádzať

for n in numbers:
    print(n)

#  Enumerate generuje dvojice index → hodnota
for i,number in enumerate(numbers):
    print(i, number)

V zoznamoch môžeme vyhľadávať

numbers = [1, 2, 3, 4]
if 3 in numbers:
    print("3 je v zozname")

names = ["Anna", "Peter", "Ján"]
if "Ján" not in names:
    print("Ján nie je v zozname")

Operácie so zoznamami

print(numbers[0])      # prístup k prvku
numbers.append(5)      # pridanie
numbers.pop(0)         # odstránenie prvého prvku
numbers.push(0)        # pridanie na začiatok
numbers.sort()         # zoradenie

Generovanie zoznamu (Comprehension)

  • kratší a čitateľnejší kód pre tvorbu zoznamu
squares = [x**2 for x in range(5)]

Výsledok:

[0, 1, 4, 9, 16]

Generovanie s podmienkou

even = [x for x in range(10) if x % 2 == 0]

Ďalšie čítanie: Dive Into Python 3 – Comprehensions

Slovník (dict)

Slovník ukladá dáta ako dvojice kľúč → hodnota.

person = {
    "meno": "Ján",
    "vek": 25
}
print(person["meno"])

Prechádzanie slovníka a vyhľadávanie

Funguje porobne ako pri zoznamoch.

# items() generuje dvojice kľúč → hodnota
for key, value in person.items():
    print(key, value)

if "vek" in person:
    print("Vek je:", person["vek"])

Generovanie slovníka (dict comprehension)

Podobné ako list comprehension, ale pre slovníky.

Príklad:

squares = {x: x**2 for x in range(5)}

Výsledok:

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Ďalšie čítanie: Dive Into Python 3 – Comprehensions

Množina (set)

Množina obsahuje iba unikátne prvky.

nums = {1, 2, 2, 3}
print(nums)  # {1, 2, 3}

Operácie s množinami

a = {1, 2, 3}
b = {2, 3, 4}

print(a & b)  # prienik → {2, 3}
print(a | b)  # zjednotenie → {1, 2, 3, 4}

Moduly a balíčky

Python umožňuje organizovať kód pomocou:

  • modulov (jednotlivé súbory)
  • balíčkov (adresáre s modulmi)
import math
print(math.sqrt(16))

Spôsoby importovania

Jeden balíček môže obsahovať viacero modulov. Môžeme importovať celý balíček alebo len konkrétny modul.

Po importovaní je modul dostupný cez jeho názov ako globálna premenná

import math # celý balíček alebo modul
from math import sqrt # len konkrétnu funkciu z modulu alebo balíčka
import math as m # pridelím alias pre modul
from collections import Counter # import konkrétnej triedy z modulu
from os.path import join # Modul môže obsahovať viacero podmodulov, ktoré je možné importovať samostatne

Vlastný modul

Modul je obyčajný .py súbor.

Súbor utils.py:

def add(a, b):
    return a + b

Použitie v inom súbore:

from utils import add

print(add(2, 3))

Balíček

Balíček je adresár s viacerými modulmi.

project/
├── main.py
└── helpers/
    ├── __init__.py
    ├── math_utils.py
    └── text_utils.py

Import:

from helpers.math_utils import add

Ďalšie čítanie: Dive Into Python 3 – Packaging Python Libraries

Ekosystém jazyka Python

Python nie je len jazyk, ale aj rozsiahly ekosystém nástrojov a knižníc. Obsahuje tisíce balíčkov, ktoré riešia prakticky každý problém – od práce s dátami až po vývoj umelej inteligencie.

Čo je pip?

pip je správca balíčkov pre Python.

Používa sa na inštalovanie knižníc z Python Package Indexu (PyPI).

python -m pip install requests

Základné príkazy pip

Balíčky je možné zdieľať a inštalovať pomocou pip.

python -m pip install requests
python -m pip uninstall requests
python -m pip list
python -m pip show requests

Odporúčanie:

  • používať python -m pip, aby bolo jasné, ku ktorému Pythonu balíčky patria
  • neinštalovať balíčky globálne, ak pracujeme na projekte

Virtuálne prostredie

Virtuálne prostredie je oddelené miesto pre balíčky jedného projektu.

Prečo ho používať?

  • každý projekt môže mať vlastné verzie knižníc,
  • neznečisťujeme systémový Python,
  • projekt sa ľahšie prenáša medzi počítačmi.

Vytvorenie virtuálneho prostredia

python -m venv .venv

Aktivácia na Linuxe/macOS:

source .venv/bin/activate

Aktivácia vo Windows PowerShell:

.venv\Scripts\Activate.ps1

Inštalácia balíčkov do projektu

Po aktivovaní virtuálneho prostredia:

python -m pip install requests

Uloženie zoznamu závislostí:

python -m pip freeze > requirements.txt

Inštalácia závislostí v inom prostredí:

python -m pip install -r requirements.txt

Typický postup v projekte

python -m venv .venv
source .venv/bin/activate
python -m pip install requests
python main.py

Štruktúra:

project/
├── .venv/
├── main.py
└── requirements.txt

Adresár .venv/ sa zvyčajne neukladá do gitu.

Manažment virtuálnych prostredí

  • pip – základný správca balíčkov
  • uv – moderný a rýchly správca prostredí a závislostí
  • Anaconda – distribúcia vhodná pre dátovú analýzu

Vývojové prostredia

  • Vim / NeoVim
  • Visual Studio Code
  • Jupyter Notebook – interaktívne prostredie na experimentovanie
  • IPython – rozšírený interaktívny interpreter

Literatúra

Reload?