Commit 5eadaff5 authored by cermak's avatar cermak
Browse files

Lecture 3

parent 7791fc4c
Pipeline #15452 passed with stage
in 3 minutes and 26 seconds
\documentclass{beamer} \documentclass{beamer}
\input ../slidemac.tex \input ../slidemac.tex
\title{Programování 1: Seznamy} \title[NMIN111]{Programování 1: Seznamy}
\begin{document} \begin{document}
\begin{frame} \maketitle
\titlepage
% ----------------------------------------------------------------------
\begin{markdown}
%%begin novalidate
### Teoretický úvod
Python má několik druhů polí
- `list` (seznam)
- `a = [1,2,3]`
- různé datové typy
- dají se měnit (*mutable*) \pause
- `tuple` (n-tice)
- `a = 1,2,3` nebo `a = (1,2,3)`
- různé datové typy
- nedají se měnit (*immutable*)! \pause
- `array`
- `a = array(1,2,3)`
- je potřeba externí knihovna (`array` nebo `numpy`)
- pouze stejné datové typy
- mnohem víc možností (maticové operace)
\end{frame}
### Generátory, ukazatele
Generátor je
- funkce, která umí postupně dávat k dispozici hodnoty
- později se je naučíme psát
- jsou vyhodnoceny až při průchodu cyklem \pause
Pointery v pythonu
- nejsou
- *mutable* objekty se dají měnit - odkazujeme na ně referencí
- má to své následky, jak uvidíme později
\end{frame} \end{frame}
%%novalidate
\end{markdown}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
...@@ -18,6 +61,8 @@ cisla = [11, 22, 33, 44, 55] ...@@ -18,6 +61,8 @@ cisla = [11, 22, 33, 44, 55]
}{% }{%
} }
Indexuje se od nuly!
\py{% \py{%
cisla[0] cisla[0]
}{% }{%
...@@ -65,33 +110,9 @@ matice[0][2] ...@@ -65,33 +110,9 @@ matice[0][2]
13 13
} }
\end{frame} Na práci s maticemi je lepší použít numpy.array
% ----------------------------------------------------------------------
% \begin{frame}{Řetězec se také chová jako seznam} \end{frame}
%
% \py{%
% slovo = "mňau"\\
% len(slovo)
% }{%
% 4
% }
%
% \py{%
% slovo[1]
% }{%
% 'ň'
% }
%
% \py{%
% slova = ["mňau", "haf", "kvák"]\\
% slova[1]
% }{%
% 'haf'
% }
%
% \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
...@@ -129,7 +150,7 @@ for i in range(len(x)):\. ...@@ -129,7 +150,7 @@ for i in range(len(x)):\.
\begin{frame}{Operace se seznamy} \begin{frame}{Operace se seznamy}
\py{% \py{%
slova = ["mňau", "haf", "kvák"]\\ slova = ["mňau", "haf", "kvák"]\\
slova.append("íá")\\ slova.append("íá")\\
slova slova
...@@ -153,6 +174,33 @@ slova ...@@ -153,6 +174,33 @@ slova
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Řetězec se také chová trochu jako seznam}
\py{%
slovo = "vrak"\\
len(slovo)
}{%
4
}
\py{%
slovo[1]
}{%
'r'
}
\py{%
slovo[0] = 'm'\\
}{%
TypeError: 'str' object does not support item assignment
}
Řetězec je immutable (jako n-tice tuple)!
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Chyták: proměnné na seznamy jen odkazují!} \begin{frame}{Chyták: proměnné na seznamy jen odkazují!}
\py{% \py{%
...@@ -188,6 +236,15 @@ m ...@@ -188,6 +236,15 @@ m
\end{frame} \end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Vypsání čísel pozpátku}
\pycode{seznam-pozpatku-alt.py}
\end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Něco navíc o generátorech} \begin{frame}{Něco navíc o generátorech}
...@@ -226,4 +283,17 @@ list(range(10, 0, -1)) ...@@ -226,4 +283,17 @@ list(range(10, 0, -1))
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Úkoly na hodinu}
Uložte do seznamu prvních N Fibonacciho čísel.
Eratosthenovo síto: najděte prvočísla mezi 1 a N
Úkol v Recodexu: celé to obalte do funkce (detaily o funkcích později)
\pycode{ukol.py}
\end{frame}
\end{document} \end{document}
#!/usr/bin/env python3
# Alternativní řešení
seznam = [1,2,3]
#použití slicing
for i in seznam[::-1]:
print(i)
#použití funkce reverse
seznam.reverse()
for i in seznam:
print(i)
# ulož do souboru reseni.py
def prvocisla(N):
out = []
# udělej něco
return out
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