\documentclass{beamer} \usecolortheme{seagull} \usefonttheme{structurebold} \usepackage[utf8]{inputenc} \usepackage[swedish]{babel} \usepackage{minted} % code with syntax highlighting \usepackage{url} \title{Seminarium 01} \subtitle{Experimentering} \date{7 september 2021} \setlength{\parskip}{1em} \renewcommand{\baselinestretch}{1.2} \AtBeginSection[] % Do nothing for \section* { \begin{frame} \frametitle{Planering} \tableofcontents[currentsection] \end{frame} } \begin{document} \frame{\titlepage} \section*{Introduktion} \begin{frame} \frametitle{Lite om mig} Gustav Sörnäs \\ \texttt{gusso230@student.liu.se} Ett år på Y, numera D3. Handledare för halva U1.b. \end{frame} \begin{frame} \frametitle{Lite om er} D1 och U1 (och kanske några äldre). Inga förväntade förkunskaper innan universitetet. Redo att testa er fram själva / i små grupper med egen dator. \end{frame} \begin{frame} \frametitle{Lite om seminarieformen} Mer fokus på eget kodskrivande än ''Ett steg i taget'', men mer konkret än ''Diskussion och analys''. Fritt fram att byta spår under terminen. Innan seminariet: läs förberedelsematerialet och försök er på uppgifterna. \end{frame} \begin{frame} \frametitle{Lite om seminarieformen -- skicka in kod} Några uppgifter innebär att skriva kod. (Experimentera!) För att skicka in kod har vi två alternativ. \begin{enumerate} \item Egenutvecklad grej jag gjorde. Inte testat än. Klistra in er kod, skriv ert namn och tryck på ''Submit''. \item Google Drive (backup): Om min grej inte fungerar (högst troligt) får ni klistra in kod i ett gemensamt Google Drive-dokument. Vi löser länkproblemet om det kommer. \end{enumerate} \end{frame} \begin{frame} \frametitle{Dagens seminarium} \begin{itemize} \item Satser och uttryck. \item Analysera \texttt{fibonacci}. \item Implementera en matematiskt definerad funktion. \item Uppgift: skriv en egen funktion. \item Variablers synlighet. \end{itemize} Inte så mycket kodskrivning. Diskussioner först i mindre grupper och sedan i helklass. \end{frame} \begin{frame} \frametitle{Satser och uttryck} Sats (\textit{statement}): En typ av \emph{instruktion} som kan utföras av Python. Enkla satser (return, tilldelning, \dots) och sammansatta satser (\texttt{for}, \texttt{def}, \texttt{if}, \dots). Uttryck (\textit{expression}): Något som Python kan utvärdera till ett värde. Enkla uttryck (identifierare och \textit{literaler} (eller \textit{konstanter})) och sammansatta uttryck (additioner, subtraktioner, \dots). %% Diskussion och analys %% % Specialfall: uttryckssats. Ett uttryck är också en giltig sats \emph{om % den står som en ensam sats}. Används i princip bara när en funktion som % gör något anropas (t.ex. \texttt{print("Hej!")}. \end{frame} \begin{frame}[fragile] \frametitle{\texttt{fibonacci}} \begin{columns} \begin{column}{0.48\textwidth} \begin{minted}[linenos]{python} def fibonacci(n): if n < 3: return n - 1 a = 0 b = 1 for i in range(n - 2): c = b b = a + b a = c return b \end{minted} \end{column}% \begin{column}{0.48\textwidth} \begin{enumerate} \item Hur många satser finns i koden? Var finns dom? \item Hur många sammansatta uttryck finns i koden? %% Diskussion och analys %% % \item Hur många uttryckssatser finns i koden? \end{enumerate} \end{column}% \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{\texttt{fibonacci}} \begin{columns} \begin{column}{0.48\textwidth} \begin{minted}[linenos]{python} def fibonacci(n): if n < 3: return n - 1 a = 0 b = 1 for i in range(n - 2): c = b b = a + b a = c return b \end{minted} \end{column}% \begin{column}{0.48\textwidth} \begin{enumerate} \item Vad gör funktionen? \item Vad returnerar funktionen? \item Vilken indata hanterar funktionen? \item Vad används variabeln \texttt{c} till? Vad skulle den kunna heta istället? \item Är returvärdet ett heltal eller flyttal? \item Vad kommer hända om ni matar in (olika) flyttal? \end{enumerate} \end{column}% \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{\texttt{gcd}} \begin{columns} \begin{column}{0.48\textwidth} \begin{minted}{text} gcd(a, 0) = a gcd(a, b) = gcd(b, a mod b) \end{minted} \end{column}% \begin{column}{0.48\textwidth} \begin{enumerate} \item Beskriv hur beräkningen går till. \item Implementera \texttt{gcd} i Python. \item Räkna antalet satser och sammansatta uttryck i er Python-kod. \end{enumerate} \end{column}% \end{columns} \vfill{} \hfill{} \texttt{seminarium.sörnäs.se} \\ \end{frame} \begin{frame}[fragile] \frametitle{\texttt{gcd}} \begin{columns} \begin{column}{0.48\textwidth} Förslag: \begin{minted}[linenos]{python} def gcd(a, b): if b == 0: return a return gcd(b, a % b) \end{minted} \end{column}% \begin{column}{0.48\textwidth} \begin{enumerate} \item Beskriv hur beräkningen går till. \item Implementera \texttt{gcd} i Python. \item Räkna antalet satser och sammansatta uttryck i er Python-kod. \end{enumerate} \end{column}% \end{columns} \vfill{} \hfill{} \texttt{seminarium.sörnäs.se} \\ \end{frame} \begin{frame} \frametitle{Uppgift: \texttt{latest\_birthday\_before}} I grupper om minst fem personer, skriv en funktion som tar in två heltal (månad och dag) och returnerar namnet på den i gruppen vars födelsedag är närmast i tiden, räknat \emph{bakåt} från det inskickade datumet. \pause \vspace{1em} Exempel: \begin{columns}[T] \begin{column}{0.2\textwidth} \begin{enumerate} \item 20/8 \item 15/8 \item 18/7 \end{enumerate} \end{column}% \begin{column}{0.78\textwidth} \texttt{latest\_birthday\_before(18, 8) -> (15, 8)}\\ \texttt{latest\_birthday\_before(15, 8) -> (15, 8)}\\ \texttt{latest\_birthday\_before(14, 8) -> (18, 7)}\\ \pause \texttt{latest\_birthday\_before(10, 7) -> ?} \end{column}% \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Uppgift: } \begin{columns} \begin{column}{0.48\textwidth} \begin{minted}[fontsize=\scriptsize,linenos]{python} g = 0 def outer(in1): a = "a" def inner(in2): print(a) # 1 c = "c" a = "a from inner" print(in2) # 2 print(c) # 3 print(a) # 4 inner("into inner") print(c) # 5 print(a) # 6 if g == 0: d = "g = 0" else: e = "g != 0" print(d) # 7 print(e) # 8 \end{minted} \end{column}% \begin{column}{0.48\textwidth} \begin{enumerate} \item Vilka print-satser kommer fungera? Vilka kommer att krascha? \item Vad skriver dom som fungerar ut? \end{enumerate} \end{column}% \end{columns} \end{frame} \end{document}