Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Čermák Petr
Prm1
Commits
d655f8d4
Commit
d655f8d4
authored
Nov 20, 2020
by
cermak
Browse files
lesson 8
parent
a54a10a5
Pipeline
#20130
failed with stage
in 1 minute and 26 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
08-slovniky/08-
slovniky
.tex
→
08-slovniky/08-
funkce2
.tex
View file @
d655f8d4
\documentclass
{
beamer
}
\title
{
Programování 1
: Množiny a slovník
y
}
\title
{
Programování 1
.8: Lambda funkce a generátor
y
}
\input
../slidemac.tex
...
...
@@ -16,87 +16,88 @@
\def\{
{
\char
123
\relax
}
\def\}
{
\char
125
\relax
}
% ----------------------------------------------------------------------
\begin{frame}
{
M
nožiny
}
\begin{frame}
{
Sčítáme sety (česky m
nož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
\}
}{
%
T
rue
T
ypeError: 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}
...
...
10-lambda
/generator.py
→
08-slovniky
/generator.py
View file @
d655f8d4
File moved
10-lambda/10-lambda.tex
View file @
d655f8d4
...
...
@@ -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}
% ----------------------------------------------------------------------
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment