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/control_flow.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/control_flow.tex')
-rw-r--r-- | basic_python/control_flow.tex | 402 |
1 files changed, 0 insertions, 402 deletions
diff --git a/basic_python/control_flow.tex b/basic_python/control_flow.tex deleted file mode 100644 index 25d9cbc..0000000 --- a/basic_python/control_flow.tex +++ /dev/null @@ -1,402 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%Tutorial slides on Python. -% -% Author: FOSSEE -% Copyright (c) 2009-2017, FOSSEE, IIT Bombay -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass[14pt,compress]{beamer} - -\input{macros.tex} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Title page -\title[Control flow]{Python language: Control Flow} - -\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} - \frametitle{Outline} - \tableofcontents - % You might wish to add the option [pausesections] -\end{frame} - -\section{Control flow} - -\begin{frame} - \frametitle{Control flow constructs} - \begin{itemize} - \item \kwrd{if/elif/else}: branching - \item \kwrd{while}: looping - \item \kwrd{for}: iterating - \item \kwrd{break, continue}: modify loop - \item \kwrd{pass}: syntactic filler - \end{itemize} -\end{frame} - -\subsection{Basic Conditional flow} -\begin{frame}[fragile] - \frametitle{\typ{if...elif...else} example} -Type the following code in an editor \& save as \alert{ladder.py} -{ \small -\begin{lstlisting} -x = int(input("Enter an integer: ")) -if x < 0: - print('Be positive!') -elif x == 0: - print('Zero') -elif x == 1: - print('Single') -else: - print('More') -\end{lstlisting} -} - %% \inctime{10} -\pause -\begin{itemize} -\item Run in IPython: \typ{\%run ladder.py} -\item Run on terminal: \typ{python ladder.py} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Ternary operator} - \begin{itemize} - \item \texttt{score\_str} is either \texttt{'AA'} or a string of one - of the numbers in the range 0 to 100. - \item We wish to convert the string to a number using \texttt{int} - \item Convert it to 0, when it is \texttt{'AA'} - \item \texttt{if-else} construct or the ternary operator - \end{itemize} - \begin{lstlisting} -In []: if score_str != 'AA': -.....: score = int(score_str) -.....: else: -.....: score = 0 - \end{lstlisting} -\end{frame} -\begin{frame}[fragile] - \frametitle{Ternary operator} - With the ternary operator you can do this: - \small - \begin{lstlisting} -In []: ss = score_str -In []: score = int(ss) if ss != 'AA' else 0 - \end{lstlisting} -\end{frame} - - -\section{Control flow} -\subsection{Basic Looping} - -\begin{frame} - \frametitle{\typ{while}: motivational problem} -\begin{block}{Example: Fibonacci series} - Sum of previous two elements defines the next: - \begin{center} - $0,\ \ 1,\ \ 1,\ \ 2,\ \ 3,\ \ 5,\ \ 8,\ \ 13,\ \ 21,\ \ ...$ - \end{center} -\end{block} -\end{frame} - -\begin{frame} - \frametitle{How do you solve this?} - \begin{itemize} - \item Task: Give computer, instructions to solve this - \vspace*{2em} - \item How would you solve it? - \item How would you tell someone to solve it? - \vspace*{1em} - \item Assume you are given the starting values, 0 and 1. - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - \frametitle{\typ{while}: Fibonacci} -\begin{block}{Example: Fibonacci series} - Sum of previous two elements defines the next: - \begin{center} - $0,\ \ 1,\ \ 1,\ \ 2,\ \ 3,\ \ 5,\ \ 8,\ \ 13,\ \ 21,\ \ ...$ - \end{center} -\end{block} -\pause -\begin{enumerate} -\item Start with: \typ{a, b = 0, 1} - \pause -\item Next element: \typ{next = a + b} - \pause -\item Shift \typ{a, b} to next values - \begin{itemize} - \item \typ{a = b} - \item \typ{b = next} - \end{itemize} - \pause -\item Repeat steps 2, 3 when \typ{b < 30} -\end{enumerate} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{\typ{while}} - \begin{lstlisting} -In []: a, b = 0, 1 -In []: while b < 30: - ...: print(b, end=' ') - ...: next = a + b - ...: a = b - ...: b = next - ...: - ...: -\end{lstlisting} - \begin{itemize} - \item Do this manually to check logic - \item Note: Indentation determines scope - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\typ{while}} - We can eliminate the temporary \typ{next}: - \begin{lstlisting} -In []: a, b = 0, 1 -In []: while b < 30: - ...: print(b, end=' ') - ...: a, b = b, a + b - ...: - ...: -1 1 2 3 5 8 13 21 -\end{lstlisting} - Simple! -\end{frame} - - -\begin{frame}[fragile] - \frametitle{\typ{for} \ldots \typ{range()}} -Example: print squares of first \typ{5} numbers - \begin{lstlisting} -In []: for i in range(5): - ....: print(i, i * i) - ....: - ....: -0 0 -1 1 -2 4 -3 9 -4 16 -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\frametitle{\typ{range()}} -\kwrd{range([start,] stop[, step])}\\ -\begin{itemize} - \item \typ{range()} returns a sequence of integers - \item The \typ{start} and the \typ{step} arguments are optional - \item \typ{stop} is not included in the sequence -\end{itemize} -\vspace*{.5in} -\begin{block}{Documentation convention} - \begin{itemize} - \item \alert{Anything within \typ{[]} is optional} - \item Nothing to do with Python - \end{itemize} -\end{block} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\typ{for} \ldots \typ{range()}} -Example: print squares of odd numbers from 3 to 9 - \begin{lstlisting} -In []: for i in range(3, 10, 2): - ....: print(i, i * i) - ....: - ....: -3 9 -5 25 -7 49 -9 81 -\end{lstlisting} -%% \inctime{5} -\end{frame} - -\begin{frame} - \frametitle{Exercise with \typ{for}} - -Convert the Fibonnaci sequence example to use a \typ{for} loop with range. - -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution} -\begin{lstlisting} -a, b = 0, 1 -for i in range(10): - print(b, end=' ') - a, b = b, a + b -\end{lstlisting} - \vspace*{2em} -Note that the \typ{while} loop is a more natural fit here -\end{frame} - -\begin{frame} - \frametitle{\typ{break}, \typ{continue}, and\ \typ{pass}} - \begin{itemize} - \item Use \typ{break} to break out of loop - \item Use \typ{continue} to skip an iteration - \item Use \typ{pass} as syntactic filler - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\typ{break} example} - Find first number in Fibonnaci sequence < 100 divisible by 4: -\begin{lstlisting} -a, b = 0, 1 -while b < 500: - if b % 4 == 0: - print(b) - break - a, b = b, a + b - -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{continue}} - \begin{itemize} - \item Skips execution of rest of the loop on current iteration - \item Jumps to the end of this iteration - \item Squares of all odd numbers below 10, not multiples of 3 - \end{itemize} - \begin{lstlisting} - In []: for n in range(1, 10, 2): - .....: if n%3 == 0: - .....: continue - .....: print(n*n) - \end{lstlisting} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{\typ{pass} example} -Try this: -\begin{lstlisting} -for i in range(5): - if i % 2 == 0: - pass - else: - print(i, 'is Odd') -\end{lstlisting} -\begin{itemize} -\item \typ{pass}: does nothing -\item Keep Python syntactically happy -\end{itemize} -Another example: -\begin{lstlisting} -while True: - pass -\end{lstlisting} -\end{frame} - - - -\section{Exercises} - -\begin{frame}{Problem 1.1: \emph{Armstrong} numbers} - Write a program that displays all three digit numbers that are equal to the sum of the cubes of their digits. That is, print numbers $abc$ that have the property $abc = a^3 + b^3 + c^3$\\ -For example, $153 = 1^3 + 5^3 + 3^3$\\ -\vspace*{0.2in} - -\begin{block}{Hints} - \begin{itemize} - \item Break problem into easier pieces - \item How would you solve the problem? - \item Can you explain to someone else how to solve it? - \end{itemize} -\end{block} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Some hints} - \begin{itemize} - \item What are the possible three digit numbers? - \item Can you split 153 into its respective digits, $a=1, b=5, c=3$? - \item With $a, b, c$ can you test if it is an Armstrong number? - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution: part 1} -\begin{lstlisting} -x = 153 -a = x//100 -b = (x%100)//10 -c = x%10 - -(a**3 + b**3 + c**3) == x -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution: part 2} -\begin{lstlisting} -x = 100 -while x < 1000: - print(x) - x += 1 # x = x + 1 -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution} -\begin{lstlisting} -x = 100 -while x < 1000: - a = x//100 - b = (x%100)//10 - c = x%10 - if (a**3 + b**3 + c**3) == x: - print(x) - x += 1 -\end{lstlisting} -\end{frame} - - -\begin{frame}{Problem 1.2: Collatz sequence} -\begin{enumerate} - \item Start with an arbitrary (positive) integer. - \item If the number is even, divide by 2; if the number is odd, multiply by 3 and add 1. - \item Repeat the procedure with the new number. - \item It appears that for all starting values there is a cycle of 4, 2, 1 at which the procedure loops. -\end{enumerate} - Write a program that accepts the starting value and prints out the Collatz sequence. -%% \inctime{5} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{What did we learn?} - \begin{itemize} - \item Conditionals: \kwrd{if elif else} - \item Looping: \kwrd{while} \& \kwrd{for} - \item \typ{range} - \item \kwrd{break, continue, pass} - \item Solving simple problems - \end{itemize} -\end{frame} - -\end{document} |