Datové typy a jejich využití

Přejít ke cvičením na toto téma »

Základním prvkem programování je práce s daty. Data si udržujeme v proměnných a datových strukturách. Pro tento účel máme v Pythonu různé datové typy a každý z nich má své specifické způsoby použití. Základnímu notaci a označení v Pythonu se věnuje téma přehled datových typů.

Procvičování na Umíme se soustředí na nejvíce používané datové typy:

  • Číselné typy (int, float) pokrývá základní téma proměnné a číselné výrazy.
  • Logický typ (bool) souvisí úzce s tématem logické výrazy.
  • Řetězce jsou sekvence znaků, které oproti číslům přidávají navíc především princip indexování.
  • Seznamy jsou obecnější než řetězce, mimo jiné tím, že jsou dynamicky měnitelné a mohou obsahovat prvky různých typů.
  • Slovníky umožňují indexování nejen čísly, ale třeba i řetězci.

S datovými typy pak souvisí obecnější téma objektů, které už patří k pokročilejším a zde pokrýváme jen úplné základy.

Přehled typů

Základní datové typy v Pythonu jsou:

Typ Popis Příklady hodnot
int celá čísla 1, 42, -5, 200
float reálná čísla (přesněji čísla v plovoucí desetinné čárce, přičemž Python používá desetinnou tečku, nikoliv čárku) 2.5, 3.25, -12.37832
bool pravdivostní hodnoty True, False
str řetězce "prase", "pes"
list seznamy, což jsou uspořádané soubory hodnot [1, 3, 8, 2], ["koza", "ovce", "klokan"]
dict slovníky, což jsou neuspořádané dvojice klíč-hodnota (slovník mapuje klíče na hodnoty) {"a": 5, "b": 10}

Python nabízí i další typy, např. complex (komplexní čísla), tuple (entice, neměnitelná sekvence), set (množina).

Měnitelnost a neměnitelnost

Typy rozlišujeme podle toho, zda jejich hodnoty můžeme měnit:

  • měnitelné (mutable) typy jsou list, set, dict,
  • neměnitelné (immutable) typy jsou int, float, bool, str, tuple.

Toto rozlišení je důležité například při využití slovníků – slovníky můžeme indexovat pouze neměnitelnými typy.

Přetypování

Názvy typů jsou současně názvy vestavěných funkcí, které provedou přetypování. Typy proměnných jsou velice důležité. Ovlivňují například význam operátorů. Typický příklad je přetypování čísla na řetězec:

Zápis řetězců

Řetězce zapisujeme do uvozovek nebo apostrofů. V Pythonu 3 mohou řetězce obsahovat i znaky s diakritikou.

Indexování

K jednotlivým znakům řetězce přistupujeme pomocí indexování hranatými závorkami. Pozor, indexujeme od nuly. Python (na rozdíl od většiny jiných programovacích jazyků) umožňuje indexovat i od konce pomocí záporných čísel.

Pomocí dvojtečky můžeme indexovat podřetězec.

Pokročilejším prvkem pak je využití dvou dvojteček, kde třetí hodnota udává délku skoku:

Iterování přes řetězec

Jednotlivé znaky řetězce můžeme snadno procházet pomocí for cyklu.

Neměnitelnost řetězců

Řetězce jsou v Python neměnitelný datový typ. To je jeden z výrazných rysů, ve kterých se liší od seznamů. Neměnitelnost znamená, že nemůžeme změnit dílčí písmeno v znaku. Musíme vytvořit nový řetězec, ve kterém bude příslušné písmeno změněno.

Operace s řetězci

Řetězce můžeme sčítat (= zřetězit). Řetězce můžeme také násobit celým číslem (= opakovaně zřetězit). Mezi další užitečné operace patří zjištění délky (len) či test na přítomnost podřetězce (in).

Řetězce jsou objekty, které mají k dispozici řadu užitečných metod, které voláme pomocí tečkové notace. Příklady jsou převod na velká/malá písmena (upper, lower), rozdělení řetězce podle zadaného znaku (split), nebo nahrazování podřetězce (replace):

Všimněte si, že zde využíváme takzvanou tečkovou notaci: píšeme text.upper(), nikoliv běžné volání funkce tvaru upper(text). To souvisí s tím, že řetězce jsou reprezentovány jako objekty.

Operace se znaky

Při práci s řetězci se občas hodí i operace pro manipulaci s jednotlivými znaky, především funkce ord a chr, které převádí znaky na celá čísla a zpět:

  • ord(c) vrátí pořadové číslo znaku c,
  • chr(i) vrátí znak s pořadovým číslem i.

Pod „pořadové číslo“ se rozumí číslo v kódování Unicode. Pro základní programátorské úlohy stačí vědět, že písmena jsou v tomto kódování abecedně za sebou (bohužel to však platí jen pro písmena anglické abecedy). Takto tedy můžeme vypsat písmena anglické abecedy:

Seznam (list) je uspořádaná kolekce hodnot libovolného typu.

Vytvoření seznamu

Seznamy zapisujeme pomocí hranatých závorek:

Seznam můžeme také vytvořit pomocí klíčového slova list.

Indexování

K jednotlivým prvkům seznamu přistupujeme pomocí indexování hranatými závorkami. Pozor, indexujeme od nuly. Zápornými čísly můžeme indexovat odzadu:

Pomocí dvojtečky můžeme indexovat část seznamu:

Operace se seznamy

Užitečné funkce se seznamy:

Všimněte si, že zde využíváme takzvanou tečkovou notaci: píšeme s.sort(), nikoliv běžné volání funkce tvaru sort(s). To souvisí s tím, že seznamy jsou reprezentovány jako objekty.

Seznamy a for cyklus

Pomocí for cyklu můžeme procházet prvky seznamu:

Alternativně můžeme procházet prvky seznamu takto (tento zápis je bližší tomu, jak procházíme seznamy v jiných programovacích jazycích):

Slovník (dictionary, dict) udává mapování klíčů na hodnoty. Můžeme si třeba pamatovat počty kusů ovoce na skladě.

Vytvoření slovníku

Slovník vytváříme v Pythonu pomocí složených závorek.

Přístup k položkám

K položkám slovníku přistupujeme pomocí indexování hranatými závorkami. Podobně můžeme do slovníku položku přidat.

Pokud se pokusíme přistoupit k položce, která ve slovníku není, dostaneme chybu. Bezpečný přístup provedeme pomocí get:

Práce se slovníky

Další užitečné funkce pro práci se slovníky:

Python, stejně jako většina dalších moderních programovacích jazyků, podporuje objektově orientované programování. To už je poměrně pokročilé programátorské téma. Zde si shrneme jen některé základní pojmy.

Objekt (object) je kolekce dat (proměnných) a metod (funkcí), které s těmito daty pracují. V Pythonu jsou téměř všechna data, se kterými se setkáme, objekty (čísla, řetězce, seznamy, …).

Objekty jsou speciální instance tříd (class). Třídu můžeme chápat jako obecný vzor, podle kterého se tvoří objekty.

Příklad definice třídy:

A takto vytvoříme objekty (instance třídy) a použijeme je:

V tomto příkladě:

  • Person je třída,
  • homer a bart jsou objekty,
  • name a age jsou datové atributy,
  • introduce() je metoda,
  • __init__ je inicializační metoda, která se automaticky volá při vytváření objektu.
NAPIŠTE NÁM

Děkujeme za vaši zprávu, byla úspěšně odeslána.

Napište nám

Nevíte si rady?

Nejprve se prosím podívejte na časté dotazy:

Čeho se zpráva týká?

Vzkaz Obsah Ovládání Přihlášení Licence