\documentclass{beamer} \usepackage[utf8]{inputenc} \usepackage[czech]{babel} \usepackage{palatino} \usepackage{verbatim} \usetheme{Warsaw} \title{Programování 1: Funkce} \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}{Definice funkce} {\tt def stekej(): \\ ~~~~print("Haf!") \\ ~ \\ stekej() \\ stekej() } \bigskip \begin{itemize} \item Opakující se část programu stačí napsat jednou \\ a spustit vícekrát. \item Také jsme tím část programu pojmenovali, \\ takže je při čtení jasné, co má dělat. \end{itemize} \end{frame} % ---------------------------------------------------------------------- \begin{frame}{Funkce s parametrem} {\tt def stekej(n): \\ ~~~~for i in range(n): \\ ~~~~~~~~print("Haf!") \\ ~ \\ stekej(5) } \bigskip \begin{itemize} \item Funkci můžeme předat parametr. \item Když zavoláme {\tt stekej(5)}, funkce se spustí s~proměnnou~{\tt n} nastavenou na~{\tt 5}. \item Proměnné {\tt n} a~{\tt i} existují jen lokálně uvnitř funkce, \\ zvenčí nejsou vidět. \end{itemize} \end{frame} % ---------------------------------------------------------------------- \begin{frame}{Funkce s výsledkem} {\tt def minimum(a, b): \\ ~~~~if a < b: \\ ~~~~~~~~return a \\ ~~~~else: \\ ~~~~~~~~return b \\ ~ \\ print(minimum(3, 5)) } \bigskip \bigskip \begin{itemize} \item Příkaz {\bf return} ukončí vykonávání funkce a vrátí výsledek. \item Můžeme použít i {\bf return} bez výsledku (vrátí {\bf None}). \item Výsledek funkce nemusíme použít. \end{itemize} \end{frame} % ---------------------------------------------------------------------- \begin{frame}{Ještě o~parametrech} {\bf Nepovinné parametry:} \bigskip {\tt def stekej(n=1, zvuk="Haf!"): \\ ~~~~for i in range(n): \\ ~~~~~~~~print(zvuk) } \bigskip {\bf Různé způsoby volání:} \bigskip {\tt stekej() \\ stekej(5) \\ stekej(5, "HAF!") \\ stekej(5, zvuk="HAF!") \\ stekej(zvuk="HAF!") } \end{frame} % ---------------------------------------------------------------------- \begin{frame}{Viditelnost proměnných: chyták} {\tt zvuk = "Kuku!" \\ kolik\_hodin = 0 \\ ~ \\ def zakukej(): \\ ~~~~print(zvuk) \\ ~~~~kolik\_hodin += 1 } \bigskip \begin{itemize} \item Funkce vidí globální proměnnou {\bf zvuk} \item Proměnná {\bf kolik\_hodin} je ale lokální, \\ protože funkce do ní přiřazuje. \end{itemize} \end{frame} % ---------------------------------------------------------------------- \begin{frame}{Viditelnost proměnných: řešení} {\tt zvuk = "Kuku!" \\ kolik\_hodin = 0 \\ ~ \\ def zakukej(): \\ ~~~~{\color{blue}global kolik\_hodin} \\ ~~~~print(zvuk) \\ ~~~~kolik\_hodin += 1 } \end{frame} % ---------------------------------------------------------------------- \end{document}