Úvod do programovania v Pythone
Intro
Cieľom workshopu na ktorom sa zúčastňujete, nieje urobiť z vás programátorov. 6 hodín je na niečo také príliš málo času, preto vás s Pythonom zoznámim len tak letmo. Prvú časť workshopu venujeme samotnému jazyku, jeho základným (len najčastejšie používaným) konštruktom, triedam a funkciám. V druhej časti sa pokúsime pochopiť niekoľko jednoduchých programov, vytvorených v tomto kúzelnom programovacom jazyku.
Verím však, že aj napriek tomu, že stihneme len také letmé zoznámenie, bude pre vás tento workshop inšpiráciou k ďalšiemu štúdiu, experimentom, objavovaniu, a kto že ho vie, možno sa jedného dňa odhodláte aj k vytvoreniu niečoho, čo bude užitočné, zábavné, poučné, skvelé, alebo všetko dokopy.
V jazyku Python je naprogramovaného veľa zaujímavého softvéru. Pre nás, čo si po večeroch nepotrebujeme svietiť, patrí bezpochyby medzi najznámejšie programy vytvorené v Pythone čítač obrazovky NVDA. Počas tohoto workshopu budeme tento fakt hojne využívať, pretože NVDA je vytvorený tak, že môžeme s pythonom pracovať bez toho, aby sme museli čokoľvek inštalovať.
Navyše môžeme využiť funkcionalitu čítača na komunikáciu s používateľom našich výtvorov a teda sa elegantne zbaviť nutnosti vytvárať používateľské prostredie pre naše programy, pretože vytváranie používateľského prostredia je pre začiatočníka vec netriviálna.
Pár definícií
- programovací jazyk (v našom prípade python): Ide o akúsi sadu slov (budeme ich volať kľúčové slová), konceptov a striktne danú gramatiku, prostredníctvom ktorích môžeme formulovať texty (programy), pochopiteľné pre človeka a nejaký nástroj (v našom prípade python interpreter), ktorý danému jazyku rozumie do takej miery, aby ho mohol prekladať do inštrukcií, pochopiteľných pre počítač. Programy môžme písať v ľubovoľnom textovom editore, existujú však aj špeciálne prostredia, s účelom uľahčiť tvorbu programov.
- Interpretovaný programovací jazyk: Ide o jazyk, ktorý vykonáva priamo interpreter, teda, netreba ho kompilovať do niečoho, čo je spúšťateľné priamo operačným systémom. Nevýhodou interpretovaných jazykov je nižší výkon (v súčasnosti možno povedať, že nás táto nevýhoda nijak zvlášť netrápi, ako celkom fajn podporný argument možno použiť čítač obrazovky NVDA, ktorý aj napriek tomu, že je takmer celý vytvorený v pythone, je citeľne svižnejší, ako natívny program JAWS). Medzi výhody môžme radiť nezávislosť na operačnom systéme (toto samozrejme neplatí v prípade NVDA, dôvody si vysvetlíme na workshope).
Začíname
Prvé experimenty s programovaním vykonáme v tzv Python konzole. Možno ste si už všimli, že v ponuke nástroje programu NVDA možno nájsť položku s názvom Python Konzola. Ide o jednoduché rozhranie, prostredníctvom ktorého môžme komunikovať s python interpreterom, zabudovaným v čítači NVDA.
Rozhranie pozostáva z editačného poľa, do ktorého píšeme python kód, v druhom editačnom poli sa zobrazujú "odpovede" od python interpretera.
Python konzolu môžeme okrem pomerne dlhej cesty cez ponuku vyvolať aj kombináciou klávesov nvda+ctrl+z. Vyskúšajte si to. Medzi vstupným a výstupným poľom sa prepínajte klávesom F6. Polia rozoznáte podľa nasledovného:
- vstupné pole má označenie (popis) ".>>>". Vo vstupnom poli fungujú vertikálne šípky na pohyb po histórii, teda môžete sa vracať k dávnejšie napísanému aby ste to upravili a znovu použili.
- výstupné pole má príznak "iba na čítanie" ktorý vám nvda oznámi. Ide o viacriadkové pole, takže vertikálne šípky fungujú štandardne.
Skúste si do vstupného poľa napísať ľubovoľný text a potvrďte ho enterom. Stlačením enteru interpreteru posielame práve napísaný riadok a informujeme ho, že sa ním môže začať zaoberať.
NVDA vám automaticky prečíta čo pribudlo do výstupného poľa, môžete sa však do neho aj prepnúť a prečítať si to pozorne. Všimnite si, akým spôsobom python interpreter oznamuje, že vami napísanému nerozumie:
---(výstup z python konzoly)
>>> ahoj
Traceback (most recent call last):
File "
", line 1, in NameError: name 'ahoj' is not defined
---
Ukážky podobné tejto sa budú v tomto texte vyskytovať častejšie, preto zaveďme nasledovné pravidlá:
- Začiatok a koniec ukážky bude označený riadkom, na ktorom budú 3 spojovníky
- medzi takýmito riadkami bude ukážka (kód), výstup z python konzoly, alebo niečo iné, čoho význam bude popísaný na uvádzacom riadku, tak ako je to v ukážke vyššie.
Prvý riadok v ukážke obsahuje môj vstup, je predradený troma znakmi >.
význam druhého riadku pochopíme neskôr.
tretí riadok hovorí, v ktorom súbore resp module sa chyba vyskytla, v našom prípade priamo na konzole.
A posledný riadok obsahuje chybovú hlášku.
Konzolu môžeme ukončiť jedným z týchto spôsobov:
- stlačením ESC
- stlačením alt+F4
- napísaním príkazu exit() aj so zátvorkami, ktorý potvrdíme enterom.
Prvé bezchybné vstupy
S prvím sme sa už vlastne stretli. Konkrétne, na napísanie príkazu
exit()
nám python interpreter neodpovedal chybou, ale vykonal niečo, čo sme od neho chceli. Skúsme teraz aj ďalšie jednoduché no zmysluplné vstupy:
---(trochu miestami aj podivnej aritmetiky)
>>> 5
5
>>> 5+3
8
>>> 3*(5+3)
24
>>> 3.5*5
17.5
>>> "ahoj"
'ahoj'
>>> "ahoj" +"nazdar"
'ahojnazdar'
>>> "ahoj" *3
'ahojahojahoj'
>>> "ahoj" +"nazdar" *3
'ahojnazdarnazdarnazdar'
>>> ("ahoj" +"nazdar") *3
'ahojnazdarahojnazdarahojnazdar'
---
Prvé 3 vstupy obsahujú jednoduché aritmetické operácie. Pozrite si moje vstupy a výstupy interpretera. Ak sa vám občas stáva, že potrebujete kalkulačku, tak vedzte, že nieje veľa takých, ktoré by prekonali python interpreter. Ten si vie okrem trivialít uvedených v ukážke poradiť aj s ťažkými výpočtami, napríklad vie pracovať s číslami, ktorých dĺžku obmedzuje len miesto v operačnej pamäti počítača. Používateľovy dáva k dispozícii ohromné množstvo funkcií, o tom však neskôr.
Trošku podivne môžno pôsobý fakt, že interpreter nereagoval podráždene na piaty vstup:
"ahoj"
je to tým, že sme slovo ahoj obklopili úvodzovkami, čím sme interpreteru povedali, že sa slovo ahoj nemá pokúšať interpretovať, pretože to je reťazec (ďalej budeme v tomto prípade používať anglické slovo string). Rovnako ako interpreter rozumie číslam, vie že ich môže vypisovať, násobiť, sčítať,..., pozná aj koncept string.
V šiestom vstupe vidíme, že stringy môžme aj sčítavať (spájať) a ďalšie vstupy ukazujú, že ich môžeme aj násobyť číslami. Všimnite si aj demo so zátvorkami.
Vyskúšajte
- dá sa násobyť string stringom?
- ako (ne?)funguje násobenie stringu desatinným číslom?
- A čo sčítanie stringu a čísla?
- Ako vyrobíte string, ktorý obsahuje 150 chlievikov, vyznačených zátvorkami, pri čom každý chlievik má 5 medzier? Mám na mysli takýto string: "( )( )". Tento má dĺžku 3 chlieviky, ja chcem dĺžky 150. Skúste čo najkratší zápis, do 19 napísaných znakov sa to určite zmestí.
Poznámka pre tých, čo zalamujú rukami. Vedzte, že posledná otázka nieje samoúčelná, trik demonštrovaný v nej využijeme neskôr v reálnej aplikácii (hra šnaps), hoci bude zaodený v inom šate a na prvý pohľad ho možno nespoznáte.
Premenné
V predchádzajúcom sme videli, že na python konzole môžme stvárať rôzne pesstvá, no vždy len v jednom kroku, pretože interpreter si pamätá výstup nášho výčinu len do chvíle, kým ho vypíše do výstupného poľa. Toto môžeme zmeniť, pretože python vie čo sú to premenné.
Premenná je chlievik v pamäti počítača, ktorý môžeme pomenovať a niečo si do neho uložiť. Ukladať do neho môžme čísla, stringy ale aj všeličo iné. Vyskúšajme si zase nejaké konkrétne príklady. Tí z vás, čo používajú v kalkulačke pamäte, majú teraz život trochu ľahší, pretože už tento koncept poznajú. Premenná je vlastne pomenovaná pamäť. V nasledujúcom texte pridám na koniec každého riadku s kódom ešte komentár s číslom riadku. Jednoduché komentáre sa začínajú znakom # a platia do konca riadka.
Znak # hovorí interpreteru, že to čo je za ním, je až do konca riadku niečo, čo sa netreba snažiť interpretovať. Komentáre sa nám zídu neskôr, keď budeme vytvárať niečo zložitejšie.
---(premenné)
>>> meno1="rado" #1
>>> meno2="dano" #2
>>> vek1=30 #3
>>> vek2=20 #4
>>> "ahojte "+meno1+" a "+meno2+". Sucet vasich vekov je "+str(vek1+vek2) #5
'ahojte rado a dano. Sucet vasich vekov je 50'
---
Zaujímavý je asi hlavne riadok 4 na ktorom sme úspešne sčítali string s číslom. Pomohli sme si pri tom novým konštruktom, ktorý sa volá funkcia, o ňom si povieme viac v ďalšej časti.
Ďalšie zaujímavé dátové typy
Doteraz sme sa stretli s dvoma dátovými typmi. Konkrétne číslo a string. Python ich pozná viac, my si predstavíme ešte zoznam.
Ide o dátový typ, ktorý nám umožňuje uchovať viac hodnôt v jednej premennej. Z iných jazykov ho možno poznáte pod názvom pole. Pozrime si nejaké funkčné príklady:
---(zoznamy a zoznamy zoznamov)
>>> zoznam=["ahoj",5,3,"nazdar"] #1
>>> zoznam #2
['ahoj', 5, 3, 'nazdar']
>>> zoznam[3] #3
'nazdar'
>>> zoznam[6] #4
Traceback (most recent call last):
File "
", line 1, in IndexError: list index out of range
>>> zoznam[0] #5
'ahoj'
>>> zoznam2=[zoznam,1,2,3] #6
>>> zoznam2 #7
[['ahoj', 5, 3, 'nazdar'], 1, 2, 3]
>>> zoznam2[0][0] #8
'ahoj'
>>> zoznam2[0][2] #9
3
---
Na prvom riadku sme vytvorili nový zoznam, ktorý obsahuje 4 položky.
kód (2) a (3) by mal byť zrejmý. Najprv sme si dali vypísať celý zoznam, potom jednu položku. Všimnite si, že položku sme si vypýtali cez poradové číslo v hranatých zátvorkách.
V (4) sme sa dopustili chyby, pretože sme si pýtali položku s poradovým číslom 6 a v zozname máme len 4 položky, číslované od 0 do 3.
Trochu zaujímavejšie sú (6) a (7). Všimnite si, aké jednoduché je vyrobiť vnorený zoznam, teda nejakú dvojrozmernú štruktúru.
Zo zoznamu ešte môžme napríklad aj vyhryzávať časti, zoznamy môžeme sčítavať, alebo do nich pridávať nové prvky. Pozri príklady:
---(ďalšie hry so zoznamami)
>>> zoznam1=["ahoj","nazdar","cau"] #1
>>> zoznam1+=zoznam1 #2
>>> zoznam1 #3
['ahoj', 'nazdar', 'cau', 'ahoj', 'nazdar', 'cau']
>>> zoznam1[0]+=" juraj" #4
>>> zoznam1 #5
['ahoj juraj', 'nazdar', 'cau', 'ahoj', 'nazdar', 'cau']
>>> zoznam1[3:5] #6
['ahoj', 'nazdar']
>>> zoznam1+=["dobry den"] #7
>>> zoznam1 #8
['ahoj juraj', 'nazdar', 'cau', 'ahoj', 'nazdar', 'cau', 'dobry den']
---
Preskúmajte príklady vyššie, v ďalších častiach sa so zoznamamy budeme často stretávať.
Funkcie z pohľadu používateľa
Ide o pomenované kúsky kódu, ktorým môžeme posielať parametre. Parametre sa uvádzajú v zátvorkách, existujú aj funkcie, ktoré parametre nepožadujú, v takom prípade Uvádzame len prázdne zátvorky. Isto si pamätáte na ukončovanie konzoly napísaním príkazu
exit(),
práve to je volanie existujúcej funkcie bez parametrov.
Okrem toho sme už v tomto texte zahliadli aj funkciu str, ktorá prevádzala parametre v zátvorkách na string. Parametre teda môžu byť aj výrazy (v našom prípade to bol súčet vekov). V nasledujúcej sérii ukážok si pozrite pár užitočných funkcií:
---(volanie funkcií)
>>> zoznam=range(10) #1
>>> zoznam #2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> zoznam2=range(1,6) #3
>>> zoznam2 #4
[1, 2, 3, 4,5]
>>> len(zoznam) #5
10
>>> len(zoznam2) #6
5
>>> str(zoznam) #7
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> meno=u"Anastázia Antivelikotočerepatinovičovská" #8
>>> len(meno) #9
40
---
Funkcia range, použitá v (1) a (3) má 1 alebo 2 parametre a vracia zoznam s číslami z rozsahu, ktorý určujeme parametrami. Ak zadáme 2 parametre, potom určujeme hranice, jeden parameter určuje len hornú hranicu a automaticky sa predpokladá, že spodná je 0. Funkcii môžete zadať aj tretí parameter, vyskúšajte zistiť, na čo slúži. Funkciu neobvyňujte zo samoúčelnosti, už v ďalšej kapitole si ukážeme na čo je dobrá.
Nová je ešte funkcia len, ktorá vracia dĺžku svojho parametra. V ukážkach sme ju úspešne použili na zoznam aj na string. Vyskúšajte čo to urobí, ak ju použijete na premennú obsahujúcu číslo, prípadne dvojrozmerný zoznam.
Bloky kódu a cyklus for
Všetko čo sme videli doteraz bolo príliš statické. Pri vytváraní programov potrebujeme často kusy kódu opakovať kým sa niečo nestane. Skúste si napríklad premyslieť, ako by ste napísali program, ktorý spojí stringy v 5 prvkovom zozname do jedného dlhého stringu. Napríklad takto:
---(spájanie stringov)
>>> zoznam=["prvy","druhy","treti","stvrty","piaty"]
>>> zoznam
['prvy', 'druhy', 'treti', 'stvrty', 'piaty']
>>> s=zoznam[0]+zoznam[1]+zoznam[2]+zoznam[3]+zoznam[4]
>>> s
'prvydruhytretistvrtypiaty'
---
A ako by sa vám páčilo takéto riešenie?
---(prvý cyklus)
>>> for x in range(len(zoznam)): #1
... s+=zoznam[x]+" " #2
... #3
>>> s #4
'prvydruhytretistvrtypiatyprvy druhy treti stvrty piaty '
---
Všimnite si nasledovné veci:
- tu sme použili vnorené funkcie, premyslite si to.
- na tomto riadku je zaujímavá aj novo vzniknutá premenná x, v ktorej máme na začiatku hodnotu 0 a pri každom behu sa hodnota zvyšuje
- všimnite si, že riadok končí dvojbodkou
- riadok začína troma bodkami (z konzoly) dôležitý je ale tabulátor za nimi. Ten hovorí, že sme na nejakej hlbšej úrovni, teda tvoríme blok kódu, ktorý sa bude v cykle opakovať. Ide o jeden riadok, ktorého význam je pravdepodobne pochopiteľný. Uvedomte si, že premenná x obsahuje vždy nejaké číslo, jej hodnota sa automaticky zvyšuje po každom dobehnutí vnútra cyklu.
- riadok je prázdny, aj v konzole stlačíme len enter, bez napísania čoho koľvek, čím hovorýme interpreteru, že vnorený blok končí.
- na poslednom riadku už len vypíšeme obsah premennej, do ktorej sme v cykle zbierali stringy. Obsahuje toho trochu viac, pretože sa v nej zachoval aj string z predchádzajúceho experimentu.
Nakoniec pridáme ešte trochu elegantnejší postup. Zoznam má jednu zaujímavú vlastnosť (hovoríme, že je iterable), takže môžme rovno napísať (tentokrát len samotný program, bez "ozduob" ktoré pridáva konzola):
---(využitie vlastnosti iterovatelnosti)
s="" # aby sme mali premennú tento krát prázdnu
for x in zoznam:
s+=x+" "
s
---
Vyskúšajte si
- napíšte program, ktorý vypočíta aritmetický priemer prvkov v zozname
objekty
Pracujeme s nimi už pomerne dlho, no nevieme o tom. Pretože všetko v pythone je objekt. Doposiaľ sme na všetky premenné nahliadaliako na dáta, teda pomenované miesto v pamäti, ktoré obsahuje nejaké údaje. Okrem týchto údajov má však každý objekt v sebe aj nejaké funkcie (budeme ich volať metódy), ktoré nám umožňujú niečo s dátami vovnútri objektu urobiť. Funkcie skryté vovnútry objektu vyvolávame tak, že pred ich názvom píšeme názov objektu s bodkou. Tento zjavne neohrabaný opis skúsme doplniť nejakými peknými príkladmi:
---(metódy objektov)
>>> s='prave vonku krici nejake dieta "ahoj"' #1
>>> s #2
'prave vonku krici nejake dieta "ahoj"'
>>> slova=s.split(" ") #3
>>> slova #4
['prave', 'vonku', 'krici', 'nejake', 'dieta', '"ahoj"']
>>> for x in range(len(slova)): #5
... slova[x]=slova[x][::-1] #6
...
>>> slova #7
['evarp', 'uknov', 'icirk', 'ekajen', 'ateid', '"joha"']
>>> for x in slova: #8
... s+=x+" " #9
...
>>> s #10
'evarp uknov icirk ekajen ateid "joha" '
>>> s=s.strip() #11
>>> s #12
'evarp uknov icirk ekajen ateid "joha"'
---
v (3) je použitá metóda split, s jedným parametrom. Metóda vracia zoznam, ktorý obsahuje dáta uložené v objekte, nasekané na slová. Parametrom sme určili, že oddeľovač podľa ktorého chceme deliť je medzera.
(6) využíva pekný trik so zadávaním rozsahov. Aj pri rozsahoch možno určovať dĺžku kroku (rovnako ako pri range) a ak sa vynechajú hranice a za 2 dvojbodky napíšeme -1, tak hovoríme, že chceme urobiť reverz slova.
Na to, aby sme pochopili metódu strip použitú v (11) si treba pozorne pozrieť výpisy premennej s pred a po použití metódy.
---(Triedenie)
>>> zoznam=[7,20,5,1,79,100,3]
>>> zoznam.sort()
>>> zoznam
[1, 3, 5, 7, 20, 79, 100]
---
Funkcie z pohľadu tvorcu
Ušetrím si mnoho vysvetľovania, pozrite si príklad:
---(sčítavanie zoznamu)
>>> def scitaj(a):
... vysledok=0
... for x in a:
... vysledok+=x
... return vysledok
...
>>> scitaj([1,2,3,4,5])
15
---
Čo tu ešte treba dodať? Kľúčové slovo def uvádza definíciu funkcie, pri definovaní určujeme meno a v zátvorkách pomenovávame parametre.
Kľúčové slovo return slúži na to, aby sme z funkcie mohli niečo vrátiť.
Podmienky
K tomu, aby sme mohli vytvoriť množstvo zaujímavých programov nám chýba posledná veľmi užitočná konštrukcia. Nazýva sa podmienka a vďaka nej sa v programe môžeme rozhodovať. Opäť ju uvedieme príkladom. Urobíme funkciu, ktorá vráti najdlhší string zo zoznamu stringov.
---(podmienka)
def najdlhsi(zoznam):
vysledok=""
for x in zoznam:
if len(x)>len(vysledok):
vysledok=x
if vysledok=="":
return None
else:
return vysledok
---
V predchádzajúcom príklade si všimnite nasledujúce:
V predchádzajúcom príklade sme videli len jednoduché podmienky. Nasledujúci príklad vymaže zo zoznamu všetky čísla, ktoré sú menšie ako 5 alebo väčšie ako 10
---(ďalší príklad s podmienkami)
def filtruj(zoznam): #1
if len(zoznam)==0: #2
return #3 ak je zoznam prazdny, tak koncime
for x in range(len(zoznam)-1,-1,-1): #4
if zoznam[x]<5 or zoznam[x]>10: #5
zoznam.pop(x) #6
return #7
---
Ak si chcete kód vyskúšať, okopírujte si ho riadok po riadku do konzoly a vyskúšajte na vymyslených zoznamoch.
Na (5) máme podmienku, v ktorej sme použili kľúčové slovo or (alebo). Okrem neho sa ešte často používa aj slovo and (a zároveň), existuje aj not (negácia).
na (6) sme použili metódu pop, ktorá maže prvok zo zoznamu. Prvok určujeme poradovím číslom v zozname.
Otázka pre premýšľavých: prečo sme vo funkcii prechádzali zoznam od konca na začiatok? Elegantne sme sa tým vyhli jednej nepríjemnosti.
Import
Python ponúka programátorom veľké množstvo hotových tried z ktorých vytvárame objekty, ktoré ponúkajú množstvo užitočných metód. Ak chceme tieto hotové prvky v našom programe používať, musíme interpreteru povedať čo chceme použiť a kde sa to nachádza. Doteraz sme sa hrali len na konzole a vystačili sme si. Ak však chceme vytvoriť niečo trvalé, nie jednorazové, potom musíme kód ukladať do súborov, ktoré vieme ďalej použiť.
Súbory budeme nazývať moduly. Každý modul môže obsahovať funkcie, ale aj kód mimo funkcií, ktorý sa pri zavedení modulu vykoná.
Skúsme si teraz vyrobiť niekde na lokálnom disku (najlepšie v koreňovom priečinku) priečinok python, do ktorého budeme ukladať naše moduly. Vďalšom budem predpokladať, že sme vyrobili priečinok c:\python.
Potom ako ho vytvoríme, musíme pythonu povedať, že v tomto priečinku sa môžu nachádzať moduly. slúži na to premenná path, ktorá je definovaná v module sys, ktorý pre nás automaticky zavádza nvda, pri spustení konzoly. Netrápme sa teda zatiaľ s tým, ako zaviesť modul, pozrime si ale obsah premennej a skúsme si do nej pridať aj náš novo vytvorený priečinok.
---(sys.path)
>>> sys.path
['C:\\Program Files (x86)\\NVDA\\library.zip', 'C:\\Program Files (x86)\\NVDA']
>>> sys.path.append("c:\\python")
>>> sys.path
['C:\\Program Files (x86)\\NVDA\\library.zip', 'C:\\Program Files (x86)\\NVDA', 'c:\\python']
---
Všimnite si 2 opačné lomítka, použité v cestách. Je dôležité písať ich 2 krát, pretože znak \ má v python stringoch špeciálny význam. Prostredníctvom neho môžme do stringov vkladať nejaké špeciálne znaky, ako napríklad zariadkovanie \n, tabulátor \t a pod. Jeho špeciálny význam vypneme, ak ho napíšeme 2 krát.
Inak by vás v predchádzajúcej ukážke nemalo nič prekvapiť.
Skúste si teraz vytvoriť prázdny súbor v nejakom čisto textovom editore (poznámkový blok, alebo niečo podobné) a napíšte si do neho nejaký zmysluplný kód. Ak vám žiaden nenapadá, tak sa inšpirujte:
---(počet riadkov v súbore)
import tones #1
def pocet_riadkov(subor): #2
s=file(subor) #3
t=s.read() #4
r=t.split("\n") #5
print "subor %s ma %d riadkov" %(subor,len(r)) #6
tones.beep(500,500)--- #7
---
Najprv pár komentárov ku kódu:
- (1) hovorí interpreteru, že v našom module chceme použiť modul tones. Rovnakým spôsobom použijeme napríklad náš modul v konzole
- Definujeme funkciu, ktorej predáme jeden parameter, s cestou k súboru
- Tá najprv súbor načíta do pamäte (do premennej f si vytvoríme objekt file, ktorému ako parameter odovzdáme cestu k súboru). Poznámka pre tých s dobrou pamäťou. Objekt file je iterovateľný.
- Potom ho rozseká na riadky a nakoniec vypíše informácie
- Prvý krát sme použili funkciuprint, ktorá vie vypisovať nejaké informácie. Použili sme tzv formátovanie, ku ktorému si povieme viac na workshope, nateraz si môžete vyskúšať ako funguje.
- funkcia funguje len na textových súboroch, na wordovskom dokumente vám povie nejaký nezmysel
Skúste si teraz v konzole napísať:
---(ukážka použitia modulu v konzole)
import a
a.pocet_riadkov("d:\\a.txt")
---
Ak ste náhodou modul menili potom, ako ste ho už použili, tak o tom treba interpreteru povedať. Pretože interpreter pri prvom importe modul načíta do svojej internej pamäte a do reštartu nvda ho tam aj drží. Slúži na to funkcia reload, ktorej ako parameter zadáte názov modulu.
---
reload(a)
import a #toto by tu teraz nemuselo byt, modul je po prvom importe stale naimportovany, pretoze ukoncenim python konzoly sa ta iba skryje, nie naozaj ukonci.
a.pocet_riadkov("d:\\a.txt")
---
Teraz by ste už mohli tušiť, čo všetko dokážete urobiť, ak sa v pythone trochu zorientujete a niečo sa naučíte. Vytvárať jednoduché skripty na občasné ťažko riešiteľné úlohy je často len otázkou pár minút, treba však povedať, že si to vyžaduje trochu skúseností s programovaním.
Celkom zaujímavá funkcia, ktorá sa programátorovy hodí často je funkcia help. Ja dávam radšej prednosť dokumentácii k pythonu na webe, alebo u seba v počítači, pretože vo výstupe konzoly sa nedá vyhľadávať, ani nič podobné. Vyskúšajte napríklad:
---(help)
>>> help(open)
Help on built-in function open in module __builtin__:
open(...)
open(name[, mode[, buffering]]) -> file object
Open a file using the file() type, returns a file object. This is the
preferred way to open a file. See file.__doc__ for further information.
---
Záver a nabudúce
V texte ktorý ste práve dočítali sa dozviete veľmi prefiltrované a nekonzistentné informácie o programovacom jazyku, ktorý možno považovať za jednoduchý, zrozumiteľný a priateľský voči nováčikom. Tieto letmé informácie odporúčam doplniť vhodnou literatúrou každému, komu sa zdá, že programovanie by mohlo byť zaujímavé. Ak neradi čítate v angličtine, tak bude váš život ťažší, no aspoň základy jazyka možno v podstatne ucelenejšej forme nájsť napríklad v seriály létající cirkus, ktorý vyšiel na serveri root.cz. Seriál je o staršej verzii pythonu, napriek tomu však začiatočníkom určite poslúži.
V druhej časti tohoto minikurzu sa pozrieme na jednoduchý global plugin pre nvda, ktorý vám umožní zahrať si proti nvda kartovú hru šnaps. Na to aby sme ho mohli pochopiť a prípadne aj vylepšiť, budeme musieť v základných risoch pochopiť ešte jeden koncept, vysvetlíme si teda aj čo je to trieda a ako sa jednoduché triedy vytvárajú.
Okrem neho vám naservírujem ešte niekoľko ďalších ukážok, ktoré vás snáď presvedšia, že vyrobiť niečo jednoduché a užitočné nemusí byť až také ťažké.