diff options
author | Prabhu Ramachandran | 2018-05-15 19:17:01 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2018-05-15 19:17:01 +0530 |
commit | 2c5145f262e82996c9c2424159e5eb5dde47fae7 (patch) | |
tree | 86e1893822781826734eb59dc36ea73cab517066 /basic_python/practice_functions.tex | |
parent | cf7c9cc1bb9e4f004e547aaa728fe6254f3cf704 (diff) | |
download | python-workshops-2c5145f262e82996c9c2424159e5eb5dde47fae7.tar.gz python-workshops-2c5145f262e82996c9c2424159e5eb5dde47fae7.tar.bz2 python-workshops-2c5145f262e82996c9c2424159e5eb5dde47fae7.zip |
Reorganize files so order is obvious.
Diffstat (limited to 'basic_python/practice_functions.tex')
-rw-r--r-- | basic_python/practice_functions.tex | 357 |
1 files changed, 0 insertions, 357 deletions
diff --git a/basic_python/practice_functions.tex b/basic_python/practice_functions.tex deleted file mode 100644 index d71168c..0000000 --- a/basic_python/practice_functions.tex +++ /dev/null @@ -1,357 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Tutorial slides on Python. -% -% Author: FOSSEE -% Copyright (c) 2017, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[14pt,compress]{beamer} - -\input{macros.tex} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Title page -\title[Basic Python]{Practice exercises: functions} - -\author[FOSSEE Team] {The FOSSEE Group} - -\institute[FOSSEE -- IITB] {Department of Aerospace Engineering\\IIT Bombay} -\date[] {Mumbai, India} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DOCUMENT STARTS -\begin{document} - -\begin{frame} - \titlepage -\end{frame} - -\begin{frame}[fragile,plain] - \frametitle{Note: Python 2.x and 3.x} - - If you are using Python 2.x - \begin{itemize} - \item Use \typ{raw\_input} instead of \typ{input} - \item Use the following for \typ{print} - \end{itemize} - \begin{lstlisting} -from __future__ import print_function -\end{lstlisting} -\end{frame} - -\begin{frame}[plain] - \frametitle{Exercise: function without arguments} - \begin{enumerate} - \item Define a function called \typ{prompt} - \item The function should ask the user to enter their name (no prompt) - \item The function should not take any arguments - \item The function should not return anything - \item The function should print \typ{Hello <name>} - \end{enumerate} - For example if the user enters \typ{Sam}, print: - Hello Sam -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def prompt(): - name = input() - print('Hello', name) -\end{lstlisting} -\end{frame} - -\begin{frame}[plain] - \frametitle{Exercise: function with one argument} - \begin{enumerate} - \item Define a function called \typ{prompt} - \item The function should take a single string argument - \item \textbf{Do not ask the user for input, i.e. do not use input} - \item The function should not return anything - \item The function should print \typ{Hello <name>} - \end{enumerate} - For example if the function is passed \typ{'Sam'}, print: - Hello Sam -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def prompt(name): - print('Hello', name) -\end{lstlisting} -\end{frame} - - -\begin{frame}[plain,fragile] - \frametitle{Exercise: function with \typ{return}} - \begin{enumerate} - \item Define a function called \typ{prompt} - \item The function should take a single string argument - \item The function should return a string with \typ{'Hello'} - \item \textbf{Do not use input} - \item \textbf{Do not print anything} - \end{enumerate} - For example if the function is passed \typ{'Sam'}, return: - \begin{lstlisting} - 'Hello Sam' - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def prompt(name): - return 'Hello ' + name -\end{lstlisting} -\end{frame} - -\begin{frame}[plain] - \frametitle{Exercise: function with two args} - \begin{enumerate} - \item Define a function called \typ{add} - \item The function should take two arguments - \item The function should return the sum of the two arguments - \item \textbf{Do not use input} - \item \textbf{Do not print anything} - \end{enumerate} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def add(a, b): - return a + b -\end{lstlisting} -\end{frame} - -\begin{frame}[plain] - \frametitle{Exercise: function returning boolean} - \begin{enumerate} - \item Define a function called \typ{is\_even} - \item The function should take a single integer argument - \item The function should return \typ{True} if the number is even and \typ{False} otherwise - \item \textbf{Do not use input} - \item \textbf{Do not print anything} - \end{enumerate} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Naive Solution} -\begin{lstlisting} - def is_even(x): - if x%2 == 0: - return True - else: - return False -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Elegant Solution} -\begin{lstlisting} - def is_even(x): - return x%2 == 0 -\end{lstlisting} -\end{frame} - -\begin{frame}[plain,fragile] - \frametitle{Exercise: function returning two values} - \begin{enumerate} - \item Define a function called \typ{even\_square} - \item The function should take a single argument - \item The function should return if the number is even and the square of the number - \item \textbf{Do not use input} - \item \textbf{Do not print anything} - \end{enumerate} - For example: - \begin{lstlisting} - In []: even_square(2) - Out[]: (True, 4) - In []: even_square(3) - Out[]: (False, 9) - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] - \frametitle{Solution} - \begin{lstlisting} - def even_square(x): - return x%2 == 0, x*x - \end{lstlisting} -\end{frame} - - -\begin{frame}[plain,fragile] - \frametitle{Exercise: default arguments} - \begin{enumerate} - \item Define a function called \typ{greet} - \item The function should take one positional argument, \typ{name} - \item The function should take one optional argument, \typ{message} - \item If \typ{message} is not given, it should default to \typ{'Hello'} - \item It should return the string with the greeting - \end{enumerate} - For example: - \begin{lstlisting} - In []: greet('Sam') - Out[]: 'Hello Sam' - In []: greet('Sam', 'Hi') - Out[]: 'Hi Sam' - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] - \frametitle{Solution} - \begin{lstlisting} - def greet(name, message='Hello'): - return message + ' ' + name - \end{lstlisting} -\end{frame} - -\begin{frame}[plain, fragile] - \frametitle{Exercise: functions and lists} - \begin{enumerate} - \item Define a function called \typ{to\_lower} - \item The function should take a single list of strings - \item The function should return the list of strings but all in lowercase - \item \textbf{Do not use input} - \item \textbf{Do not print anything} - \end{enumerate} - For example: - \begin{lstlisting} -In []: to_lower(['I', 'am', 'Batman']) -Out[]: ['i', 'am', 'batman'] - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def to_lower(data): - result = [] - for x in data: - result.append(x.lower()) - return result -\end{lstlisting} -\end{frame} - -\begin{frame}[plain,fragile] - \frametitle{Exercise: list of Fibonacci} - \begin{enumerate} - \item Define a function called \typ{fib} taking one argument \typ{n} - \item Where, \typ{n>0} is an integer but defaults to 8 - \item Return the first \typ{n} terms of the Fibonacci sequence - \end{enumerate} - For example: - \begin{lstlisting} - In []: fib(4) - Out[]: [0, 1, 1, 2] - In []: fib() - Out[]: [0, 1, 1, 2, 3, 5, 8, 13] - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def fib(n=8): - a, b = 0, 1 - result = [0] - for i in range(n-1): - result.append(b) - a, b = b, a+b - return result -\end{lstlisting} -\end{frame} - -\begin{frame}[plain,fragile] - \frametitle{Exercise: returning a function} - \begin{enumerate} - \item Define a function called \typ{power2()} which takes no argument - \item It should return a function which takes a single argument \typ{x} but - returns $2^x$ - \end{enumerate} - For example: - \begin{lstlisting} - In []: f = power2() - In []: f(2) - Out[]: 4 - In []: power2()(4) - Out[]: 16 - \end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] -\frametitle{Solution} -\begin{lstlisting} - def power2(): - def f(x): - return 2**x - return f -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile,plain] - \frametitle{Another solution} - \begin{lstlisting} - def power(n=2): - def f(x): - return n**x - return f - \end{lstlisting} - \begin{itemize} - \item This is called a closure. - \item Note that \typ{f} ``stores'' the value of \typ{n} - \end{itemize} - \pause - \begin{lstlisting} - In []: p2 = power(2) - In []: p3 = power(3) - In []: p2(2) - Out[]: 4 - In []: p3(2) - Out[]: 9 - \end{lstlisting} -\end{frame} - -\begin{frame}[plain,fragile] - \frametitle{Exercise: function as an argument} - \begin{enumerate} - \item Define a function called \typ{apply(f, data)} - \item Where \typ{f} is a function taking a single value - \item Where \typ{data} is a list - \item It should return a list where the function is applied to each element - of \typ{data} - \end{enumerate} - For example: - \begin{lstlisting} - In []: def double(x): - .....: return 2*x - .....: - In []: apply(double, [1, 2, 3]) - Out[]: [2, 4, 6] - \end{lstlisting} -\end{frame} - -\begin{frame}[plain, fragile] - \frametitle{Solution} - \begin{lstlisting} - def apply(f, data): - result = [] - for x in data: - result.append(f(x)) - return result - \end{lstlisting} -\end{frame} - -\begin{frame} - \centering - \Huge - - That's all folks! -\end{frame} -\end{document} - -\end{document} |