From 1458798fe9133181cf96fb76feb3786a75e6efde Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Thu, 26 Sep 2019 11:30:08 +0200
Subject: [PATCH] =?UTF-8?q?01:=20Prvn=C3=AD=20program?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 01-uvod/01-uvod.tex       | 150 ++++++++++++++++++++++++++++++++------
 01-uvod/first-comments.py |  13 ++++
 01-uvod/first-even.py     |   5 ++
 01-uvod/first-input.py    |   9 +++
 01-uvod/first.py          |   4 +
 Makerules                 |   2 +-
 6 files changed, 161 insertions(+), 22 deletions(-)
 create mode 100644 01-uvod/first-comments.py
 create mode 100644 01-uvod/first-even.py
 create mode 100644 01-uvod/first-input.py
 create mode 100644 01-uvod/first.py

diff --git a/01-uvod/01-uvod.tex b/01-uvod/01-uvod.tex
index 7fe7d07..84233c5 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 0000000..7df2b95
--- /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 0000000..032f463
--- /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 0000000..a781154
--- /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 0000000..36fa9f1
--- /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 b3d45c3..4a1e6fd 100644
--- a/Makerules
+++ b/Makerules
@@ -1,6 +1,6 @@
 export SHELL=/bin/bash
 
-%.pdf: %.tex
+%.pdf: %.tex $(wildcard *.py)
 	pdflatex $<
 
 clean::
-- 
GitLab