--- a/day2/session1.tex Thu Dec 09 23:11:12 2010 +0530
+++ b/day2/session1.tex Fri Dec 10 00:04:46 2010 +0530
@@ -51,7 +51,7 @@
\setcounter{time}{0}
\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}
-\newcommand{\typ}[1]{\lstinline{#1}}
+\newcommand{\typ}[1]{\textbf{\texttt{{#1}}}}
\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} }
@@ -79,7 +79,7 @@
\author[FOSSEE Team] {The FOSSEE Group}
\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
-\date[] {SciPy 2010, Introductory tutorials\\Day 2, Session 1}
+\date[] {SciPy.in 2010, Tutorials}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
@@ -149,23 +149,11 @@
\begin{lstlisting}
In []: p = 3.141592
\end{lstlisting}
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Complex numbers}
+ \item \kwrd{complex}
\begin{lstlisting}
In []: c = 3+4j
-
-In []: abs(c)
-Out[]: 5.0
-
-In []: c.imag
-Out[]: 4.0
-
-In []: c.real
-Out[]: 3.0
\end{lstlisting}
+ \end{itemize}
\end{frame}
\subsection{Booleans}
@@ -182,7 +170,7 @@
In []: F and t
Out[]: False
\end{lstlisting}
- \inctime{5}
+%% \inctime{5}
\end{frame}
\begin{frame}[fragile]
@@ -198,19 +186,45 @@
In []: a and (b or c)
Out[]: False
\end{lstlisting}
- \inctime{5}
+%% \inctime{5}
\end{frame}
\subsection{Strings}
\begin{frame}[fragile]
+\frametitle{Strings}
+Anything within ``quotes'' is a string!
+\begin{lstlisting}
+' This is a string '
+" This too! "
+""" This one too! """
+''' And one more! '''
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Strings}
+Why so many?
+\begin{lstlisting}
+' "Do or do not. No try." said Yoda.'
+" ' is a mighty lonely quote."
+\end{lstlisting}
+The triple quoted ones can span multiple lines!
+
+\begin{lstlisting}
+""" The quick brown
+fox jumped over
+ the lazy dingbat.
+"""
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
\frametitle{Strings}
-Strings were introduced previously, let us now look at them in a little more detail.
\begin{lstlisting}
In []: w = "hello"
-In []: print w[0] + w[2] + w[-1]
-Out[]: hlo
+In []: print w[0], w[1], w[-1]
In []: len(w)
Out[]: 5
@@ -235,69 +249,9 @@
\end{lstlisting}
\end{frame}
-\begin{frame}[fragile]
- \frametitle{String methods}
- \begin{lstlisting}
-In []: a = 'Hello World'
-In []: a.startswith('Hell')
-Out[]: True
-
-In []: a.endswith('ld')
-Out[]: True
-
-In []: a.upper()
-Out[]: 'HELLO WORLD'
-
-In []: a.lower()
-Out[]: 'hello world'
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{A bit about IPython}
- Recall, we showed a few features of IPython, here is one more:
- \begin{itemize}
- \item IPython provides better help
- \item object.function?
- \begin{lstlisting}
-In []: a = 'Hello World'
-In []: a.lower?
- \end{lstlisting}
- \end{itemize}
-\end{frame}
+\section{Operators}
\begin{frame}[fragile]
- \frametitle{Still with strings}
- \begin{itemize}
- \item We saw split() yesterday
- \item join() is the opposite of split()
- \end{itemize}
- \begin{lstlisting}
-In []: ''.join(['a', 'b', 'c'])
-Out[]: 'abc'
-
-In []: ', '.join(['a', 'b', 'c'])
-Out[]: 'a, b, c'
- \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{String formatting}
- \begin{lstlisting}
-In []: x, y = 1, 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{Arithmetic operators}
\small
\begin{lstlisting}
@@ -337,6 +291,22 @@
\end{frame}
\begin{frame}[fragile]
+\frametitle{Arithmetic operators}
+ \begin{lstlisting}
+In []: c = 3+4j
+
+In []: abs(c)
+Out[]: 5.0
+
+In []: c.imag
+Out[]: 4.0
+
+In []: c.real
+Out[]: 3.0
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
\frametitle{Arithmetic operators}
\begin{lstlisting}
In []: a = 7546
@@ -387,6 +357,58 @@
\end{frame}
\begin{frame}[fragile]
+ \frametitle{String methods}
+ \begin{lstlisting}
+In []: a = 'Hello World'
+In []: a.startswith('Hell')
+Out[]: True
+
+In []: a.endswith('ld')
+Out[]: True
+
+In []: a.upper()
+Out[]: 'HELLO WORLD'
+
+In []: a.lower()
+Out[]: 'hello world'
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Strings: \typ{split} \& \typ{join}}
+ \begin{lstlisting}
+In []: chars = 'a b c'
+In []: chars.split()
+Out[]: ['a', 'b', 'c']
+In []: ' '.join(['a', 'b', 'c'])
+Out[]: 'a b c'
+ \end{lstlisting}
+
+ \begin{lstlisting}
+In []: alpha = ', '.join(['a', 'b', 'c'])
+In []: alpha
+Out[]: 'a, b, c'
+In []: alpha.split(', ')
+Out[]: ['a', 'b', 'c']
+ \end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{String formatting}
+ \begin{lstlisting}
+In []: x, y = 1, 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}
+
+\begin{frame}[fragile]
\frametitle{Relational and logical operators}
\begin{lstlisting}
In []: p, z, n = 1, 0, -1
@@ -438,7 +460,7 @@
In []: a = "# Not a comment!"
\end{lstlisting}
\end{itemize}
- \inctime{15}
+%% \inctime{15}
\end{frame}
\section{Simple IO}
@@ -459,7 +481,7 @@
\end{lstlisting}
\item Prompt string is optional.
\item All keystrokes are strings!
- \item \texttt{int()} converts string to int.
+ \item \typ{int()} converts string to int.
\end{itemize}
\end{frame}
@@ -500,7 +522,6 @@
\frametitle{Control flow constructs}
\begin{itemize}
\item \kwrd{if/elif/else}: branching
- \item \kwrd{C if X else D}: Ternary conditional operator
\item \kwrd{while}: looping
\item \kwrd{for}: iterating
\item \kwrd{break, continue}: modify loop
@@ -510,7 +531,7 @@
\subsection{Basic Conditional flow}
\begin{frame}[fragile]
- \frametitle{\typ{If...elif...else} example}
+ \frametitle{\typ{if...elif...else} example}
Type the following code in an editor \& save as \alert{ladder.py}
\small
\begin{lstlisting}
@@ -525,26 +546,104 @@
print 'More'
\end{lstlisting}
- \inctime{10}
+%% \inctime{10}
+\end{frame}
+
+\section{Control flow}
+\subsection{Basic Looping}
+\begin{frame}[fragile]
+ \frametitle{\typ{while}}
+\begin{block}{Example: Fibonacci series}
+ Sum of previous two elements defines the next
+\end{block}
+ \begin{lstlisting}
+In []: a, b = 0, 1
+In []: 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 \typ{range()} returns a list of integers
+ \item The \typ{start} and the \typ{step} arguments are optional
+ \item \typ{stop} is not included in the list
+\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{Ternary conditional operator}
+ \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{for} \ldots \typ{range()}}
+Example: print squares of odd numbers from 3 to 9
\begin{lstlisting}
-...
-a = raw_input('Enter number(Q to quit):')
-num = int(a) if a != 'Q' else 0
-...
- \end{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}
+\subsection{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}
+\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 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 D}
+ \item Conditionals: \kwrd{if elif else}
+ \item Looping: \kwrd{while} \& \kwrd{for}
\end{itemize}
\end{frame}