Python

Site: Virtuálna Univerzita Mateja Bela
Cours: BBC micro:bit (bloky)
Livre: Python
Imprimé par: Hosťovský používateľ
Date: lundi 20 mai 2024, 06:31

1. Vývojárske prostredie (IDE)

Využiteľné IDE pre programovanie v jazyku Python.

Visual Studio Code

Vývojárske prostredie od spoločnosti Microsoft. S oficiálnym rozšírením s názvom Python (viac ako 22 miliónov stiahnutí) je programovanie v tomto jazyku veľmi jednoduché. Obsahuje množstvo vyladených nástrojov - debugger, refactoring, formátovanie kódu, testy atď.

Inštalácia rozšírenia pre Python

V ľavej časti obrazovky sa nachádza ikona štvorcov (alebo ctrl+shift+x), kliknutím sa zobrazí možnosť pridať rozšírenie. Vyhľadáme si Python a zvolíme našu voľbu. Následne necháme rozšírenie inštalovať. 


Vytvorenie nového programu

Nový program si vytvoríme cez File-New File alebo ikony pridania nového súboru, ktorý si pomenujeme aj s príponou .py. 

Vytvorenie programu

Po vytvorení súboru, si vyberieme interpreter (vľavo dole) - v našom prípade to je Python verzia 3.8.0. Po napísaní programu si ho spustíme zelenou ikonou "play" vpravo hore. Ak máme výsledok vo forme výpisov, uvidíme ich v dolnej časti obrazovky v termináli. 

Spustenie programu


JetBrains PyCharm (Community Edition/Professional)

Vytvorenie nového súboru v rámci projektu

File-New-PythonFile, ktorý si následne pomenujeme.

Nový súbor

Spustenie programu

Program spustíme cez horný panel Run-Run'program' alebo v pravej časti stlačením zeleného tlačidla "play".

Spustenie programu


IDLE

Veľmi jednoduchým editorom jazyku Python je IDLE (Python’s Integrated Development and Learning Environment). Inštaluje sa spolu s jazykom Python do počítača. 

IDLE

Horný panel obsahuje iba základné funkcionality. Nový súbor vytvoríme cez File-New File. Nie je tu mnoho užitočných funkcií ako v predošlých prostrediach. Program si spustíme cez Run-Run Module. 

IDLE run


2. Dátové typy

Každá premenná je určitým dátovým typom. V jazyku Python nie je nutné pri vytváraní premennej deklarovať aj jej typ ale možné to samozrejme je. Dátové typy je vhodné určiť kvôli tomu, aby sme kompileru dali vedieť, s akými dátami má pracovať aby nedošlo k chybám. Samozrejme aj nám, programátorom, uľahčuje prácu presná informácia, s čím pracujeme. 

Boleánsky typ (boolean)

  • tento dátový typ môže mať len dve možnosti – True alebo False
  • používame ich napríklad pri logických operátoroch

pravda = bool(True) # Určenie typu boolean
nepravda = False # Bez určenia typu - fungovať bude ako False
print(type(pravda)) # Vypísanie dátového typu:  <class 'bool'>

Čísla

  • Celé čísla (integers, skratka int) – dátový typ celých čísel, ktorý teoreticky nemá limit na dĺžku hodnoty (limitom bude vždy systém, v ktorom sa pracuje). Celé čísla môžeme zapisovať v rôznych číselných sústavách: 
binárna sústava (dvojková) – pred čísla dávame predponu 0b (0B) – print(0b15)

bin1 = bin(43)
bin2 = 0b10110110
bin3 = 14
print('bin1 =', bin1, 'bin2 =', bin2, 'bin3 =', bin(bin3)[2:]) # bin1 = 0b101011 bin2 = 182 bin3 = 1110


decimálna sústava (desiatková) – print(15)
dec1 = 18
dec2 = int(67)
print('dec1 =', dec1, 'dec2 =', dec2) # dec1 = 18 dec2 = 67
print(type(dec1)) # <class 'int'>

oktálna sústava (osmičková) – pred čísla dávame predponu 0o (0O) – print(0o15)
okt1 = 0o24
okt2 = 24
okt3 = oct(10)
print('okt1 =', okt1, 'okt2 =', oct(okt2), 'okt3 =', okt3) # okt1 = 20 okt2 = 0o30 okt3 = 0o12

hexadecimálna sústava (šestnástková) – pred čísla dávame predponu 0x (0X) – print(0x15)
hex1 = 0x142
hex2 = 16
hex3 = hex(32)
print('hex1 =', hex1, 'hex2 =', hex2, 'hex3 =', hex3) # hex1 = 322 hex2 = 16 hex3 = 0x20

  • Desatinné čísla (floatI) – desatinné čísla sa píšu s bodkou

flt1 = 24.8
flt2 = float(18 / 4)
flt3 = 5.476e9
print('flt1 =', flt1, 'flt2 =', flt2, 'flt3 =', flt3) # flt1 = 24.8 flt2 = 4.5 flt3 = 5476000000.0

  • Komplexné čísla  (complex) – komplexné čísla sa skladajú s reálnej časti a imaginárnej (15j)

cmp1 = 4j
cmp2 = 7 + 4j
cmp3 = cmp1 + cmp2
print('cmp1 =', cmp1, 'cmp2 =', cmp2, 'cmp3 =', cmp3) # cmp1 = 4j cmp2 = (7+4j) cmp3 = (7+8j)


Reťazce (string) – určitý rad znakov, príkladom použitia je print("Miesto dvojitých úvodzoviek môžeme použiť jednoduché úvodzovky")

uvodnyText = str("Vitajte na našom webe")
print(type(uvodnyText)) # <class 'str'>

Zoznam (list) – určitý zoznam, napríklad mien - list(("Matej", "Gabriel", "Zuzana"))

zoznam = list(("Matej", "Gabriel", "Zuzana"))
print(type(zoznam)) # <class 'list'>

N-tice (tuple)

  • podobne ako pri reťazcoch, obsahuje znaky, v tomto prípade sa tu môžu nachádzať aj hodnoty
  • uchovávajú napríklad informácie o charaktere v počítačovej hre –meno hráča, úroveň, množstvo peňazí, počet ocenení a trieda - hrac = tuple(("Apolonius", "44", "14.547", "12", "Farmári"))
  • k uloženým informáciám pristupujeme napríklad print(tuple[0]) kde sa v tomto prípade vypíše len meno hráča

hrac = tuple(("Apolonius", "44", "14.547", "12", "Farmári"))
print(hrac[0]) # Vypíšeme meno hráča, ktoré sa nachádza na pozícií 0
print(type(hrac)) # <class 'tuple'>

Slovník (dictionary)

  • slovník je podobný n-ticiam, len v tomto prípade sa označuje, ktorá hodnota čo znamená
  • použiť ho môžeme napríklad pri zozname žiakov a ich veku: ziaci= {"Adam": "12", "Adela": "11", "Martin": "12"}
  • k dátam pristupujeme napríklad print(ziaci.get("Adela")), v tomto prípade sa vypíše vek Martina

ziaci= {"Adam": "12", "Adela": "11", "Martin": "12"} # Vytvorenie slovníka bez priradenia typu 
print(ziaci.get("Adela")) # Zobrazí vek Adely
print(type(ziaci)) # <class 'dict'>

Sety (set)

  • zbierka podobná ako zoznam, len bez poradia alebo indexovania
  • set = {"Nemocnica", "Škola", "Polícia", "74.14"}
  • výpis funguje ako print(set) kde v každom novom behu programu bude zoznam v inom poradí

set = {"Nemocnica", "Škola", "Polícia", "74.14"} # Vytvorenie setu bez určenia typu
print(set) # Zobrazenie stále v inom poradí
print(type(set)) # <class 'set'>

3. Premenné

O premenným môžeme hovoriť ako o rezervovaní miesta v pamäti na ukladanie hodnôt. Do premennej sa dajú ukladať rôzne dátové typy. V jazyku Python ich nie je potrebné pred používaním deklarovať, deje sa to automaticky pri priradení hodnoty k premennej. Každá premenná je v jazyku Python totiž objektom. Môžeme ich definovať ako miesto v pamäti k uloženiu určitej hodnoty. 

Deklarovaním premennej určíme jej názov a dátový typ (platí pre iné jazyky). Takejto premennej sa vyhradí miesto v pamäti spolu s hodnotou, ak ju určíme. 

Hodnoty sa pripisujú pomocou „=“, kde na ľavej strane sa nachádza názov premennej, napravo hodnota. Názov premennej má určité pravidlá:

Nesmie začínať číslom, jedine písmenom alebo „_“

osX, _osY - správne

24osX, 0vysledok0 - nesprávne

V názve sa môžu nachádzať len čísla, písmená a „_“

dotyk_pin0 - správne

dotyk.pin0 - nesprávne

Premenné sú citlivé na veľké/malé písmená

V skratke to znamená, že ak je premenná napísaná správne, každým rozdielom v premenných vzniká ďalšia - Strana_A, strana_A, strana_a - tri rôzne premenné.


Príkazom print(x) jednoducho vypíšeme hodnotu uloženú v premennej x. Pri zlučovaní dvoch premenných platí pravidlo, že nie je možné zlúčiť dve premenné rôznych typov bez deklarovania ich typu. Príklad:

print("string" + 14)  # Nastane chyba
# Správne použitie
var = "string "
num = 14
print(var + str(num))


4. Operácie

Operácie využívajú operandy a operátory. Operandami sú premenné/čísla a operátormi znamienka, napríklad + alebo -. Na vykonávanie operácií používame operátory. Poznáme napríklad:

Aritmetické

+ - * /, ale aj modul %, exponent ** a delenie bez zvyšku //

a, b = 6, 3
c = a + b
print("a + b =", c) # 9
c = a - b
print('a - b =', c) # 3
c = a * b
print('a * b =', c) # 18
c = a / b
print('a / b =', c) # 2.0
a, b = 17, 9
c = a % b
print('a % b =', c) # 8
c = a**2 + b**2
print('a**2 + b**2 =', c) # 370
c = a // b
print('a // b =', c) # 1

 

Logické

AND a OR

if a < b and b > 3:
    print('b je väčšie ako a, zároveň je b väčšie ako 3')
elif a > b or a == 6:
    print('a je väčšie ako b, zároveň a sa a rovná 6')

 

Bitové

používajú sa na bitové operácie – and(&), or(|), xor(^), komplement(~), binárny posun vľavo(<<) a vpravo(>>)

x = 10  # 1010
y = 14  # 1110
# and(&) - 1 ak bude na bitovom mieste oboch premenných 1
z = x & y
print('x & y =', bin(z)[2:])
# or(|) - 1 ak na bitovom mieste je aspoň jedna hodnota 1
z = x | y
print('x | y =', bin(z)[2:])
# xor(^) - 1 ak bude na bitovom mieste presne jedenkrát 1
z = x ^ y
print('x ^ y =', bin(z)[2:])
# komplement(~) - prevod každej 1 na 0 a opačne
z = ~x
print('~x =', bin(z))
# binárny posun vľavo(<<) - posun bitov o určitý počet miest vľavo (číslo sa zväčší)
z = x << 2
print('x << 2 =', bin(z)[2:])
# vpravo(>>) - posun bitov o určitý počet miest vpravo (číslo sa zmenší)
z = x >> 2
print('x >> 2 = ', bin(z)[2:])

 

Porovnávacie

rovná sa(==), nerovná sa(!= a <>), väčší(>), menší(<), väčší rovný(>=), menší rovný(<=)

x, y, z = 24, 17, 14
if x == y:
    print('x je rovné y')
if x != z:
    print('x je rozdielne od z')
if x > z:
    print('x je väčšie ako z')
if x < y:
    print('x je menšie ako y')
if z >= y:
    print('z je väčšie alebo rovné y')
elif z <= y:
    print('z je menšie alebo rovné y')

Identifikačné

porovnáva objekty, či sú rovnaké – is a is not

a = 15
b = a
if a is b:
    print('a = b')
if a is not b:
    print('a sa nerovná b')

 

Členské

testujú, či sa premenná nachádza v inej – in a not in

zoznam = ['Andrej', 'Martin', 'Igor', 'Dávid', 'Ondrej']
hladanyA = 'Martin'
hladanyB = 'Arnold'
if hladanyA in zoznam:
    print('Našla sa zhoda')
else:
    print('Nenašla sa zhoda')
if hladanyB not in zoznam:
    print('Hľadaný sa v zozname nenachádza')
else:
    print('Hľadaný sa v zozname nachádza')

Priraďovacie

priraďujú hodnotu do premennej (=) alebo sčítajú(+=), odčítajú(-=), vynásobia(*=), vydelia(/=), použijú modulus(%=), exponent(**=) alebo sa vydelí bez zvyšku(//=) a hodnota sa súčasne pridelí do premennej

premenna = 0
premenna += 1
print('premenna += 1 =', premenna) # 1
premenna -= 2
print('premenna -= 2 =', premenna) # -1
premenna *= 3
print('premenna *= 3 =', premenna) # -3
premenna /= 2
print('premenna /= 2 =', premenna) # -1.5
premenna **= 2
print('premenna **= 2 =', premenna) # 2.25
premenna //= 4
print('premenna //= 4 =', premenna) # 0.0

5. Podmienky

Rozhodovacím procesom môžeme rozumieť zhodnotenie podmienok a následne vykonanie opatrení, ktoré sa vykonajú pri určitej podmienke. Rozhodovacie štruktúry hodnotia viacnásobné výrazy, ktorých výsledkom je TRUE alebo FALSE. Určujú sa kroky, ktoré budú podniknuté v prípade TRUE alebo FALSE. Python vo všeobecnosti predpokladá, že každá hodnota, ktorá nie je 0 a NULL, je TRUE. 

Typy rozhodovacích procesov:

  • If
  • Else
  • Vnorené výrazy – v rámci jedného určenia podmienky, môžeme použiť viackrát if/else alebo elif

x = 10
y = 3
# Jednoduchý príklad na if
if x > y:
print("x je väčšie ako y")

# Else používame ak chceme, aby sa vykonal určitý proces, ak naša podmienka nebola splnená
if x > y:
print("x je väčšie ako y")
else:
print("x je menšie ako y")

# Príklad na vnorenú funkciu
if x > y:
print("x je väčšie ako y")
elif x == y:
print("x sa rovná y")
else:
print("x nie je väčšie ani rovné y")


6. Cykly

Cykly sa opakujú do momentu, kedy bude splnená určitá podmienka, prípadne nejaká už nebude platná. Obyčajne for cyklus má určený presný počet iterácií, while funguje kým je splnená podmienka. Break môže prerušiť cyklus okamžite a continue sa presunie k nasledujúcej iterácii. Používajú sa hlavne na vykonávanie určitej činnosti viac ako jedenkrát - opakovane. 

Pre cykly/iterácie, prechádzanie cez rôzne dátové štruktúry (zoznam, string, čísla) využívame for. Napríklad pre výpis mien zo zoznamu

zoznam = ["Andrej Záborský", "Matej Bel", "Matúš Príkladný"]
for a in zoznam:
    print(a)  # Vypíšu sa všetky položky zo zoznamu

Vytvorila sa premenná a, ktorá sa použije na uloženie hodnoty zo zoznamu a následne na výpis až kým zoznam nebude prázdny. Pri každom výpise sa premenná prepíše na nasledujúcu hodnotu. Break môžeme použiť ak nájdeme hodnotu, ktorú sme hľadali alebo pre ukončenie cyklu. Continue je používané ak chceme určitú hodnotu vynechať napríklad z radu čísel.

for a in zoznam:
  print(a)
  if a == "Matej Bel":
    break  # V tomto prípade sa vypíše prvé a druhé meno, potom sa cyklus zruší

Pre prechádzanie hodnôt v presnom počte, používame funkciu range(). Ak nešpecifikujeme inak, začína od 0 a rastie o 1. Pre určenie spodnej hranice sa vloží argument:

for a in range(2, 10):
  print(a)  # Výpis čísiel od 2 do 9
if a == 9:
  print("Všetky čísla boli vypísané úspešne.")

Tretím paramentrom sa určuje aká hodnota sa bude pripočítavať.

Miesto for sa môže použiť while. Iteruje pokiaľ je podmienka splnená:

i = 0
while i < 12:
  print(i)
  i += 1 # i bude rásť o 1 pri každom prechode cyklu, vypíšu sa čísla od 0 do 11

Enumerate používame v prípade, ak chceme vypísať zoznam spolu s pozíciou.

for x, y in enumerate (zoznam):
    print (x, y) # 0 Andrej Záborský 1 Matej Bel 2 Matúš Príkladný

7. Funkcie

Funkciami si môžeme rozdeliť svoj kód na menšie bloky, ktoré sa budú vykonávať keď ich zavoláme. Taktiež funkcie uľahčujú prácu tým, že ich môžeme použiť ľubovoľný počet krát. Program tvorený funkciami je oveľa prehľadnejší ako bez nich, taktiež je takmer nemožné vytvárať väčšie projekty bez nich. Pri vytváraní funkcie musí byť vždy prvým slovom def  nasledované názvom funkcie a zátvorkami, po ktorých nasleduje dvojbodka. Názov funkcie sa riadi pravidlami ako premenné, nemôžeme ich pomenovať rôznymi znakmi, nemôžu začínať číslami. Použiteľnými sú samozrejme písmená a-z, A-Z, čísla 0-9 a _. Pri definovaní funkcie môžeme použiť argumenty, ktoré budú ďalej predané funkcii počas jej behu, čo ale povinné nie je. Funkcie sú spustené len v momente, kedy budú zavolané. 

Funkcie vytvárame nasledovne:

def funkcia(meno):
  print("Trieda 3. B: " + meno)
# Následne funkciu zavoláme
funkcia("Matej Bel")
funkcia("Andrej Záborský")

Do argumentov funkcie môžeme vložiť čokoľvek, čo budeme používať. 


8. Objekty a triedy

Python je objektovo-orientovaný programovací jazyk. To zjednodušene znamená, že takmer všetko je objekt. Trieda je návrh pre vytvorenie objektu, logické usporiadanie dát a funkcií. Umožňuje nám vytvárať dátové štruktúry, ktoré obsahujú ľubovoľný obsah a sú ľahko dostupné. Triedy nám poskytujú potrebné zoskupenie dát a funkcionalít do jedného objektu. Každá trieda môže obsahovať atribúty a metódy. Atribútmi sú napríklad premenné, s ktorými sa v rámci tried pracuje. Metódami sú funkcie. V jazyku Python triedy obsahujú všetky štandardné súčasti objektovo-orientovaného programovania - napríklad dedičnosť.

Triedu vytvárame pomocou class:

x = 1
class novaTrieda:
  x = 15
  def funkcia(self):
    print("Výpis funkcie")
novyobjekt = novaTrieda() # Vytvorenie objektu z triedy
novyobjekt.funkcia()  # Na obrazovku sa vypíše „Výpis funkcie“
print(novyobjekt.x) # Zobrazí hodnotu x v triede novaTrieda

Dedičnosť

  • Používa sa v objektovo-orientovanom programovaní
  • Odkazuje na definovanie novej triedy s malými alebo žiadnymi zmenami k už existujúcej triede
  • Derivovaná trieda „dedí“ atribúty a metódy, ktoré zvolíme

class trieda():
   def metoda1(self):
      print("Student")
class dieta(trieda):
   def metoda2(self):
      print("potomok triedy, metoda 2")
def main():
   c2 = dieta()
   c2.metoda1()
   c2.metoda2()
main()