day2/session1.tex
changeset 288 c4e25269a86c
parent 250 760d5679834e
child 297 a835affb1447
--- a/day2/session1.tex	Fri Nov 06 17:56:22 2009 +0530
+++ b/day2/session1.tex	Fri Nov 06 18:33:08 2009 +0530
@@ -1,8 +1,8 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %Tutorial slides on Python.
 %
-% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
-% Copyright (c) 2005-2009, Prabhu Ramachandran
+% Author: FOSSEE 
+% Copyright (c) 2009, FOSSEE, IIT Bombay
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \documentclass[14pt,compress]{beamer}
@@ -78,7 +78,7 @@
 \author[FOSSEE Team] {The FOSSEE Group}
 
 \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
-\date[] {1, November 2009\\Day 2, Session 1}
+\date[] {8 November, 2009\\Day 2, Session 1}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
@@ -140,13 +140,13 @@
   \begin{itemize}
     \item \kwrd{int}\\ \kwrd{int} = whole number, no matter what the size!
   \begin{lstlisting}
-In [1]: a = 13
+In []: a = 13
 
-In [2]: b = 99999999999999999999
+In []: b = 99999999999999999999
   \end{lstlisting}
     \item \kwrd{float}
   \begin{lstlisting}
-In [3]: fl = 3.141592
+In []: p = 3.141592
   \end{lstlisting}
   \end{itemize}
 \end{frame}
@@ -154,16 +154,16 @@
 \begin{frame}[fragile]
 \frametitle{Complex numbers}
   \begin{lstlisting}
-In [1]: cplx = 3+4j
+In []: c = 3+4j
 
-In [2]: abs(cplx)
-Out[2]: 5.0
+In []: abs(c)
+Out[]: 5.0
 
-In [3]: cplx.imag
-Out[3]: 4.0
+In []: c.imag
+Out[]: 4.0
 
-In [4]: cplx.real
-Out[4]: 3.0
+In []: c.real
+Out[]: 3.0
   \end{lstlisting}
 \end{frame}
 
@@ -171,16 +171,31 @@
 \begin{frame}[fragile]
   \frametitle{Boolean}
   \begin{lstlisting}
-In [1]: t = True
+In []: t = True
+
+In []: f = not t
 
-In [2]: f = not t
-Out[2]: False
+In []: f or t
+Out[]: True
+
+In []: f and t
+Out[]: False
+  \end{lstlisting}
+  \inctime{5}
+\end{frame}
 
-In [3]: f or t
-Out[3]: True
+\begin{frame}[fragile]
+  \frametitle{( )  for precedence}
+  \begin{lstlisting}
+In []: a = False
+In []: b = True
+In []: c = True
 
-In [4]: f and t
-Out[4]: False
+In []: (a and b) or c
+Out[]: True
+
+In []: a and (b or c)
+Out[]: False
   \end{lstlisting}
   \inctime{5}
 \end{frame}
@@ -191,20 +206,20 @@
   \frametitle{Strings}
 Strings were introduced previously, let us now look at them in a little more detail.
   \begin{lstlisting}
-In [1]: w = "hello"
+In []: w = "hello"
 
-In [2]: print w[0] + w[2] + w[-1]
-Out[2]: hlo
+In []: print w[0] + w[2] + w[-1]
+Out[]: hlo
 
-In [3]: len(w) # guess what
-Out[3]: 5
+In []: len(w) # guess what
+Out[]: 5
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{Strings \ldots}
   \begin{lstlisting}
-In [1]: w[0] = 'H' # Can't do that!
+In []: w[0] = 'H' # Can't do that!
 --------------------------------------------
 TypeError  Traceback (most recent call last)
 
@@ -218,19 +233,35 @@
 \begin{frame}[fragile]
   \frametitle{String methods}
   \begin{lstlisting}
-In [1]: a = 'Hello World'
-In [2]: a.startswith('Hell')
-Out[2]: True
+In []: a = 'Hello World'
+In []: a.startswith('Hell')
+Out[]: True
+
+In []: a.endswith('ld')
+Out[]: True
 
-In [3]: a.endswith('ld')
-Out[3]: True
+In []: a.upper()
+Out[]: 'HELLO WORLD'
+
+In []: a.lower()
+Out[]: 'hello world'
+  \end{lstlisting}
+\end{frame}
 
-In [4]: a.upper()
-Out[4]: 'HELLO WORLD'
-
-In [5]: a.lower()
-Out[5]: 'hello world'
-  \end{lstlisting}
+\begin{frame}
+  \frametitle{A bit about IPython}
+  \begin{itemize}
+    \item IPython provides better help
+    \item object.function?
+    \begin{lstlisting}
+In []: a = 'Hello World'
+In []: a.lower?
+    \end{lstlisting}
+    \item It provides tab completion
+        \begin{lstlisting}
+In []: a.s<Tab>
+    \end{lstlisting}
+  \end{itemize}
 \end{frame}
 
 \begin{frame}[fragile]
@@ -240,77 +271,102 @@
     \item join() is the opposite of split()
   \end{itemize}
   \begin{lstlisting}
-In [1]: ''.join(['a', 'b', 'c'])
-Out[1]: 'abc'
+In []: ''.join(['a', 'b', 'c'])
+Out[]: 'abc'
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
 \frametitle{String formatting}
   \begin{lstlisting}
-In [1]: x, y = 1, 1.234
+In []: x, y = 1, 1.234
 
-In [2]: 'x is %s, y is %s' %(x, y)
-Out[2]: 'x is 1, y is 1.234'
+In []: 'x is %s, y is %s' %(x, y)
+Out[]: 'x is 1, y is 1.234'
   \end{lstlisting}
+  \begin{itemize}
+    \item \emph{\%d}, \emph{\%f} etc. available
+  \end{itemize}
   \emphbar{\url{http://docs.python.org/library/stdtypes.html}}
   \inctime{10}
 \end{frame}
 
 \section{Operators}
 \begin{frame}[fragile]
-  \frametitle{Arithematic operators}
+  \frametitle{Arithmetic operators}
   \begin{lstlisting}
-In [1]: 1786 % 12
-Out[1]: 10
+In []: 1786 % 12
+Out[]: 10
+
+In []: 45 % 2
+Out[]: 1
 
-In [2]: 3124 * 126789
-Out[2]: 396088836
+In []: 864675 % 10
+Out[]: 5
 
-In [3]: a = 3124 * 126789
+In []: 3124 * 126789
+Out[]: 396088836
 
-In [4]: big = 1234567891234567890 ** 3
+In []: big = 1234567891234567890 ** 3
 
-In [5]: verybig = big * big * big * big
+In []: verybig = big * big * big * big
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
-  \frametitle{Arithematic operators \ldots}
+  \frametitle{Arithmetic operators}
   \begin{lstlisting}
-In [1]: 17/2
-Out[1]: 8
+In []: 17 / 2
+Out[]: 8
+
+In []: 17 / 2.0
+Out[]: 8.5
+
+In []: 17.0 / 2
+Out[]: 8.5
+
+In []: 17.0 / 8.5
+Out[]: 2.0
+  \end{lstlisting}
+\end{frame}
 
-In [2]: 17/2.0
-Out[2]: 8.5
+\begin{frame}[fragile]
+  \frametitle{Arithmetic operators}
+  \begin{lstlisting}
+In []: a = 7546
 
-In [3]: 17.0/2
-Out[3]: 8.5
+In []: a += 1
+In []: a
+Out[]: 7547
 
-In [4]: 17.0/8.5
-Out[4]: 2.0
+In []: a -= 5
+In []: a
+
+In []: a *= 2
+
+In []: a /= 5
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{String operations}
   \begin{lstlisting}
-In [1]: s = 'Hello '
+In []: s = 'Hello '
 
-In [2]: p = 'World'
+In []: p = 'World'
 
-In [3]: s + p 
-Out[3]: 'Hello World'
+In []: s + p 
+Out[]: 'Hello World'
 
-In [4]: s * 4
-Out[4]: 'Hello Hello Hello Hello'
+In []: s * 4
+Out[]: 'Hello Hello Hello Hello'
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{String operations \ldots}
   \begin{lstlisting}
-In [1]: s * s
+In []: s * s
 --------------------------------------------
 TypeError  Traceback (most recent call last)
 
@@ -324,35 +380,35 @@
 \begin{frame}[fragile]
   \frametitle{Relational and logical operators}
   \begin{lstlisting}
-In [1]: pos, zer, neg = 1, 0, -1
-In [2]: pos == neg
-Out[2]: False
+In []: p, z, n = 1, 0, -1
+In []: p == n
+Out[]: False
 
-In [3]: pos >= neg
-Out[3]: True
+In []: p >= n
+Out[]: True
 
-In [4]: neg < zer < pos
-Out[4]: True
+In []: n < z < p
+Out[]: True
 
-In [5]: pos + neg != zer
-Out[5]: False
+In []: p + n != z
+Out[]: False
   \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{Built-ins}
   \begin{lstlisting}
-In [1]: int(17/2.0)
-Out[1]: 8
+In []: int(17 / 2.0)
+Out[]: 8
 
-In [2]: float(17/2)  # Recall
-Out[2]: 8.0
+In []: float(17 / 2)  # Recall
+Out[]: 8.0
 
-In [3]: str(17/2.0)
-Out[3]: '8.5'
+In []: str(17 / 2.0)
+Out[]: '8.5'
 
-In [4]: round( 7.5 )
-Out[4]: 8.0
+In []: round( 7.5 )
+Out[]: 8.0
   \end{lstlisting}
 \end{frame}
 
@@ -362,15 +418,15 @@
     \item Case sensitive
     \item Dynamically typed $\Rightarrow$ need not specify a type
       \begin{lstlisting}
-In [1]: a = 1
-In [2]: a = 1.1
-In [3]: a = "Now I am a string!"
+In []: a = 1
+In []: a = 1.1
+In []: a = "Now I am a string!"
       \end{lstlisting}
     \item Comments:
       \begin{lstlisting}
-In [4]: a = 1  # In-line comments
-In [5]: # A comment line.
-In [6]: a = "# Not a comment!"
+In []: a = 1  # In-line comments
+In []: # A comment line.
+In []: a = "# Not a comment!"
       \end{lstlisting}
   \end{itemize}
   \inctime{15}
@@ -379,14 +435,15 @@
 \section{Simple IO}
 \begin{frame}[fragile]
   \frametitle{Simple IO: Console Input}
+  \small
   \begin{itemize}
     \item raw\_input() waits for user input.
       \begin{lstlisting}
-In [1]: a = raw_input()
+In []: a = raw_input()
 5
 
-In [2]: a = raw_input('prompt > ')
-prompt > 5
+In []: a = raw_input('Enter a value: ')
+Enter a value: 5
       \end{lstlisting}
     \item Prompt string is optional.
     \item All keystrokes are Strings!
@@ -394,11 +451,36 @@
   \end{itemize}
 \end{frame}
 
-\begin{frame}{Simple IO: Console output}
+\begin{frame}[fragile]
+  \frametitle{Simple IO: Console output}
   \begin{itemize}
     \item \texttt{print} is straight forward
-    \item Note the distinction between \texttt{print x} and \texttt{print x,}
+    \item Put the following code snippet in a file
   \end{itemize}
+  \begin{lstlisting}
+print "Hello"
+print "World"
+
+
+In []: %run -i hello1.py
+Hello
+World
+  \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Simple IO: Console output \ldots}
+Put the following code snippet in a file
+  \begin{lstlisting}
+print "Hello",
+print "World"
+
+
+In []: %run -i hello2.py
+Hello World
+  \end{lstlisting}
+
+\emphbar{Note the distinction between \texttt{print x} and \texttt{print x,}}
 \end{frame}
 
 \section{Control flow}
@@ -406,8 +488,9 @@
   \frametitle{Control flow constructs}  
   \begin{itemize}
   \item \kwrd{if/elif/else}: branching
+  \item \kwrd{C if X else Y}: Ternary conditional operator
   \item \kwrd{while}: looping
-  \item \kwrd{for}: iterating 
+  \item \kwrd{for}: iterating
   \item \kwrd{break, continue}: modify loop 
   \item \kwrd{pass}: syntactic filler
   \end{itemize}
@@ -416,101 +499,41 @@
 \subsection{Basic Conditional flow}
 \begin{frame}[fragile]
   \frametitle{\typ{If...elif...else} example}
+  \small
   \begin{lstlisting}
-x = int(raw_input("Enter an integer:"))
-if x < 0:
-     print 'Be positive!'
-elif x == 0:
-     print 'Zero'
-elif x == 1:
-     print 'Single'
-else:
-     print 'More'
+In []: x = int(raw_input("Enter an integer:"))
+
+In []: if x < 0:
+  ...:     print 'Be positive!'
+  ...: elif x == 0:
+  ...:     print 'Zero'
+  ...: elif x == 1:
+  ...:     print 'Single'
+  ...: else:
+  ...:     print 'More'
+  ...:
+  ...:
   \end{lstlisting}
   \inctime{10}
 \end{frame}
 
-\subsection{Basic Looping}
 \begin{frame}[fragile]
-  \frametitle{\typ{while}}
-Example: Fibonacci series
-  \begin{lstlisting}
-# the sum of two elements
-# defines the next
-a, b = 0, 1
-while b < 10:
-    print b,
-    a, b = b, a + b 
-\end{lstlisting}
-\typ{1 1 2 3 5 8}\\  
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{\typ{range()}}
-\kwrd{range([start,] stop[, step])}\\
-\begin{itemize}
-  \item range() returns a list of integers
-  \item The \emph{start} and the \emph{step} arguments are optional
-  \item \emph{stop} argument is not included in the list
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{\typ{for} \ldots \typ{range()}}
-Example: print squares of first \typ{n} numbers
+  \frametitle{Ternary conditional operator}
   \begin{lstlisting}
-In []: for i in range(5):
- ....:     print i, i * i
- ....:
- ....:
-0 0
-1 1
-2 4
-3 9
-4 16
-\end{lstlisting}
-\inctime{5}
-\end{frame}
-
-\subsection{Exercises}
-
-\begin{frame}{Problem set 1: Problem 1.1}
-  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$\\
-\vspace*{0.2in}
-\emphbar{These are called $Armstrong$ numbers.}
-\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.
-\end{frame}
-
-\begin{frame}[fragile]{Problem 1.3}
-  Write a program that prints the following pyramid on the screen. 
-  \begin{lstlisting}
-1
-2  2
-3  3  3
-4  4  4  4
+...
+a = raw_input('Enter number(Q to quit):')
+num = int(a) if a != 'Q' else break
+...
   \end{lstlisting}
-The number of lines must be obtained from the user as input.\\
-\pause
-\emphbar{When can your code fail?}
-\inctime{5}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{What did we learn?}
   \begin{itemize}
-    \item Basic data types
-    \item Operators
-    \item Conditional structures
-    \item Loops
+    \item Data types: int, float, complex, boolean, string
+    \item Operators: +, -, *, /, \%, **, +=, -=, *=, /=, >, <, <=, >=, ==, !=, a < b < c
+    \item Simple IO: \kwrd{raw\_input} and \kwrd{print}
+    \item Conditional structures: \kwrd{if/elif/else},\\ \kwrd{C if X else Y}
   \end{itemize}
 \end{frame}