# HG changeset patch # User Puneeth Chaganti # Date 1291919686 -19800 # Node ID 49e10e9fc660c0b4c1a2228944b93b1c13ac7b74 # Parent dc8d666a594aaa431380fa6f6bfa95a9cd5ccd4d Fixed day2/session1.tex. diff -r dc8d666a594a -r 49e10e9fc660 day2/session1.tex --- 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}