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}
\title{Programování 1: Množiny a slovníky}
\title{Programování 1.8: Lambda funkce a generátory}
\input ../slidemac.tex
......@@ -16,87 +16,88 @@
\def\{{\char123\relax}
\def\}{\char125\relax}
% ----------------------------------------------------------------------
\begin{frame}{Množiny}
\begin{frame}{Sčítáme sety (česky množiny)?}
\py{%
zvířata = \{"pes", "pes", "kočka", "výr"\}\\
zvířata
[1,2,3] + [4,5,6]
}{%
\{'výr', 'pes', 'kočka'\}
[1, 2, 3, 4, 5, 6]
}
\py{%
"kočka" in zvířata
\{1,2,3\} + \{4,5,6\}
}{%
True
TypeError: unsupported operand...
}
\py{%
"hroznýš" in zvířata
a=set("kajak") \\
b=set("javor") \\
print(a,b)
}{%
False
(\{'j', 'k', 'a'\}, \{'o', 'a', 'v', 'j', 'r'\})
}
\py{%
set(["a", "b", "c"])
a \& b \cmt{(intersection/průnik)}
}{%
\{'c', 'b', 'a'\}
\{'j', 'a'\}
}
\py{%
set("abrakadabra")
a | b \cmt{(union/sjednocení)}
}{%
\{'r', 'a', 'k', 'b', 'd'\}
\{'o', 'r', 'a', 'v', 'j', 'k'\}
}
\py{%
set()
a - b \cmt{(rozdíl)}
}{%
set() \cmt{(pozor, {\tt \{\}} znamená něco jiného)}
\{'k'\}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Operace s množinami}
\begin{frame}{Množinové operace pro pokročilé}
\py{%
a=set("abrakadabra") \\
b=set("popokatepetl") \\
"".join(sorted(a)) \cmt{(umí se chovat jako seznam)}
a=set("kajak") \\
b=set("javor") \\
print(a,b)
}{%
'abdkr'
(\{'j', 'k', 'a'\}, \{'o', 'a', 'v', 'j', 'r'\})
}
\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{%
a | b \cmt{(sjednocení)}
}{%
\{'r','p','a','e','k','b','o','t','d','l'\}
}
Od Pythonu 3.9 lze i se slovníky!
\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{%
a.remove("r") \cmt{(odebere prvek)}\\
b.add("b") \cmt{(přidá prvek)}\\
a - b
b | a
}{%
\{'d'\}
\{'a': 0, 'c': 1, 'b': 0\} \cmt{(zůstane první klíč)}
}
\end{frame}
......@@ -131,18 +132,56 @@ list(podle\_délek.items())
\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,
ale ne seznam nebo množina).
\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}
% ----------------------------------------------------------------------
\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}
......
......@@ -175,36 +175,7 @@ b()
\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