diff --git a/01-uvod/01-uvod.tex b/01-uvod/01-uvod.tex index 7fe7d077b10eb5469a60cf4b9b89e8d80f418301..84233c528d5172673899b83fb9433e1b05b7cc92 100644 --- a/01-uvod/01-uvod.tex +++ b/01-uvod/01-uvod.tex @@ -1,6 +1,8 @@ \documentclass{beamer} \usepackage[utf8]{inputenc} +\usepackage[czech]{babel} \usepackage{palatino} +\usepackage{verbatim} \usetheme{Warsaw} \title{Programování 1: Úvod do Pythonu} \author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}} @@ -15,12 +17,16 @@ \titlepage \end{frame} -\def\py#1#2#3{% - {\tt\color{black}>>> \color{blue}#1}\\% - {\tt\color{red}#2}\\% - \def\tmp{#3}\ifx\tmp\empty\else - \smallskip - {\color{teal}#3}\\% +\def\>{\color{black}>>> \color{blue}} + +\def\=#1{{\color{teal}#1}\endgraf\smallskip} + +\def\py#1#2{% + \def\tmp{#1}\ifx\tmp\empty\else + {\tt\def\\{\hfil\break\>}\>#1}\\% + \fi + \def\tmp{#2}\ifx\tmp\empty\else + {\tt\color{red}#2}\\% \fi \medskip } @@ -29,17 +35,17 @@ \begin{frame}{Python jako kalkulačka} -\py{1+1}{2}{} +\py{1+1}{2} -\py{2+3*4+1}{15}{} +\py{2+3*4+1}{15} -\py{2+3 * 4+1}{15}{} +\py{2+3 * 4+1}{15} -\py{(2+3)*(4+1)}{25}{} +\py{(2+3)*(4+1)}{25} -\py{2**10}{1024}{} +\py{2**10}{1024} -\py{2**100}{1267650600228229401496703205376}{} +\py{2**100}{1267650600228229401496703205376} \end{frame} @@ -47,13 +53,17 @@ \begin{frame}{Desetinná čísla} -\py{1/3}{0.3333333333333333}{Výsledek je spočítán s omezenou přesností} +\={Dělení vytváří \uv{desetinná} čísla s~omezenou přesností:} +\py{1/3}{0.3333333333333333} -\py{1/3*3}{1.0}{Pozor, tohle není přesná jednička.} +\={Pozor, ne každá \uv{jednička} je rovna jedné:} +\py{1/3*3}{1.0} -\py{1/3*3 > 0}{True}{Vskutku, je o kousek větší.} +\={Vskutku, je o kousek větší:} +\py{1/3*3 > 0}{True} -\py{1/(2**100)}{7.888609052210118e-31}{Notace s mantisou a exponentem: $m\cdot10^e$.} +\={Notace s mantisou a exponentem: $m\cdot10^e$.} +\py{1/(2**100)}{7.888609052210118e-31} \end{frame} @@ -61,13 +71,18 @@ \begin{frame}{Celočíselné dělení} -\py{7//3}{2}{} +\={Celočíselné dělení:} +\py{7//3}{2} -\py{7\%3}{1}{Zbytek po dělení} +\={Zbytek po dělení (modulo):} +\py{7\%3}{1} -\py{-7//3}{-3}{Zaokrouhlujeme dolů, nikoliv k nule} +\={Dělení záporného čísla zaokrouhluje dolů, nikoliv k nule:} +\py{-7//3}{-3} +\py{-(7//3)}{-2} -\py{-7\%3}{2}{Vždy platí {\tt (a//b)*b + (a\%b) = a}} +\={Vždy platí {\tt (a//b)*b + (a\%b) = a}} +\py{-7\%3}{2} \end{frame} @@ -75,7 +90,100 @@ \begin{frame}{Proměnné} -\py{a=1\\b=1\\a+b}{2}{} +\={Hodnotu výrazu si můžeme pojmenovat:} +\py{a=100\\b=23\\a+b}{23} + +\={Obsah proměnné jde měnit:} +\py{soucet=0\\soucet=soucet+10\\soucet=soucet+3\\soucet}{13} + +\={Zkrácený zápis:} +\py{soucet+=1\\soucet}{14} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Matematické funkce} + +\={Matematická knihovna:} +\py{import math\\math.pi}{3.141592653589793} + +\py{math.sin(math.pi / 3)}{0.8660254037844386} + +\={Voláme o pomoc:} +\py{help(math.sin)\\help(math)}{} + +\={Místo {\tt math.sin} můžeme psát prostě {\tt sin}:} +\py{from math import *\\sin(0)}{} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Klademe Pythonu otázky} + +\py{5**7 > 7**5}{True} + +\py{cos(0) < 0}{False} + +\py{0.8 <= sin(pi/3) <= 0.9}{True} + +\py{pi>3 and pi<4}{True} + +\py{x>0 or not x>0}{True} + +\py{1 == 1}{True} + +\py{1 != 2}{True} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Náš první program: počítáme od 1 do 10} + +\verbatiminput{first.py} + +\bigskip + +Odsazování je povinné, udává blokovou strukturu programu. +Pak je jasné, které příkazy jsou uvnitř cyklu, a~které už za ním. + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Náš první program: vypisujeme jen sudá čísla} + +\verbatiminput{first-even.py} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Náš první program: zeptáme se, do kolika počítat} + +\verbatiminput{first-input.py} + +\bigskip + +V~uvozovkách se zapisují řetězce (o~nich později). + +Funkce {\tt input()} načte řetězec, {\tt int()} ho převede na číslo. + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Náš první program: ještě trocha komentářů} + +\verbatiminput{first-comments.py} + +\bigskip + +Od {\tt\#} do konce řádku se vše ignoruje. + +Prvni řádek pod Linuxem říká, čím se má soubor spustit. \end{frame} diff --git a/01-uvod/first-comments.py b/01-uvod/first-comments.py new file mode 100644 index 0000000000000000000000000000000000000000..7df2b95b1d4d41d1432669525df2321d71662c7e --- /dev/null +++ b/01-uvod/first-comments.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +# Nejprve zjistíme, do kolika počítat +print("Do kolika chceš počítat?") +n = int(input()) + +# Aktuální číslo +i = 1 + +while i <= n: # Ještě pokračovat? + if i%2 == 0: # Je číslo sudé? + print(i) + i += 1 # Další, prosím! diff --git a/01-uvod/first-even.py b/01-uvod/first-even.py new file mode 100644 index 0000000000000000000000000000000000000000..032f4639fc2088165936d85e970d7ac747e7db90 --- /dev/null +++ b/01-uvod/first-even.py @@ -0,0 +1,5 @@ +i = 1 +while i <= 10: + if i%2 == 0: + print(i) + i += 1 diff --git a/01-uvod/first-input.py b/01-uvod/first-input.py new file mode 100644 index 0000000000000000000000000000000000000000..a781154341014790df7e3c0abf4bfdf7abbbedad --- /dev/null +++ b/01-uvod/first-input.py @@ -0,0 +1,9 @@ +print("Do kolika chceš počítat?") +n = int(input()) + +i = 1 + +while i <= n: + if i%2 == 0: + print(i) + i += 1 diff --git a/01-uvod/first.py b/01-uvod/first.py new file mode 100644 index 0000000000000000000000000000000000000000..36fa9f1e7429481a6286759ba1e2f98fc229b51d --- /dev/null +++ b/01-uvod/first.py @@ -0,0 +1,4 @@ +i = 1 +while i <= 10: + print(i) + i += 1 diff --git a/Makerules b/Makerules index b3d45c3ddf5253d57b2cb0aec9faea13f68a9768..4a1e6fd0dca63aa341601b57233739694babf952 100644 --- a/Makerules +++ b/Makerules @@ -1,6 +1,6 @@ export SHELL=/bin/bash -%.pdf: %.tex +%.pdf: %.tex $(wildcard *.py) pdflatex $< clean::