![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Cílem této knihy je naučit čtenáře myslet jako erudovaný programátor. Tento způsob myšlení spojuje některé z výtečných rysů matematiky, jakož i technických a přírodních věd. Programátoři stejně jako matematici používají formálního jazyka k vyjádření svých myšlenek. Stejně jako inženýři i oni navrhují objekty sestavováním částí do celků a porovnávají výsledky jednotlivých alternativ. Stejně jako vědci i programátoři pozorují chování komplexních systémů, tvoří hypotézy a předpoklady výsledků.
Nejdůležitější dovedností programátora je schopnost řešit problém. Řešit problém vyžaduje schopnost jej formulovat, tvořivě přemýšlet o možnostech řešení a zvolené řešení potom jasně a stručně vyjádřit. Učit se programovat je vynikající příležitost pro osvojení těchto dovedností.
Budeme se tedy jednak učit programovat, což je užitečná dovednost sama o sobě, jednak budeme programování používat jako prostředek k dosažení jistého cíle. Jak budeme v učení postupovat, bude se nám tento cíl stávat zřejmější.
Přirozené jazyky jsou jazyky, kterými lidé hovoří - čeština, angličtina, španělština, atd. Každý tento jazyk lze popsat jeho slovní zásobou a gramatikou.
Formální jazyky jsou jazyky, sestavené záměrně pro nějaký účel. Matematika například používá svůj formální jazyk k vyjádření vztahů mezi čísly a symboly. Chemici používají svůj formální jazyk k zobrazení chemických struktur a procesů.
Programovací jazyk je rovněž formálním jazykem, používaným pro řízení činnosti počítače. Podobně jako přirozené jazyky se programovací jazyk řídí pravidly pro skladbu (syntax) a sémantiku (semantics).
Pravidla skladby programovacího jazyka jsou dvojího druhu:
a) Týkající se použitých znaků a slov neboli tokenů. Jedním z problémů zápisu 3=+6$ je to, že $ není legálním znakem v matematice.
Podobně zápis 2Zz není legální proto, že neexistuje chemický prvek se zkratkou Zz.
b) Týkající se uspořádání tokenů. Výraz 3=+6$ je skladebně nesprávný, protože nelze umístit znak plus bezprostředně za rovnítko. Rovněž tak označení molekul musí mít index za jménem, nikoliv před ním.
Čteme-li větu v angličtině či češtině nebo výraz formálního jazyka, musíme rozpoznat, jaká je jejich skladba. Tomuto procesu, který u přirozeného jazyka provádíme podvědomě, říkáme v souvislosti s programovacím jazykem parsing, neboli podrobný rozbor skladby.
I když formální a přirozené jazyky mají mnho společných rysů - tokeny (slovní zásobu), strukturu, syntaxi a sémantiku - mají také mnoho rozdílů:
Protože přirozený jazyk používáme od nejútlejšího dětství, můžeme mít problémy s používáním formálního jazyka. Někdy lze rozdíl mezi formálním a přirozeným jazykem přirovnat v menší míře k rozdílu mezi prózou a poezií.
Zde je několik rad pro čtení programů (a jiných formálních jazyků). Za prvé, mějme na paměti, že text formálního jazyka je významově zhuštěnější než text přirozeného jazyka a proto jeho čtení zabere více času. Také jeho struktura je velice důležitá, takže nebývá dobrým nápadem číst pouze zhora dolů, zleva doprava. Místo toho si zvykejme provádět v mysli rozbor skladby (parsing), rozeznávaje znaky a hodnotíce strukturu. Nakonec nezapomínejme, že záleží na maličkostech. Nepřesnost, která nám projde v přirozeném jazyce, má ve formálním jazyce dalekosáhlý význam.
Program je posloupnost instrukcí, které určují, jak má být výpočet proveden. Výpočtem může být řešení matematické úlohy, jako je např. řešení systému rovnic či určení kořenů polynomu nebo jím může být symbolický výpočet, jako je vyhledání a výměna textu v dokumentu.
Podrobnosti se v různých jazycích liší, ale některé základní instrukce se vyskytují téměř v každém jazyce:
Věřte či nevěřte, to je téměř všechno z programování. Každý program, který kdy použijete, jakkoliv komplikovaný, se bude skládat z instrukcí více či méně podobných výše uvedeným. Programování můžeme také prezentovat jako proces rozdělování komplexní úlohy do menších a menších podúloh, až tyto podúlohy jsou tak jednoduché, že se dají provést pomocí těchto zákládních instrukcí.
Programovací systém je spojení programovacího jazyka, příslušných knihoven a programového vybavení (kompilátor, interpret, virtuální stroj) pro práci s tímto jazykem. Programovací jazyk Python je jazyk vyšší úrovně, stejně jako například C++,
PHP a Java.
Interpret jazyka je psán v jazyce C pro CPython
, v jazyce Java pro Jython
, v jazyce Python pro PyPy
. IronPython
je úzce spojen se systémem .NET Framework.
Jazykem nejnižší úrovně je strojový jazyk (machine code), což je sekvence bitů či bajtů, jímž lze komunikovat přímo s CPU počítače. Jazykem o stupeň vyšším než strojový jazyk je tak zvaný assembler, jenž se však používá jen ve velice specifických případech.
Program v jazyce vyšší úrovně se nazývá zdrojový kód (source code), což je prostý text, sepsaný podle syntaktických pravidel příslušného jazyka. V Pythonu jsou soubory se zdrojovým kódem označovány příponou ~.py.
Pokud jsou tyto soubory přímo určeny ke zpracování interpretem Pythonu, říkáme jim skripty, pokud jsou určeny k importu při zpracování jiných souborů, říkáme jim moduly.
Důležitou součástí programovacího vybavení Pythonu je soubor programů, označovaný jako interpret (překladač).
Na obrázku vidíme zjednodušené schematické propojení jednotlivých částí realizačního procesu při zpracování zdrojového kódu.
Instrukce zdrojového kódu jsou kompilovány (kontrolovány z hlediska skladby a přetvořeny) na mezilehlý objektový kód (bytecode). Ten je ukládán do interního adresáře pro další zpracování interpretem nebo vkládán do souboru s příponou ~.pyc, případně do automaticky vytvářeného externího adresáře __pycache__
.
Interpret postupně čte mezilehlý objektový kód a v součinnosti s Virtuálním strojem (Virtual mashine) jej realizuje v časové fázi, zvané runtime.
Pro správné pochopení tohoto schematu je dobré vědět, že realizace kódu může být provedena dvojím způsobem:
Programování je složitý proces a protože jej provádí lidská bytost, je často provázeno chybami. Chyba v programu je z potměšilých důvodů označována jako bug (štěnice, veš) a proces vyhledávání chyb a jejich oprava se v originále logicky nazývá debugging (odvšivení), my korektně řekneme ladění.
V programu se mohou vyskytnout tři druhy chyb: chyby související se skladbou programu (syntax errors), s během programu (runtime errors) a s významem programu (semantic errors). Je užitečné mezi nimi rozlišovat kvůli jejich rychlejšímu vyhledání.
Python může provést výpočet jenom pro takový program, který má správnou skladbu (syntaxi). Slovo syntaxe se vztahuje ke skladbě programu a k pravidlům skladby. V češtině i angličtině musí například věta začínat velkým písmenem a končit tečkou.
tato věta je chybná z hlediska syntaxe. Rovněž i tato
Pro většinu čtenářů nepředstavuje několik málo chyb ve skladbě textu výraznou překážku pro jeho správné pochopení. Python tak snášenlivý není.
Před každým prováděním skriptu (runtime) se provádí jeho formální kontrola kompilátorem. Jakmile se ve zdrojovém kódu objeví syntaktická chyba, interpret vytiskne chybové hlášení a ukončí běh programu.
Druhým typem chyb je chyba, která se vyskytne až při běhu programu (runtime). I v tomto případě ukončí interpret běh výpočtu a pokud zná příčinu, vytiskne chybové hlášení.
Takto ošetřené chyby se také nazývají výjimky (exceptions) a
jejich definice jsou součástí programového vybavení Pythonu (viz Built-in Exceptions).
Pro úplnost je nutné zde uvést také chyby, které zastaví běh programu bez naznačení příčiny, případně chyby, které způsobí nekončící běh programu na pozadí.
Třetím typem chyb jsou chyby významové (sémantické). Objeví-li se v programu sémantická chyba, proběhne program úspěšně v tom smyslu, že se neobjeví žádné chybové hlášení, ale program neprovede to, co jsme zamýšleli. Provede něco jiného. Přísně vzato, provede přesně to, co jsme mu řekli, aby provedl.
Problém spočívá v tom, že program, který jsme napsali, není ten program, který jsme chtěli napsat. Vyznění programu (jeho sémantika) je špatné. Nalezení sémantických chyb může být někdy náročné, protože to vyžaduje zpětné porovnávání výstupu s tím, co jej v programu způsobuje.
Vyhledávání chyb je nejdůležitější dovednost, kterou potřebujeme získat. I když to může být frustrující, vyhledávání chyb je intelektuálně nejbohatší, nejnáročnější a nejzajímavější část programování.
Svým způsobem připomíná hledání chyb práci detektiva. Jsme konfrontováni s indiciemi, z nichž máme určit procesy a události, které vedly k výsledkům, jež máme před sebou.
Vyhledávání chyb je něco jako experimentální věda. Jakmile nás napadne, v čem může chyba spočívat, upravíme program a vyzkoušíme jej. Byla-li naše hypotéza správná, můžeme získanou zkušenost zobecnit a použít příště. Nebyla-li naše hypotéza správná, musíme si vymyslet jinou.
Pro někoho splývá vyhledávání chyb s programováním. To jest programování jako postupné odstraňování chyb z programu, až posléze program dělá to, co si přejeme. Jinými slovy, začneme s programem, který "něco " dělá a postupně jej malými úpravami a debugováním přeměníme na fungující program, který dělá to, co si přejeme.
Instalace pythonu je jednoduchá a ještě jednodušší. Ta jednoduchá spočívá v tom, že si v levém sloupci stránky Python Releases for Windows vyberete vhodný instalátor poslední verze Pythonu (např. python-3.10.0), stáhnete do počítače, kde jej spustíte s tím, že si pohlídáte, zda bude instalace umístěna do nabídnutého místa (např. C:\Users\User\AppData\Local\Python\Python310) nebo si zvolíte vlastní umístění (např. D:\Python\Python310), přičemž je v obou případech doporučováno zatrhnout volby 'Install launcher for all users'
a 'Add Python to PATH'
.
Ilustraci právě popsaného lze nalézt na stránce Instalace Pythonu pro Windows
Postup té ještě jednodušší instalace spočívá v tom, že si v počítači (Windows 10) otevřete službu Microsoft Store
, vpravo nahoře (Hledat
) zadáte 'python' a vyberete si žádanou verzi. Volbu potvrdíte tlačítkem Získat
či Nainstalovat
a je hotovo. Po chvilce čekání máte zvolený Python nainstalován v počítači i s nastavenou cestou v proměnné User PATH
. Při tomto způsobu instalace si žel nelze zadat vlastní umístění programu.
Instalace není drobek, zabere na disku 246 MB ale obsahuje mnoho dober:
Pokud máme cestu k exekučním souborům (~.exe) uloženou v proměnné PATH, spustíme aplikace Python Shell (konzolu Pythonu), IDLE a sphinx-quickstart pouhým zápisem jejich názvů (python, idle, easy-install) na příkazový řádek systémové konzoly v kterémkoli adresáři. U aplikací pip a easy_install je nutné ještě zadat potřebné argumenty.
Interpret Pythonu se uplatňuje v interaktivním režimu (otevřené konzoly) a v programovém režimu (při provádění kódu).
V interaktivním režimu píšeme text kódu přímo na příkazový řádek interaktivní konzoly
(shell) Pythonu. Interpret s kompilátorem tento text přečte, vyhodnotí a vrátí (vytiskne) výsledek:
Python 3.3.0 (default, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 2+3# příkazový řádek 5
Skupina znaků >>> se nazývá prompt (výzva) a interpret jím naznačuje, že je připraven přijímat instrukce. Zapsali jsme 2+3, interpret náš výraz vyhodnotil a na dalším řádku vrátil výsledek 5.
Práce v interaktivní konzole je vhodná pro testování krátkých kódů. Činnost interaktivní konzoly Pythonu ukončíme příkazy exit() či quit(), případně Ctrl+d v Linuxu.
Přístup k prostředí Pythonu lze také zajistit z příkazového řádku systémové konzoly:
# Přepínač (shift, tag, option) -c způsobí výstup v konzole C:\> python -c "print('Ať žije Slávie!')" Ať žije Slávie!# Zábavné je toto zadání: C:\> python -c "import this" | sort ...
V programovém režimu zapíšeme kód (program) nejprve do souboru. S použitím textového editoru (IDLE, Thonny, Notepad++ aj.) vytvoříme například soubor s názvem firstprogram.py, v němž zapíšeme příkaz:
# firstprogram.py # ignorovaný komentář print(2+3)
Dle zavedené konvence dáváme souborům s programem v Pythonu příponu .py .
Podle této přípony pozná interpret, že se jedná o zdrojový soubor ( neboli skript
), obsahující kód Pythonu.
Program potom můžeme aktivovat tak, že na řádek systémové konzoly (například cmd, wps, ..
) zapíšeme název souboru za slovem python:
F:\codetest\howto\ch-01 >python
firstprogram.py 5
Tento skript lze realizovat interpretem Pythonu za předpokladu, že:
System PATH
(ve Windows)
To lze ve Windows 10 elegantně zařídit tak, že v Průzkumníku přejdeme do složky s dotyčným souborem, kde pravým klikem myši aktivujeme kontextovou nabídku, z níž si vybereme pokyn Open in Windows Terminal
(souvisí s instalací Windows Terminal Preview).
Do příkazového řádku otevřené konzoly doplníme uvedený příkaz:
PS F:\codetest\howto\ch-01> python
firstprogram.py
5
Pro zvídavé
Při zpracování tohoto pidiprogramu došlo interně k jeho kompilaci a následné interpretaci mezilehlého bajtkódu. Kompilovaný formát (bytecode) zdrojového kódu se v tomto případě nikam trvale neukládá.
Pokud tento soubor importujeme do konzoly Pythonu, dojde k jeho exekuci jako v předchozím případě ale jeho kompilace se uloží do souboru s názvem firstprogram.cpython-37.pyc v automaticky vytvořené složce __pycache__.
>>> import firstprogram# konzolu nutno otevřít ve složce ch-01 5
K vytvoření složky __pycache__ se souborem firstprogram.cpython-37.pyc dojde i tehdy, když skript aktivujeme jako modul (bez přípony .py):
F:\python\howto\ch-01> python -m firstprogram# přepínač -m značí modul 5
Python vytváří kompilaci zdrojového kódu vždy ale kompilovaný soubor ukládá do externí složky __pycache__ pouze tehdy, je-li o to požádán nebo pokud to sám uzná za vhodné.
Na obrázku vidíme dvě otevřená okna aplikace IDLE. V horním je konzola interpretu Python (Python Shell), kde lze zadávat příkazy, ve spodním je okno textového editoru pro zápis a spouštění kódu.
Tuto aplikaci můžeme (stejně jako samostatnou konzolu Pythonu) spustit z hlavní (spodní) lišty monitoru zápisem idle v okně Start nebo přímo přes ikonu jejího zástupce, kterou je vhodné upravit následujícím způsobem:
Poklepem pravé myší klávesy na ikoně otevřeme přístup k názvu aplikace (např. IDLE) na kterém 'pravý poklep' opakujeme. Nabídne se nám další kontextové menu, ze kterého vybereme položku Vlastnosti
. Otevře se nám karta Zástupce
v okně tabulkového editoru, kde upravíme text pole Spustit v
: (např. na F:\Codest\Python).
Tím si zajistíme, že se při práci s aplikací IDLE budeme pohybovat v námi určeném adresáři.
Aplikace Thonny je příjemné IDE Pythonu pro nerozsáhlé práce začátečníků (stejně jako IDLE). Toto prostředí poskytuje řadu užitečných pomocných oken (Asistent, Shell, Výjimky, Soubory, Nápověda, Poznámky, Inspektor objektů, Osnova, Strom programu, Proměnné, Heap, Zásobník, Plotter, Argumenty). Má také, jak vidno, české prostředí.
Instalační soubor thonny-3.3.13.exe (17,1 MB) stáhneme na stránce Thonny, umístíme do vhodné složky a spuštěním souboru spustíme instalaci aplikace, která obsahuje předinstalovaný Python 3.7.5.
Pokud bychom chtěli aby Thonny používal poslední verzi Pythonu, musíme jej instalovat přes pip :
D:\Python > pip install thonnyapp
Aplikace se instaluje do složky (např) D:\Python\Python310\Scripts\thonny.exe.
Pomocných nástrojů pro práci s Pythonem je celá řada. Za zmínku stojí například IDE Pyscripter (84 MB), kde lze nastavit slovenské prostředí.
Programy se častěji čtou než píší a jak se program stává větším a složitějším, stává se také méně přehledným. Formální
jazyky jsou hutné a často je obtížné při pohledu na část kódu určit, co má být prováděno a proč.
Proto je dobré doplnit program poznámkami, které vysvětlují, co příslušná část programu má
provádět. Poznámky či komentáře uvádíme symbolem
# compute the percentage of the hour that has elapsed percentage = (minute * 100) // 60
Všechno od znaku # (hash) až do konce řádku je komentář, nikoliv zdrojový kód. Komentář lze umístit i za skriptem:
percentage = (minute * 100) // 60 # celočíselné dělení
Potřebujeme-li komentovat více řádků, umístíme znak
"""
Tento text je komentářem,
nikoliv zdrojovým kódem.
"""
V Pythonu 2.x bychom použili příkaz:
>>> print "Hello, World!" Hello, World!
Uvozovky označují začátek a konec hodnoty typu "řetězec" (string), ve výsledku se neobjeví.
V Pythonu 3.x je print funkcí, a proto musíme použít závorky:
>>> print ("Hello, World!") Hello, World!
Na funkci print si ještě prozradíme, že je-li výraz v závorce vyhodnotitelný, provede se nejprve vyhodnocení a poté tisk jeho výsledku:
>>> print (2 + 5) 7# celá čísla jsou hodoty typu "integer"
Pro vkládání údajů do programu z klávesnice se používá funkce input():
>>> n = input("Zadej součet: "), n Zadej součet:4 + 3**2 >>> n '4 + 3**2'
Chceme-li jako vstup zadat výraz, který se i vyhodnotí, použijeme funkci eval(..):
>>> eval(n) 13 >>> eval(input('Zadej výraz Pythonu: ')) Zadej výraz Pythonu:2 + 3**4 83
Funkce eval(..) upraví formát číselného výrazu na celé číslo (int, integer) a vyhodnotí jej.
>>> 1 2 File "<stdin>", line 1 1 2 ^ SyntaxError: invalid syntaxV mnoha případech Python ukáže místo, kde k chybě došlo, ale toto označení není vždycky správné. Také příčina chyby není vždy podrobně uvedena. Takže nám nezbývá, než se řádně naučit pravidla skladby. V našem příkladě si Python stěžuje, protože mezi čísly není žádný operátor.
Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'tvaroh' is not definedToto je chyba při běhu programu, podrobněji NameError (chyba jména) a ještě více podrobněji to je chyba proto, že jméno tvaroh není definováno. Nevíte-li, co to znamená, nevadí, brzy na to přijde řeč.
>>> 'Toto je test ...'
Poté vytvořte skript s názvem test1.py s totožným obsahem - bez promptu.print('Toto je test ...')uložte a spusťte jej znova. Co se stalo tentokrát?
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |