Commit d655f8d4 authored by cermak's avatar cermak
Browse files

lesson 8

parent a54a10a5
Pipeline #20130 failed with stage
in 1 minute and 26 seconds
\documentclass{beamer} \documentclass{beamer}
\title{Programování 1: Množiny a slovníky} \title{Programování 1.8: Lambda funkce a generátory}
\input ../slidemac.tex \input ../slidemac.tex
...@@ -16,87 +16,88 @@ ...@@ -16,87 +16,88 @@
\def\{{\char123\relax} \def\{{\char123\relax}
\def\}{\char125\relax} \def\}{\char125\relax}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Množiny} \begin{frame}{Sčítáme sety (česky množiny)?}
\py{% \py{%
zvířata = \{"pes", "pes", "kočka", "výr"\}\\ [1,2,3] + [4,5,6]
zvířata
}{% }{%
\{'výr', 'pes', 'kočka'\} [1, 2, 3, 4, 5, 6]
} }
\py{% \py{%
"kočka" in zvířata \{1,2,3\} + \{4,5,6\}
}{% }{%
True TypeError: unsupported operand...
} }
\py{% \py{%
"hroznýš" in zvířata a=set("kajak") \\
b=set("javor") \\
print(a,b)
}{% }{%
False (\{'j', 'k', 'a'\}, \{'o', 'a', 'v', 'j', 'r'\})
} }
\py{% \py{%
set(["a", "b", "c"]) a \& b \cmt{(intersection/průnik)}
}{% }{%
\{'c', 'b', 'a'\} \{'j', 'a'\}
} }
\py{% \py{%
set("abrakadabra") a | b \cmt{(union/sjednocení)}
}{% }{%
\{'r', 'a', 'k', 'b', 'd'\} \{'o', 'r', 'a', 'v', 'j', 'k'\}
} }
\py{% \py{%
set() a - b \cmt{(rozdíl)}
}{% }{%
set() \cmt{(pozor, {\tt \{\}} znamená něco jiného)} \{'k'\}
} }
\end{frame} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Operace s množinami} \begin{frame}{Množinové operace pro pokročilé}
\py{% \py{%
a=set("abrakadabra") \\ a=set("kajak") \\
b=set("popokatepetl") \\ b=set("javor") \\
"".join(sorted(a)) \cmt{(umí se chovat jako seznam)} print(a,b)
}{% }{%
'abdkr' (\{'j', 'k', 'a'\}, \{'o', 'a', 'v', 'j', 'r'\})
} }
\py{% \py{%
a \& b \cmt{(průnik)} a \^{} b \cmt{(symetrický rozdíl)} \\
(a - b) | (b - a) \cmt{(ekvivalent)}
}{% }{%
\{'k', 'a'\} \{'v', 'o', 'k', 'r'\}
} }
\py{% Od Pythonu 3.9 lze i se slovníky!
a | b \cmt{(sjednocení)}
}{%
\{'r','p','a','e','k','b','o','t','d','l'\}
}
\py{% \py{%
a - b \cmt{(rozdíl)} a = \{"a": 0, "b": 0\} \\
b = \{"a": 1, "c": 1\} \\
a | b
}{% }{%
\{'r', 'd', 'b'\} \{'a': 1, 'b': 0, 'c': 1\} \cmt{(zůstane poslední value)}
} }
\py{% \py{%
a.remove("r") \cmt{(odebere prvek)}\\ b | a
b.add("b") \cmt{(přidá prvek)}\\
a - b
}{% }{%
\{'d'\} \{'a': 0, 'c': 1, 'b': 0\} \cmt{(zůstane první klíč)}
} }
\end{frame} \end{frame}
...@@ -131,18 +132,56 @@ list(podle\_délek.items()) ...@@ -131,18 +132,56 @@ list(podle\_délek.items())
\end{frame} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Shrnutí: Vlastnosti množin a slovníků} \begin{frame}{Generátory}
\begin{itemize} {\bf Generátor s~yield (korutina):}
\medskip
\pycode{generator.py}
\medskip
{\bf Generátorové výrazy:} jako list comprehension, ale () místo []
\item Klíčem může být libovolný neměnný typ (třeba číslo, řetězec či tuple, \medskip
ale ne seznam nebo množina).
\py{%
g = (i**2 for i in range(100)) \\
max(g)
}{%
9801 \cmt{(seznam není nikde ulozený)}
}
\py{%
max(i**2 for i in range(100))
}{%
9801 \cmt{(nejsou třeba dvojí závorky)}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Naše první hra}
Robot Karel
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Úkoly na hodinu}
\begin{itemize}
\item Operace s~jednotlivými prvky běží v~konstantním čase (aspoň průměrně). \item Napište generátor mujrange, který bude pracovat stejně jako range (s jedním parametrem)
\item Napište generátor, který dostane dva seznamy a bude generovat jejich kartézský součin.
\item Spočítejte frekvence všech k-gramů (k-tic znaků) v textu. K-gramy vypište uspořádaně podle frekvence.
\item Operace s~celou množinou běží v~lineárním čase.
\end{itemize} \end{itemize}
......
...@@ -175,36 +175,7 @@ b() ...@@ -175,36 +175,7 @@ b()
\end{frame} \end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Generátory}
{\bf Generátor s~yield (korutina):}
\medskip
\pycode{generator.py}
\medskip
{\bf Generátorové výrazy:} jako list comprehension, ale () místo []
\medskip
\py{%
g = (i**2 for i in range(100)) \\
max(g)
}{%
9801 \cmt{(seznam není nikde ulozený)}
}
\py{%
max(i**2 for i in range(100))
}{%
9801 \cmt{(nejsou třeba dvojí závorky)}
}
\end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment