{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Úvod do jazyka Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tato přednáška přestavuje stručný úvod do programovacího jazyka Python. Probrány jsou jak základní tak pokročilejší nástroje, které budou používány po zbytek kurzu. Pro zájemce o hlubší porozumění Pythonu doporučuji kurz [Vědecké programování v Pythonu](https://fjfi.pythonic.eu/) (12PYTH), ze kterého tato přednáška čerpá.\n", "\n", "Další užitečný kurz v češtině je například od [Pyladies](https://naucse.python.cz/course/pyladies/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(install-all)=\n", "## Instalace Pythonu a prostředí Jupyter notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "V druhé části kurzu Numerických metod budeme používat moderní prostědí [Jupyter notebook](https://jupyter.org/) (soubory s koncovkou `.ipynb`), které jsou velmi vhodné jak na výuku tak na rychlé otestování a prototipování kódu.\n", "\n", "Máte volbu mezi dvěmi možnostmi, jak sledovat přednášku a mít možnost spouštět kód:\n", "1. Pracovat v *online* interaktivním prostředí - *Binder*, ***JupiterHub FJFI***, *Google Colab*\n", "2. Pracovat *lokálně* na svém počítači" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Postup instalace\n", "\n", "**Online interaktivní prostředí** (doporučuji)\n", "\n", "Pro spuštení interaktivní verze této stránky klikněte ve vrchním menu na a zvolte:\n", "* *Binder* - ve kterém lze Jupyter notebook (JP) upravovat a následně uložit na disk\n", "* *JupyterHub* - místní prostědí běžící u nás na FJFI, umožňuje **uložit** ve vlastním účtu\n", "* *Google Colab* - na vlastní nebezpečí\n", "\n", "
\n", "\n", "Spuštění prostředí *Binder* může trvat několik desítek sekund. Jupyter notebook je v tomto prostředí uložen pod dočasným URL. Při zavření okna se postup ztratí! Je nutné tedy upravený soubor před zavřením okna stáhnout. \n", "
\n", "\n", "\n", "Další možnosti instalace nástrojů jsou popsány [zde](https://fjfi.pythonic.eu/posts/nastroje.html#Doporu%C4%8Den%C3%A1-sada-n%C3%A1stroj%C5%AF).\n", "\n", "Pro pokročilé možnosti *virtuálních prostředí* postupujte podle postupu [zde](https://fjfi.pythonic.eu/posts/prvni-krucky.html#Virtu%C3%A1ln%C3%AD-prost%C5%99ed%C3%AD) nebo [zde](https://valenpe7.github.io/numerical_methods/README.html#run-the-notebooks-offline).\n", "
\n", "\n", "\n", "Napište `print(\"Hello world!\")` a stiskněte `Shift` `+` `Enter` (nebo `Ctrl` `+` `Enter`)\n", "
\n", "\n", "\n", "Pro nápovědu možných funkcí stiskněte `Tab`.\n", "\n", "Pro zobrazení dokumentace k vybrané funkci stiskněte `Shift`+`Tab`.\n", "
\n", "\n", "\n", "Vnitřní bloky kódu se v Pythonu **odsazují** o `tab` nebo **čtyři mezery**! (V C++ je block uzavřen závorky `{` a `}`, a odsazení může být libovolné.)\n", "
\n", "\n", "\n", "`x = x + 1` je možné napsat zkratkou pomocí `x += 1` (ovšem C++ operátor `x++` v Pythonu použít nelze!).\n", "
\n", "\n", "\n", "V Pythonu je možné psát `else` blok za `while` cyklus, který se spustí ve chvíli, kdy je podmínka `False`.\n", "
\n", "\n", "\n", "Vyžádejte si od uživatele číslo pomocí funkce `input()` a vytiskněte jeho druhou mocninu.\n", "
\n", "\n", "\n", "Budete potřebovat také funkci `int()` nebo `float()`.\n", "
\n", "\n", "\n", "Numerické knihovny implementovány v rychlém jazyce (C, Fortran) pomocí optimalizovaných a odladěných algoritmů. Proto používání již implementovaných funkcí není jen pohodlnější, ale vede na významně rychlejší kód!\n", "\n", "Je dobrá praxe snažit se vyhnout používání cyklů tam, kde lze využít některou z knihovních funkcí (jednoduchý příklad - násobení dvou polí po prvcích).\n", "
\n", "\n", "\n", "Pro nápovědu možných funkcí v knihovně `numpy` stiskněte `Tab` po napsaní `np.`.\n", "\n", "Pro zobrazení dokumentace k vybrané funkci klikněte na funkci a stiskněte `Ctrl` nebo `Shift`+`Tab` (`Ctrl`+`Space` vs VS Code).\n", "
\n", "\n", "\n", "Vyzkoušejte si používání nápovědy a dokumentace. Najděte funkci, která vrátí diagonální matici s posloupoností čísel (1, 2, 3) na diagonále.\n", "\n", "Co dělá funkce `np.diagonal()`?\n", "
\n", "\n", "\n", "Vyberte libovolnou submatici matice `matrix` o velikosti 2x2, transponujte a uložte ji do původní matice na stejné místo.\n", "
\n", "\n", "\n", "Operace `C`*`C` násobí matice po prvcích (není to maticové násobení)!\n", "
\n", "\n", "\n", "Více se můžete dozvědet v [dokumentaci](https://numpy.org/doc/stable/reference/) nebo opět v kurzu [12PYTH](https://fjfi.pythonic.eu/posts/zaklady-numpy.html).\n", "
\n", "\n", "\n", "V Numpy také existuje modul `np.linalg`, ale oproti modulu knihovny `scipy` není zdaleka tak rozsáhlý.\n", "
\n", "\n", "\n", "Doplňte chybějící části označené `???` a opravte chyby, aby fungoval program na hru Oko bere (Black jack):\n", "
\n", "\n", "\n", "1. Implementujte třídící metodu [Selection sort](https://www.geeksforgeeks.org/selection-sort/).\n", "2. Implementujte [Quicksort](https://www.geeksforgeeks.org/quick-sort/).\n", "\n", "Pro nápovědu se můžete podívat do materiálu jiných cvičení [zde](https://mjirka.github.io/nme/Cviceni06vyplnene.html#razeni-vyberem-selection-sort).\n", "
\n", "\n", "\n", "V Pythonu lze prohodit hodnotu dvou proměnných pomocí výrazu `a,b = b,a` (v C++ funkce `swap(a,b)`).\n", "
\n", "