Commit 755fad8d authored by cermak's avatar cermak
Browse files

Last lesson

parent 24fb6fa7
Pipeline #24983 passed with stage
in 1 minute and 34 seconds
......@@ -25,15 +25,12 @@ Provedeme-li:
\medskip
\py{import math}{}
\py{import math\\math.sin(1)}{}
načte se soubor {\tt math.py} (hledá se v~aktuálním adresáři a pak v~knihovnách).
Potom píšeme:
\medskip
\py{math.sin(1)}{}
Formálně: {\bf math} je objekt, jako jeho atributy vidíme funkce a~proměnné
definované uvnitř modulu.
......@@ -155,6 +152,44 @@ a.itemsize
% ----------------------------------------------------------------------
\begin{frame}{Lepší pole s NumPy}
pip install numpy
\medskip
\py{%
import numpy as np\\
a = np.array([1, 2])\\
a.itemsize
}{%
4
}
\py{%
a.dtype
}{%
dtype('int32')
}
\py{%
a = np.array([1,2.2])\\
a.dtype
}{%
dtype('float64')
}
\py{%
a = np.array([1,221453543453453453453453473])\\
a.dtype
}{%
dtype('O')
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Zlomky}
\py{%
......@@ -196,7 +231,7 @@ print(Fraction(1, 3))
\py{%
import random\\
random.random()
random.random() \cmt{(Mersenne Twister)}
}{%
0.28947857702914326 \cmt{(z~intervalu $[0,1]$)}
}
......@@ -210,13 +245,7 @@ random.uniform(0, 1000)
\py{%
random.randrange(0, 1000)
}{%
524 \cmt{(celé číslo od $a$ do~$b-1$)}
}
\py{%
random.randrange(1000)
}{%
451 \cmt{(stejně jako u~range jde dolní mez vynechat)}
524 \cmt{(celé číslo od $a$ do~$b-1$, dolní mez lze vynechat)}
}
\py{%
......@@ -263,6 +292,35 @@ random.sample(range(1000000), k=5)
% ----------------------------------------------------------------------
\begin{frame}{Pseudonáhodný výběr}
Pozor, Mersenne twister algoritmus je sice robustní (perioda 2**19937-1), ale není vhodný pro kryptografii. Statistickou analýzou lze odhadnout, kde v sekvenci jsme.
\medskip
Proto Python ještě umí:
\medskip
\py{%
import secrets\\
secrets.randbelow(10) \cmt{(Crypto-secure os-based)}
}{%
6 \cmt{(celé číslo do $a$-1)}
}
\medskip
Pro authentifikaci lze použít například:
\medskip
\py{%
secrets.token\_hex(16)
}{%
f9bf78b9a18ce6d46a0cd2b0b86df9da
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Další zajímavé moduly}
\begin{itemize}
......@@ -278,4 +336,20 @@ random.sample(range(1000000), k=5)
% ----------------------------------------------------------------------
\begin{frame}{Úkoly na poslední hodinu}
\begin{itemize}
\item Simulujte 1000 hodů kostkou. Spočítejte výskyty každého čísla. Kolik jich je nejméně a kolik nejvíce?
\item Generujte náhodně body ve čtverci [-1,1] × [-1,1]. Počítejte, kolik z nich padlo do jednotkového kruhu, a tím aproximujte $\pi$.
\item Generujte náhodně permutace slov věty "Kobyla má malý bok".
\item Pomocí Malé Fermatovy věty testujte, zda je nějaké velké číslo pravděpodobně prvočíslem. Hodí se tříparametrová funkce pow(a, b, c), která efektivně spočítá $a^b$ mod $c$.
\item Simulujte náhodnou procházku po celých číslech od 0 do N. Začínáme v 0, v každém kroku náhodně buď zvýšíme nebo snížíme o 1 (v 0 jen zvyšujeme). Po kolika krocích se dostaneme do N?
\end{itemize}
\end{frame}
% ----------------------------------------------------------------------
\end{document}
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