diff --git a/07-compr/07-compr.tex b/07-compr/07-compr.tex new file mode 100644 index 0000000000000000000000000000000000000000..496d4370d3d04be031efdc45f672c18327440128 --- /dev/null +++ b/07-compr/07-compr.tex @@ -0,0 +1,199 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[czech]{babel} +\usepackage{palatino} +\usepackage{verbatim} +\usetheme{Warsaw} +\title{Programování 1: List comprehensions} +\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}} +\institute{Katedra Aplikované Matematiky\\MFF UK Praha} +\date{2019} +\begin{document} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}{} +\setbeamerfont{title page}{family=\rmfamily} +\shorthandoff{"} + +\begin{frame} +\titlepage +\end{frame} + +\input ../slidemac.tex + +% ---------------------------------------------------------------------- + +\begin{frame}{Odbočka: n-tice (tuples)} + +\py{% +t = (1, 2, 3) \cmt{(vytváříme trojici)} \\ +t[1] \cmt{(fungují běžné operace se seznamy)} +}{% +2 +} + +\py{% +t[0] = 0 +}{% +<chyba> \cmt{(n-tice nelze měnit)} +} + +\py{% +list(t) +}{% +[1, 2, 3] \cmt{(převedení n-tice na seznam)} +} + +\py{% +tuple([4, 5]) +}{% +(4, 5) \cmt{(nebo seznamu na n-tici)} +} + +\py{% +s = 11, 22, 33 \\ +s \cmt{(více hodnot oddělených čárkou utvoří n-tici)} +}{% +(11, 22, 33) +} + +\py{% +a, b, c = s \\ +b \cmt{(přiřazení každého prvku n-tice/seznamu zvlášť)} +}{% +22 +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Příklad: Funkce s více výsledky} + +\verbatiminput{deleni.py} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{List comprehension} + +\py{% +seznam=[11, 12, 13, 14, 15]\\ +[a**2 for a in seznam] +}{% +[121, 144, 169, 196, 225] +} + +\py{% +[a**2 for a in seznam if a\%2 == 1] +}{% +[121, 169, 225] +} + +\py{% +[(a,b) for a in [1,2,3] for b in [5,6]] +}{% +[(1,5), (1,6), (2,5), (2,6), (3,5), (3,6)] +} + +\py{% +[(a,b) for a in range(4) for b in range(4) if a<b] +}{% +[(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)] +} + +\py{% +věta="Kobyla má malý bok" \\ +[len(slovo) for slovo in věta.split()] +}{% +[6, 2, 4, 3] +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{List comprehension: Další triky} + +\py{% +[int(s) for s in input().split()] \\ +1 2 3 4 5 \cmt{(načtení seznamu čísel na jednom řádku)} +}{% +[1, 2, 3, 4, 5] +} + +\py{% +s=[[1, 2, 3], [4, 5]] \\ +[x for t in s for x in t] +}{% +[1, 2, 3, 4, 5] \cmt{(\uv{zploštění} seznamu)} +} + +\py{% +m=[[0]*5 for \_ in range(3)] \\ +m \cmt{(výroba matice: seznam 3 různých seznamů nul)} +}{% +[[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]] +} + +\py{% +n=[[1, 2, 3], [4, 5, 6]] \\ +[[r[i] for r in n] for i in range(3)] +}{% +[[1,4], [2,5], [3,6]] \cmt{(transpozice matice)} +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Agregační funkce} + +\py{% +s = [2**x \% 37 for x in range(10)] \\ +s +}{% +[1, 2, 4, 8, 16, 32, 27, 17, 34, 31] +} + +\py{% +min(s) +}{% +1 +} + +\py{% +max(s) +}{% +34 +} + +\py{% +sum(s) +}{% +172 +} + +\py{% +all([x < 37 for x in s]) +}{% +True \cmt{(and přes všechny prvky seznamu)} +} + +\py{% +any([x > 33 for x in s]) +}{% +True \cmt{(or přes všechny prvky seznamu)} +} + +\py{% +sorted(s) +}{% +[1, 2, 4, 8, 16, 17, 27, 31, 32, 34] +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\end{document} diff --git a/07-compr/Makefile b/07-compr/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fc4966b56c0d447a90054aeb295cd0389a7ada43 --- /dev/null +++ b/07-compr/Makefile @@ -0,0 +1,3 @@ +SLIDES=07-compr.pdf + +include ../Makerules diff --git a/07-compr/deleni.py b/07-compr/deleni.py new file mode 100644 index 0000000000000000000000000000000000000000..31e78a1a2b77c0c66a1f90e9c74a736e13299801 --- /dev/null +++ b/07-compr/deleni.py @@ -0,0 +1,4 @@ +def deleni(x, y): + return x//y, x%y + +podil, zbytek = deleni(1000, 7)