Späť na hlavnú stránku

Údajové typy v Pythone

Python ponúka niekoľko základných údajových typov, ktoré nám umožňujú pracovať s rôznymi druhmi dát. Okrem čísel (int, float) existují aj ďalšie dôležité typy: reťazce (str), zoznamy (list) a n-tice (tuple). Každý typ má svoje špecifické vlastnosti a metódy.

Reťazce (str) - práca s textom

Reťazce predstavujú text v Pythone. Môžeme ich vytvoriť pomocou jednoduchých alebo dvojitých úvodzoviek. Napr. meno = 'J.Bond-agent007', alebo veta = "I'm happy!". Python poskytuje veľa užitočných metód na prácu s reťazcami.

meno = "Anna"
priezvisko = 'Nováková'
veta = "Vitaj v Pythone!"

# Spájanie reťazcov = konkatenácia
cele_meno = meno + " " + priezvisko
print(cele_meno)     # vypíše: Anna Nováková

# Násobenie reťazca číslom
viac = meno * 3
print(viac)     # vypíše: AnnaAnnaAnna

Základné informácie o reťazci:

Príkaz na zistenie počtu znakov v reťazci: len(retazec), vracia nezáporné celé číslo. Napríklad:
text = "moje slovo"
pocet = len(text)      # v premennej pocet bude 10, aj medzera je znak
print(text,pocet)      # vypíše: moje slovo 10

Vieme pristupovať k jednotlivým znakom reťazca. Napríklad:
veta = "Učím sa Python!"
print(veta[0])      # vypíše prvý znak vo vete, t.j. U
print(veta[4])      # vypíše piaty znak vo vete, t.j. medzeru
print(veta[-1])      # vypíše prvý znak odzadu, t.j. !
print(veta[-3])      # vypíše tretí znak odzadu, t.j. o

Vieme zobraziť aj časť reťazca. Napríklad:
slovo = "poľnohospodárstvo"
print(slovo[5:13])      # vypíše od šiesteho znaku osem znakov, t.j. hospodár
print(slovo[5:])      # vypíše od šiesteho znaku až po koniec, t.j. hospodárstvo
print(slovo[:3])      # vypíše od začiatku prvé tri znaky, t.j. poľ

Metódy pre prácu s reťazcami

Pre prácu s reťazcami môžeme použiť rôzne metódy, vždy sa musí uviesť s ktorým reťazcom chceme niečo urobiť, za názvom reťazca treba napísať bodku a za tým názov metódy a zátvorky (niektoré metódy požadujú do zátvorky uviesť parametre metódy). Viď zoznam metód v tabuľke.

Metóda Popis Príklad
.upper() Zmení na veľké písmená "ahoj".upper() → "AHOJ"
.lower() Zmení na malé písmená "AHOJ".lower() → "ahoj"
.title() Každé slovo začne veľkým písmeno, zvyšné budú malým "adAM dRAk".title() → Adam Drak
.strip() Odstráni medzery na začiatku a konci reťazca " Dobré ráno ".strip() → "Dobré ráno"
.find(čo) Nájde pozíciu podreťazca "ahoj".find("ho") → 1
.replace(čo, čím) Nahradí časť reťazca "dovidenia".replace("i", "I") → "dovIdenIa"
.split(oddelovač) Rozdelí reťazec na zoznam "a,b,c".split(",") → ["a", "b", "c"]

Každá metóda vracia požadovaný výstup, avšak pôvodný reťazec sa použitím metódy nezmení, nakoľko ide o nemeniteľný typ (immutable). Takto získanú hodnotu si však môžeme niekam uložiť. V prípade, ak chceme pôvodný reťazec zmeniť, tak ho uložíme do tej istej premennej (tak ho vlastne prepíšeme).

slovo = "Python"
velke = slovo.upper()
print(slovo,velke)     # vypíše: Python PYTHON

veta = "Učím sa programovať!"
veta = veta.replace(" programovať!","?")
print(veta)     # vypíše: Učím sa?

Zoznamy (list) - kolekcie prvkov

Zoznamy sú jedným z najdôležitejších údajových typov v Pythone. Umožňujú nám uchovávať viacero hodnôt v jednej premennej. Zoznamy sú meniteľné (mutable) - môžeme pridávať, odstraňovať a meniť ich prvky. Príklady zoznamov: ovocie = ["jablko", "banán", "pomaranč"], alebo cisla = [1, 5, 3, 9, 2], alebo aj zoznam s prvkami rôzneho typu: zmiesany = ["text", 42, 3.14, True].

Základné informácie o prvkoch zoznamu:

Príkaz na zistenie počtu prvkov v zozname: len(zoznam), vracia nezáporné celé číslo. Napríklad:
ovocie = ["jablko", "banán", "pomaranč"]
pocet = len(ovocie)      # v premennej pocet bude 3

Vieme pristupovať k jednotlivým prvkom zoznamu. Napríklad:
ovocie = ["jablko", "banán", "pomaranč", "kiwi"] print(ovocie[0])      # vypíše prvý prvok zo zoznamu, t.j. "jablko"
print(ovocie[2])      # vypíše tretí prvok zo zoznamu, t.j. "pomaranč"
print(ovocie[-1])      # vypíše posledný prvok zo zoznamu, t.j. "kiwi"
print(ovocie[4])      # skončí chybou - neexistuje piaty prvok v zozname

Vieme pristúpiť aj k časti zoznamu, hovoríme o tzv. rezoch zoznamu. Napríklad:
ovocie = ["jablko", "banán", "pomaranč", "kiwi", "hruška"]
print(ovocieo[0:2])      # vypíše počnúc prvým dva prvky t.j. ["jablko","banán"]
print(ovocieo[:3])      # vypíše počnúc prvým tri prvky t.j. ["jablko","banán","pomaranč"]
print(ovocie[2:])      # vypíše od tretieho až po posledný prvok, t.j. ["pomaranč", "kiwi", "hruška"]

Metódy pre zoznamy

Pre prácu so zoznamami môžeme použiť rôzne metódy, vždy sa musí uviesť s ktorým zoznamom chceme niečo urobiť, zatým napísať bodku a za tým názov metódy a zátvorky (niektoré metódy požadujú do zátvorky uviesť parametre metódy). Viď zoznam metód v tabuľke.

Metóda Popis Príklad
.append(prvok) Pridá prvok na koniec zoznamu zoznam=['a','b','c']
zoznam.append('nový') → ['a','b','c','nový']
.insert(index, prvok) Vloží prvok na určitú pozíciu zoznam=['a','b','c']
zoznam.insert(1, 'tu') → ['a','tu','b','c']
.remove(prvok) Odstráni prvý výskyt prvku zoznam=['a','b','c','b']
zoznam.remove("b") → ['a','c','b']
.count(prvok) Spočíta výskyty prvku zoznam=['a','b','c','b']
pocet = zoznam.count('b') → pocet je 2
.index(prvok) Vráti index prvého výskytu zoznam=['a','b','c','b']
pozicia = zoznam.index('b') → pozicia je 1
.sort() Zoradí prvky zoznamu od najmenšieho / podľa abecedy cisla=[3,5,1,4]
cisla.sort()→ [1,3,4,5]
slova=['cíp','buk','bod']
slova.sort()→ ['bod','buk','cíp']
.reverse() Obráti poradie prvkov zoznam=['a','b','c','b']
zoznam.reverse() → ['b','c','b','a']

Každá metóda na zozname mení priamo pôvodný zoznam.

POZOR: Ak vytovríme kópiu zoznamu priamo príkazom kopia = zoznam, všetko čo rôznymi metódami zmeníme v pôvodnom zozname, zmení sa aj na kópii.
Ak si chceme urobiť kópiu zoznamu tak, aby sme prvky originálu nemenili, musíme to urobiť pomocou rezov: kopia = zoznam[:] (t.j. vytvoríme úplne nový zoznam kopia, kde sa vložia prvky zo zoznamu kopia od prvého prvku až po posledný). V tomto prípade, ak urobíme zmenu v jednom zozname, ten druhý to neovplyvní.

Spracovanie mien žiakov

# Simulácia vstupu od používateľa
ziaci_vstup = " anna novakova, PETER KOVAC,lucia kratka "
print("Pôvodné dáta:")
print(ziaci_vstup)
zoznam = ziaci_vstup.split(",")
print("Zoznam žiakov:")
print(zoznam)
for i in range(len(zoznam)):
    novy = zoznam[i].strip()
    novy = novy.title()
    zoznam[i] = novy
print("Zoznam po úprave:")
print(zoznam)

novy = input("Zadaj meno nového žiaka: ")
novy = novy.strip()
zoznam.append(novy.title())
print("Zoznam po úprave:")
print(zoznam)

Výstup:

Pôvodné dáta:
anna novakova, PETER KOVAC,lucia kratka
Zoznam žiakov:
[' anna novakova', ' PETER KOVAC', 'lucia kratka ']
Zoznam po úprave:
['Anna Novakova', 'Peter Kovac', 'Lucia Kratka']
Zadaj meno nového žiaka: aLICa quEEn
Zoznam po úprave:
['Anna Novakova', 'Peter Kovac', 'Lucia Kratka', 'Alica Queen']

N-tice (tuple) - nemeniteľné kolekcie

N-tice sú podobné zoznamom, ale sú nemeniteľné (immutable). Raz vytvorené, nemôžeme ich zmeniť. Používajú sa pre dáta, ktoré sa nemenia, ako sú súradnice, farby RGB alebo osobné údaje.

bod = (10, 20)
farba = (255, 128, 0)     # RGB farba
osoba = ("Ján", "Novák", 25)
font = ('Arial',12,'b')

Geografia - súradnice miest

# zoznam miest ... ako n-tice so súradnicami: (mesto, zemepisná_šírka, zemepisná_dĺžka)

mesta = [ ("Bratislava", 48.1486, 17.1077), ("Košice", 48.7164, 21.2611), ("Prešov", 48.9984, 21.2393), ("Žilina", 49.2233, 18.7398), ("Banská Bystrica", 48.7362, 19.1470) ]

def vypis_info_o_meste(mesto_data):
    mesto, sirka, dlzka = mesto_data
    print(f'Mesto: {mesto}')
    print(f'Súradnice: {sirka:.4f}°S, {dlzka:.4f}°V')
    # Určenie oblasti Slovenska
    if dlzka < 19:
         oblast = "západné Slovensko"
    elif dlzka < 21:
        oblast = "stredné Slovensko"
    else:
        oblast = "východné Slovensko"
    print(f'Oblasť: {oblast}')
    print("-" * 30)

print("=== SLOVENSKÉ MESTÁ ===")
for m in mesta:
    vypis_info_o_meste(m)

Výstup:

=== SLOVENSKÉ MESTÁ ===
Mesto: Bratislava
Súradnice: 48.1486°S, 17.1077°V
Oblasť: západné Slovensko
------------------------------
Mesto: Košice
Súradnice: 48.7164°S, 21.2611°V
Oblasť: východné Slovensko
------------------------------
Mesto: Prešov
Súradnice: 48.9984°S, 21.2393°V
Oblasť: východné Slovensko
------------------------------
Mesto: Žilina
Súradnice: 49.2233°S, 18.7398°V
Oblasť: západné Slovensko
------------------------------

Úlohy na vlastnú prácu

Úloha 1: Analýza URL adresy obrázka

Vytvorte program, ktorý od užívateľa načíta URL adresu obrázka (napr. https://gymmoldava.sk/fll/obr.png) a program následne skontroluje, či ide o platnú URL adresu s obrázkom typu .png alebo .jpg. Takáto adresa musí začínať reťazcom "https://", obsahuje minimálne 3 znaky "/" a končí na ".png" alebo ".jpg".

Pomôcka:
Použite vhodné metódy na prácu s reťazcom.

Úloha 2: Obľúbené filmy

Vytvorte prázdny zoznam a následne doňho pridávajte filmy, ktoré postupne zadá užívateľ. Pre ukončenie zadávania má užívateľ zadať znak *. Tento zoznam filmov vypíšte a potom ešte nakoniec vypíšte zoznam filmov abecedne zoradený, každý film nech je vždy na novom riadku.

Pomôcka:
filmy = []
vstup = input("Zadaj názov filmu: ")
filmy.append(vstup)

Overenie vedomostí

Test - Ďalšie údajové typy v Pythone

1. Ktorá metóda správne zmení reťazec na veľké písmená?

a) text.upper()
b) text.uppercase()
c) text.big()
d) upper(text)

2. Čo vráti tento kód?
text = "Python"
print(text[1:4])

a) "Pyt"
b) "yth"
c) "ytho"
d) "ython"

3. Ktorá metóda pridá nový prvok na koniec zoznamu?

a) zoznam.add()
b) zoznam.append()
c) zoznam.insert()
d) zoznam.push()

4. Čím sa líši tuple od list ?

a) tuple môže obsahovať iba čísla
b) žiadny rozdiel
c) tuple je rýchlejší
d) tuple je nemeniteľný

5. Ktorý príkaz správne rozdelí reťazec na zoznam slov?

a) "ahoj svet".split(' ')
b) "ahoj svet".divide()
c) "ahoj svet".separate()
d) split("ahoj svet")

6. Ako vytvoríte prázdnu n-ticu (tuple)?

a) tuple = [ ]
b) tuple = ( )
c) tuple = { }
d) tuple = tuple()

7. Ktorá metóda vráti pozíciu prvého výskytu prvku v zozname?

a) zoznam.find(prvok)
b) zoznam.search(prvok)
c) zoznam.index(prvok)
d) zoznam.position(prvok)

8. Ako získate posledný prvok zoznamu data?

a) data[-1]
b) data[len(data)]
c) data[0]
d) data.last()

9. Ktorá metóda reťazca text prevedie všetky prvé písmená každého slova na veľké písmená?

a) text.upper()
b) text.lower()
c) text.title()
d) text.capitalize()

10. Ktorý príkaz vyberie prvé tri prvky zoznamu cisla?

a) cisla[1:3]
b) cisla[3:-1]
c) cisla[0:2]
d) cisla[0:3]


Späť na hlavnú stránku