====== Úvodní cvičení ze základů programování ======
[[https://en.wikipedia.org/wiki/Python_(programming_language)|Python]] je interpretovaný vysokoúrovňový programovací jazyk vytvořený v roce 1991.
Instalaci pythonu je možné stáhnout na [[https://www.python.org/|stránce]], aktuální nejnovější verze je Python 3.9.7 (psáno 11.9.2021).
Pro spuštění příkazového okna (interaktivního režimu, interpreteru) jazyku python stačí v příkazové řádce (např. cmd ve windows) zavolat příkaz ''%%python%%'' (eventuelně ''%%python3%%'' pro spuštění verze 3 v případě více nainstalovaných verzí jazyka python).
Pro psaní skriptů je možné použít jakýkoli textový editor a daný příkaz či jejich posloupnost uložit do textového soubour (doporučená přípona py). Interpretace příkazů je pak možné provést z příkazové řádky pomocí ''%%python nazev.py%%''
Intalace Pythonu v sobě obsahuje jednoduchý editor spolu s příkazovým oknem (command window) zvaný [[https://docs.python.org/3/library/idle.html|Idle]]
Dále je možné pracovat v celé řadě vývojových prostředí, například v profesionálním [[https://www.jetbrains.com/pycharm/promo/?source=google&medium=cpc&campaign=14124132468&gclid=CjwKCAjwyvaJBhBpEiwA8d38vEoqA7PCaUK3YsH3WRNiVC_nwwhzMfyskCpDjZxFrO9d9-lhL6v4mhoCbRYQAvD_BwE|PyCharm]] jehož instalace je pro studenty ČVUT dostupná zdarma na tomto [[https://download.cvut.cz/jetbrains/|odkazu]].
Jako alternativa k instalci Pythonu a hledaní vývojového prostředí je možné nainstalovat platformu [[https://www.anaconda.com|Anaconda]] jejíž součástí je vývojové prostředí [[https://www.spyder-ide.org/|Spyder]]. Pokud nechcete instalovat celou platformu Anaconda, je možné nainstalovat její minimální varinatu zvanou [[https://docs.conda.io/projects/conda/en/latest/user-guide/install/windows.html|Miniconda]] a později doinstalovat potřebné knihovny či vývojové prostředí Spyder.
Interaktivní variantu příkazového okna (interpreteru) nabízí Interactive Python - [[https://en.wikipedia.org/wiki/IPython|IPython]] [[https://ipython.org/|(web]], [[https://ipython.readthedocs.io/en/stable/index.html|dokumentace)]]
* paralelní a distrubované výpočty
* současně plní roli příkazové řádky počítače
* pomocí 'magických' příkazů volaných pomocí symbolu % nebo %% umožňuje uložit, editovat, spustit skript (program)
Po vzoru programů [[https://www.wolfram.com/mathematica/|Mathematica]] či [[https://www.maplesoft.com/|Maple]], které mají prostředí ve stylu notebooku, kde jednotlivé výpočty uživatel provádí v buňkách, byl v roce 2011 vytvořen IPython notebook nabízející prostředí integrované do webového prohlížeče.
V roce 2014 vzešel z IPython nooteboku projekt [[https://en.wikipedia.org/wiki/Project_Jupyter|Jupyter]] ([[https://jupyter.org/|web]]), který představuje prostředí umožňující integrovat výpočty ve více programovacích jazycích. Název vychází ze tří jazyků: [[https://en.wikipedia.org/wiki/Julia_(programming_language)|Julia]], [[https://en.wikipedia.org/wiki/Python_(programming_language)|Python]], a [[https://en.wikipedia.org/wiki/R_(programming_language)|R]].
V roce 2018 vznikl Jupterlab představující nové rozhraní (novou generaci) integrující v sobě Jupyter notebook. Jupyterlab v sobě lépe integruje potřebné nástroje pro vývoj: textový editor, příkazovou řádku, prohlížeč souborů, atd. Pro více informací je zde krátké [[https://www.youtube.com/watch?v=ctOM-Gza04Y|video]]
Projekt Jupyter je vhodný zejména ve výuce a výzkumu. Interaktivnost notebooku spolu s možností připojit komentář (dokumentaci) umožňuje prezentovat a sdílet výsledky výzkumu s ostatními. Příklad notebooku je [[https://mybinder.org/v2/gh/vencov/zpr_tutorials/main|zde]]
===== Prostředí =====
* [[https://jupyter-notebook.readthedocs.io/en/latest/?badge=latest|Jupyter Notebook]]
* [[https://jupyterlab.readthedocs.io/en/stable/index.html|Jupyter Labs]]
* [[https://code.visualstudio.com/docs/datascience/jupyter-notebooks|Visual Studio Code]] [[https://code.visualstudio.com/docs/python/jupyter-support-py|(případně)]]
===== Markdown (psaní komentářů/popisek v Jupyter notebooku) =====
Markdown je tzv. značkovácí (markup) jazyk, který slouží pro úpravu/formátování textu. Tato buňka, i buňky předcházející, obsahují Markdown.
Markdown umožňuje jednoduše formátovat text: **tučný text**, //kurziva//, [[https://cw.fel.cvut.cz/b221/courses/bab37zpr/start|odkaz]]
> citace
* list
- list
viz [[https://www.markdownguide.org/cheat-sheet/|Syntax 1]], [[https://github.com/hnsreeny/markdown/blob/master/markdown-cheatsheet-online.pdf|Syntax 2]]
===== Python komentáře =====
# komentar na jednom radku
'''
vice radkovy komentar
vice radkovy komentar
vice radkovy komentar
'''
===== Základní proměnné =====
a = 5
b = 9
# součet dvou proměnných a zápis do nové proměnné
c = a + b
==== Pozor, Python rozlišuje mezi velkými a malými písmeny ====
c = A + b
V případě, že máte v kódu chybu Python vypíše tzv. [[https://realpython.com/python-traceback/|traceback]].
==== Proměnné nemusí být jen celá čísla ====
# desetinná čísla (float)
d = 0.75
# komplexní čísla
e = 1 + 2j
# text (string)
f = 'foo'
g = "foo"
# binární logická hodnota (True/False)
h = True
=== Explicitní deklarace/přetypování ===
a = int('4')
b = float(4)
c = str(4.0)
d = complex(2,5)
e = bool("false")
=== Zjištění typu proměnné ===
type(b)
# respektive print(type(b)), viz níže
===== Tisk na standardni vystup =====
# program vypise retezec Hello world na standardni vystup
print('Hello world!')
# Stejný výsledek i bez print
# POZOR - Toto lze jen díky IPythonu, standardní Python by skončíl chybou!
'Hello World!'
==== Práce s proměnnými ====
a = 5
b = a
print(a,b)
a = 5
b = a
a = 7
print(a,b)
a = b = c = 9
print(a,b,c)
a, b, c = 1, 2, 3
print(a,b,c)
a, b = 1,2
b, a = a, b
print(a,b)
=== Matematické operace ===
# Násobení
a*2
# Mocnina
a**2
# Dělení
a/2
# Celočíselné dělení
a//2
# Modulo (zbytek po dělení)
a%2
=== Úloha 1 - Pokud je proměnná a typ int, jaký typ bude mít proměnná b = a/2? ===
Deklarujte proměnnou //a//, vypočítejte/deklarujte proměnnou //b// a zjistěte typ proměnné //b//.
# Kombinace se zápisem do proměnné
a = 14
a += 1 # místo a = a+1
a /= 3
a %= 3
# Jaké číslo bude v proměnné a?
=== Operace s textem ===
a = 'nula'
b = "jedna"
c = a+b
# Můžeme sečíst číslo a text?
c = 5+a
# Můžeme vynásobit číslo a text?
c = 5*a
a = "Cvičení nás "strašně" baví!"
print(a)
# tzv. escape znaku
a = "Cvičení nás \"strašně\" baví!"
print(a)
==== Standardni vstup ====
jmeno = input('zadejte vase jmeno: ')
prijmeni = input('zadejte vase prijmeni: ')
vek = input('zadejte svuj vek: ')
print('Jmenuji se ',jmeno, ' ', prijmeni, 'a je mi ', vek, 'let.')
=== Výše uvedenou větu můžeme vypsat i jinak: ===
print('Jmenuji se %s %s a je mi %s let.' % (jmeno, prijmeni, vek))
print(f'Jmenuji se {jmeno} {prijmeni} a je mi {vek} let.')
print('Jmenuji se {0:s} {1:s} a je mi {2:s} let.'.format(jmeno, prijmeni, vek))
=== Úloha 2 - Napište kolik Vám bude za dva roky ===
Použijte proměnnou **vek**. Zamyslete se nad postupem.
budouci_vek =
print('Za dva roky mi bude {0:d}.'.format(budouci_vek))
=== Standardni výstup - pokročilé formátování ===
x = 3.14159265
\u03C0 je Unicode znak pro $\pi$
print('\u03C0 = ',x)
Vyzkoušejte a zkuste pochopit jak fungují jednotlivé formátovací možnosti
print('\u03C0 = %s' % x)
print('\u03C0 = %d' % x)
print('\u03C0 = %.3d' % x)
print('\u03C0 = %.3f' % x)
print(f'\u03C0 = {x}')
print('\u03C0 = {0:.3f}'.format(x))
=== Úloha 3 - výpočet přepony pravoúhlého trojúhelníku ===
Nechte uživatele zapsat délky odvěsen (standardni vstup). Vypočtěte přeponu, výsledek zapište do nové proměnné a pomocí funkce pro standardní výstup vypište výsledek. //Odmocninu můžete vypočítat pomocí mocniny.//
=== Formátování textu ===
# Nový řádek
print('prvni radek\ndruhy radek')
# Tabulator
print('list:\n\tovoce\n\tzelenina')
=== Jak se zbavit přebytečných znaků ===
Co když uživatel omylem zadá omylem mezeru (nebo nějaký jiný znak) před/za svůj věk?
//Použití metod .rstrip, .lstrip, .strip//
vek = '*90 '
budouci_vek =
print(f'Uzivateli je {vek} let a za rok mu bude {budouci_vek}.')
=== Centrování/zarovnání řetězce s pomocí vyplňovacího znaku ===
//Použití metod .rjust, .ljust, .center//
Použijte libovolnou metodu pro centrování/zarovnání s libovolným vyplňovacím znakem tak, aby byla výsledná délka řetezce 30 znaků. Ověřte.
test_string = 'Konec cviceni'
# funkce len() složí pro výpočet délky/počtu znaků proměnné
print(len(test_string))
===== Úlohy na doma =====
* Instalace Pythonu na domácí počítač
* Instalace VS Code a potřebných rozšíření (Python, Jupyter), případně vhodného IDE pro práci s Pythonem
* Zkuste si otevřít Jupyter notebook pro první cvičení a ověřte, že vše funguje tak jak má
* Zkuste si otevřít Python z příkazové řádky (ověřte nějaké základní matematické operace)