Dátové typy¶
Python rozlišuje ako základné typy Boolovské hodnoty, čísla (celé a desatinné) a reťazce. Ak chcete definovať premennú s prázdnou hodnotou, môžete ako hodnotu zadať konštantu None
.
empty = None
Boolovské hodnoty¶
Boolovské hodnoty True
a False
sa používajú hlavne na testovanie a môžete ich kombinovať spojkami or
, and
alebo not
.
not (10 < 20 and 30 > 20) # = False
# okrem <, > môžete používať napr. porovnania <=, >=, == (má rovnakú hodnotu), != (nemá rovnakú hodnotu)
Dávajte si pozor na rozdiel medzi zápisom =
pre priradenie hodnoty premenne a ==
pre porovnanie. Prázdnu hodnotu môžete otestovať operátorom is
(resp. is not
), ktorá porovnáva typ objektov (nie ich hodnotu), napr.:
answer = False
answer is not None # = True
Čísla¶
S číslami môžete používať bežné operácie +
-
*
/
.
(50 - 5.0 * 6) / 4 # = 5.0
# Python 2 zachová pri delení celých čísel iba celú časť (Python 3 vypočíta desatinný výsledok)
17 / 3 # = 5 pre Python 2
# ak je aspoň jedno číslo desatinné, vypočíta sa desatinný výsledok
17 / 3.0 # = 5.666666666666667 - pre kompatibilitu pridajte .0 aj pre celé čísla
17 // 3.0 # = 5.0 - // vypočíta iba celú časť delenia aj pre desatinné čísla
17 % 3 # = 2 - % vypočíta celočíselný zvyšok po delení
3 ** 2 # = 9 - ** vypočíta mocninu
9 ** 0.5 # = 3.0 - ** môžete použiť aj na výpočet odmocniny
Nekonečno a -nekonečno môžete zapísať funkciou float("inf")
a float("-inf")
.
float("-inf") < -999999 # = True
Reťazce¶
Reťazce môžete zadávať do jednoduchých apostrofov alebo úvodzoviek. Ohraničujúce znaky ' a " môžete do reťazca vložiť cez postupnosť \'
resp. \"
ak je reťazec ohraničený úvodzovkami. Podobne môžete do reťazca vložiť znak pre nový riadok \n
, tabulátor \t
alebo samotný znak \ ako \\
. V Interpretereri sa reťazce zobrazia tak ako ich zapíšete aj s úvodnými apostrofmi, na výpis hodnôt preto používajte funkciu print([reťazec])
.
s = '"Isn\'t," she said.'
s
print(s)
# môžete definovať aj prázdny reťazec
s = ""
# reťazce ohraničené úvodzovkami alebo apostrofmi musia byť zapísané na jednom riadku
# ak chcete zadať viacriadkový reťazec bez zápisu \n, môžete reťazec ohraničiť troma úvodzovkami
s = """first line
second line"""
# reťazce môžete spájať cez + alebo opakovať cez *
s = "Py"
print(s + "thon is c" + 3*"oo" + "l") # = Python is cooooool
Takmer všetky objekty a hodnoty viete previesť na reťazec funkciou str([hodnota])
.
print("Py" + str(123) + str(True)) # = Py123True
Reťazec môžete previesť na celé číslo funkciou int([reťazec])
a na desatinné float([reťazec])
. Ak sa reťazec nedá previesť na číslo, príkaz skončí chybou ValueError
.
(1 + int("1")) / float("2.0") # = 1.0
K jednotlivým znakom reťazca môžete pristupovať cez zápis reťazec[index]
.
s = "Python"
print(s[1]) # = y - indexovanie je od 0
print(s[-3]) # = h - záporné indexy počítajú znaky od posledného, t.j, -1, posledný znak, -2 predposledný atď.
Podreťazce môžete zadať ako rozsah znakov [od:do]
(vyberú sa znaky vrátane indexu od, bez do).
s[2:5] # vypíše ‘tho’ - podreťazec od 3 znaku do 5 (vrátane, indexovanie je od 0)
s[:5] # vypíše ‘Pytho’ – podreťazec od začiatku po 5 znak (vrátane, indexovanie je od 0)
s[-2:] # vypíše ‘on’ – podreťazec od predposledného znaku do konca
Ak sa pokúsite pristupovať ku znakom mimo rozsahu, príkaz skončí chybou IndexError: string index out of range
. Reťazce sú v Pythone nemenné, takže napr. nemôžete zmeniť 2 znak zápisom s[1] = 'i'
. Dĺžku reťazca vráti funkcia len(s)
.
len(s) # = 6 (s = 'Python')
Samotné reťazce sú objekty, ktoré majú definované rôzne metódy slúžiace na transformáciu znakov, vyhľadávanie podreťazcov, rozdeľovanie a pod. Všetky metódy vracajú nový reťazec a pôvodný reťazec zostane nezmenený. Nasledujúca tabuľka uvádza prehľad niektorých metód.
Príkaz | Popis |
---|---|
s.lower() |
Prevedie všetky písmená reťazca na malé. |
s.upper() |
Prevedie všetky písmená reťazca na veľké. |
s.strip() |
Odstráni zo začiatku a konca reťazca prázdne znaky (medzery, tabulátory a znaky konca riadka). |
s.find(sub) |
Vráti index prvého výskytu podreťazca sub , alebo -1 ak sa sub v reťazci nevyskytuje. Voliteľne môžete zadať počiatočný index od ktorého sa začne reťazec prehľadávať s.find(sub, start) , alebo rozsah indexov v ktorom sa musí nachádzať celý podreťazec s.find(sub, start, end) . |
s.replace(old, new) |
Nahradí v reťazci všetky výskyty reťazca old za new . |
s.startswith(preffix) |
Vráti True ak reťazec začína zadaným prefixom, inak vráti False . |
s.endswith(suffix) |
Vráti True ak reťazec končí zadaným sufixom, inak vráti False . |
s.split(sep) |
Rozdelí reťazec podľa zadaného oddeľovača sep a vráti zoznam rozdelených podreťazcov (pozri ďalšiu kapitolu o zoznamoch). Ak sa parameter sep vynechá, s.split() rozdelí reťazec podľa prázdnych znakov. |
s.join(args) |
Prevedie prvky zoznamu alebo n-tice args na reťazec a spojí ich oddeľovačom s (pozri ďalšiu kapitolu o zoznamoch). |
# volanie viacerých metód môžete zreťaziť
print(" Python \t".strip().upper().replace("PY", "py")) # = pyTHON
# pri vyhľadávaní podreťazcov môžete zadať aj rozsah s negatívnymi indexami
"one two one".find("one", -5) # = 8 - index druhého výskytu, vyhľadávaný text musí byť medzi poslednými 5 znakmi
Formátovanie správ¶
Pre formátovanie správ, ktoré zobrazujú rôzne typy hodnôt je výhodné použiť metódu s.format(arg0, arg1, arg2, ...)
ktorá prevedie hodnoty argumentov na reťazce a nahradí nimi v reťazci s
formátovacie polia ohraničené {}
. V nasledujúcom príklade sa v reťazci "Hello {0}..."
nahradí formátovacie pole {0}
za reťazec "world"
, ktorý sme predali priamo pri volaní metódy format
ako prvý parameter.
print("Hello {0}...".format("world")) #= Hello world...
Viac informácií o formátovaní nájdete v nasledujúcom príklade, alebo tu (v angličtine).
# polia môžete použiť na odsadzovanie textu medzerami nasledujúcim zápisom:
print("{0:>20}".format("right text")) # pridané nastavenie :>20 odsadí text medzerami doprava tak aby mal celkovo 20 znakov
# podobne zápis :<n doplní medzery za text tak aby mal celkovo n znakov (odsadenie doľava)
print("{0:<20}{1}".format("left", "text")) # vo formátovacom reťazci sme definovali dve polia, do prvého sa sformátuje hodnota "left" a do druhého "text"
# text môžete aj vycentrovať
print("{0:^30}".format("center")) # riadok je celkovo široký 30 znakov
# na miesto medzery môžete definovať vlastný znak pre doplnenie za : (to platí aj pre zarovnávanie doprava a doľava)
print("{0:*^30}".format("center")) # doplníme text znakom * namiesto medzery
# celé čísla môžete zapísať v desiatkovej, hexadecimálnej, osmičkovej alebo binárnej reprezentácii
print("{0:d}, hex: {0:x}, oct: {0:o}, bin: {0:b}".format(42)) # = ‘42, hex: 2a, oct: 52, bin: 101010’
# pri desatinných číslach môžete definovať koľko desatinných miest za čiarkou sa má vypísať
print("{0:.3f}".format(3.141592654)) # vypíše iba ‘3.142’ (5 sa zaokrúhľuje smerom hore)
Podrobnejší popis ďalších metód pre reťazce nájdete tu (v angličtine).