From 1ab11651bf1863acaf6282285a6db4828546ca65 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 6 Jan 2020 16:16:04 +0100 Subject: [PATCH] Knihovna: WIP --- 12-knihovna/12-knihovna.tex | 240 ++++++++++++++++++++++++++++++++++++ 12-knihovna/Makefile | 3 + slidemac.tex | 2 + 3 files changed, 245 insertions(+) create mode 100644 12-knihovna/12-knihovna.tex create mode 100644 12-knihovna/Makefile diff --git a/12-knihovna/12-knihovna.tex b/12-knihovna/12-knihovna.tex new file mode 100644 index 0000000..1c16b2e --- /dev/null +++ b/12-knihovna/12-knihovna.tex @@ -0,0 +1,240 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[czech]{babel} +\usepackage{palatino} +\usepackage{verbatim} +\usetheme{Warsaw} +\title{Programování 1: Standardní knihovna} +\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}{Moduly a importování} + +Programy mohou být členěné na {\bf moduly}. + +\medskip + +Provedeme-li: + +\medskip + +\py{import math}{} + +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. + +\medskip + +Alternativně: + +\medskip + +\py{from math import sin\\from sys import *}{} + +navíc zkopíruje do aktuálního modulu definice z~importovaného modulu +(takže pak {\bf sin} znamená totéž co {\bf math.sin} apod.). + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Už jsme potkali\dots} + +\begin{itemize} +\item {\bf math} -- matematické funkce a konstanty + +\medskip + +\item {\bf operator} -- funkční podoba operátorů (třeba {\bf add} pro $+$) + +\medskip + +\item {\bf collections} -- typ {\bf defaultdict} + \begin{itemize} + \item také tu je {\bf deque} (double-ended queue) -- seznam s~rychlým přidáváním a~odebíráním + na obou koncích + \end{itemize} +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Binární řetězce} + +Typ {\bf bytes} obsahuje neměnnou posloupnost bajtů (8-bitových hodnot). + +~ + +Literály: {\tt b'Brum'}, {\tt b'\bs{}x62\bs{}x72\bs{}x75\bs{}x6d'} + +~ + +\py{% +"číslo".encode('utf-8') +}{% +b'\bs{}xc4\bs{}x8d\bs{}xc3\bs{}xadslo' +} + +\py{% +b'\bs{}xc4\bs{}x8d\bs{}xc3\bs{}xadslo'.decode('utf-8') +}{% +'číslo' +} + +\py{% +bytes([1, 2, 3]) +}{% +b'\bs{}x01\bs{}x02\bs{}x03' +} + +Při práci s~binárními soubory čteme/zapisujeme bytes. + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Binární seznamy} + +Typ {\bf bytearray:} + +\medskip + +\begin{itemize} +\item jako {\tt bytes}, ale lze modifikovat +\item seznam bajtů (prostorově efektivnější než běžný seznam) +\item {\tt bytearray(n)} -- seznam $n$ nul +\item {\tt bytearray([1,2,3])} +\item {\tt bytearray.decode('řetězec', 'utf-8')} +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Homogenní pole} + +\py{% +import array\\ +a = array.array('i', [1, 2])\\ +a.itemsize +}{% +4 +} + +\medskip + +{\bf 'i'} je kód typu položek, například: + +\medskip + +\begin{itemize} +\item {\bf i} -- integer: aspoň 32-bitové číslo se znaménkem +\item {\bf I} -- totéž bez znaménka +\item {\bf b} -- bajt se znaménkem +\item {\bf q} -- alespoň 64-bitové číslo se znaménkem +\item {\bf f} -- float: aspoň 32-bitové desetinné číslo +\item {\bf d} -- double: aspoň 64-bitové desetinné číslo +\end{itemize} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Zlomky} + +\py{% +from fractions import Fraction\\ +Fraction(1, 2) + Fraction(1, 3) +}{% +Fraction(5, 6) +} + +\py{% +Fraction(1/3) +}{% +Fraction(6004799503160661, 18014398509481984) +} + +\py{% +Fraction(1/3).limit\_denominator(100000) +}{% +Fraction(1, 3) +} + +\py{% +Fraction("1/3") +}{% +Fraction(1, 3) +} + +\py{% +print(Fraction(1, 3)) +}{% +'1/3' +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Pseudonáhodný generátor} + +\py{% +import random\\ +random.random() +}{% +0.28947857702914326 \cmt{(z~intervalu $[0,1]$)} +} + +\py{% +random.uniform(0, 1000) +}{% +50.64122748168531 \cmt{(z~intervalu $[a,b]$)} +} + +\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)} +} + +\py{% +random.seed(12345)\\ +random.random() +}{% +0.41661987254534116 \cmt{(vyjde vždy stejně)} +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\end{document} diff --git a/12-knihovna/Makefile b/12-knihovna/Makefile new file mode 100644 index 0000000..6697a17 --- /dev/null +++ b/12-knihovna/Makefile @@ -0,0 +1,3 @@ +SLIDES=12-knihovna.pdf + +include ../Makerules diff --git a/slidemac.tex b/slidemac.tex index c00e75f..4b2f7b8 100644 --- a/slidemac.tex +++ b/slidemac.tex @@ -15,3 +15,5 @@ } \def\cmt#1{\quad\hbox{\color{black}\rm #1}} + +\def\bs{\char92\relax} -- GitLab