day1/Session-1.tex~
changeset 53 fc74987a475d
parent 52 fccb3551c7d5
parent 51 d3a8a9556a90
child 55 09c73bf81987
child 74 a476c09dcf24
--- a/day1/Session-1.tex~	Wed Oct 07 15:12:17 2009 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,636 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Tutorial slides on Python.
-%
-% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
-% Copyright (c) 2005-2008, Prabhu Ramachandran
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\documentclass[14pt,compress]{beamer}
-%\documentclass[draft]{beamer}
-%\documentclass[compress,handout]{beamer}
-%\usepackage{pgfpages} 
-%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]
-
-% Modified from: generic-ornate-15min-45min.de.tex
-\mode<presentation>
-{
-  \usetheme{Warsaw}
-  \useoutertheme{split}
-  \setbeamercovered{transparent}
-}
-
-\usepackage[english]{babel}
-\usepackage[latin1]{inputenc}
-%\usepackage{times}
-\usepackage[T1]{fontenc}
-
-% Taken from Fernando's slides.
-\usepackage{ae,aecompl}
-\usepackage{mathpazo,courier,euler}
-\usepackage[scaled=.95]{helvet}
-
-\definecolor{darkgreen}{rgb}{0,0.5,0}
-
-\usepackage{listings}
-\lstset{language=Python,
-    basicstyle=\ttfamily,
-    commentstyle=\color{red}\itshape,
-  stringstyle=\color{darkgreen},
-  showstringspaces=false,
-  keywordstyle=\color{blue}\bfseries}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Macros
-\setbeamercolor{emphbar}{bg=blue!20, fg=black}
-\newcommand{\emphbar}[1]
-{\begin{beamercolorbox}[rounded=true]{emphbar} 
-      {#1}
- \end{beamercolorbox}
-}
-\newcounter{time}
-\setcounter{time}{0}
-\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}
-
-\newcommand{\typ}[1]{\texttt{#1}}
-
-\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }
-
-%%% This is from Fernando's setup.
-% \usepackage{color}
-% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
-% % Use and configure listings package for nicely formatted code
-% \usepackage{listings}
-% \lstset{
-%    language=Python,
-%    basicstyle=\small\ttfamily,
-%    commentstyle=\ttfamily\color{blue},
-%    stringstyle=\ttfamily\color{orange},
-%    showstringspaces=false,
-%    breaklines=true,
-%    postbreak = \space\dots
-% }
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Title page
-\title[Basic Python]{Python:\\A great programming toolkit}
-
-\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran}
-
-\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
-\date[] {10, October 2009}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
-%\logo{\pgfuseimage{iitmlogo}}
-
-
-%% Delete this, if you do not want the table of contents to pop up at
-%% the beginning of each subsection:
-\AtBeginSubsection[]
-{
-  \begin{frame}<beamer>
-    \frametitle{Outline}
-    \tableofcontents[currentsection,currentsubsection]
-  \end{frame}
-}
-
-
-% If you wish to uncover everything in a step-wise fashion, uncomment
-% the following command: 
-%\beamerdefaultoverlayspecification{<+->}
-
-%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% DOCUMENT STARTS
-\begin{document}
-
-\begin{frame}
-  \titlepage
-\end{frame}
-\begin{frame}
-  {Acknowledgements}
-  \begin{center}
-  This program is conducted by\\
-  IIT, Bombay\\
-  through CDEEP\\as part of  the open source initiatives\\
-  under the aegis of\\
-  \alert{National Mission on Education through ICT,} \\
-  Ministry of HRD.
-  \end{center}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Outline}
-  \tableofcontents
-  % You might wish to add the option [pausesections]
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TODO
-%
-%  * Add slide on Python packages (modules)
-%  * Add slides on reference counting.
-
-\section{Agenda}
-\begin{frame}{About the Workshop}
-  \begin{description}
-	\item[Day 1, Session 1] Sat 09:30--11:00
-	\item[Day 1, Session 2] Sat 11:15--12:45
-	\item[Day 1, Session 3] Sat 13:45--15:15
-	\item[Day 1, Session 4] Sat 15:30--17:00
-        \item[Day 2, Session 1] Sun 09:30--11:00
-	\item[Day 2, Session 2] Sun 11:15--12:45
-	\item[Day 2, Session 3] Sun 13:45--15:15
-	\item[Day 2, Session 4] Sun 15:30--17:00
-  \end{description}
-\end{frame}
-
-\section{Agenda}
-\begin{frame}{About the Workshop}
-  \begin{block}{Goal of the workshop}
-	Successful participants will be able to use python as their scripting and problem solving language. 
-  \end{block}
-  \begin{block}{Workshop Audience}
-        Aimed at Engg., Mathematics and Science teachers  but should serve a similar purpose for others. 
-  \end{block}
-  \begin{block}{Focus of the workshop}
-        Focus on basic numerics and plotting
-  \end{block}
-\end{frame}
-
-\begin{frame}{Checklist}
-	\begin{block}{python}
-          Type python at the command line. Do you see version 2.5 or later?
-        \end{block}
-        \begin{block}{IPython}
-          Is IPython available?
-        \end{block}
-        \begin{block}{Editor}
-          Which editor? scite, vim, emacs, \ldots
-        \end{block}
-\end{frame}
-
-\section{Overview}
-\begin{frame}{Session 1}
-  \begin{itemize}
-	\item Introduction and motivation
-	\item Using the interpreter(s)
-	\item Basic data types: int, float, string
-	\item Basic data structures: list
-	\item Basic console IO: \texttt{raw\_input(), print}
-    \item Basic control flow: \texttt{if, while}
-	\item Problem set 1
-    \item Functions $\rightarrow$ Problem set 2
-    \item lists, \texttt{for}  $\rightarrow$ Problem set 3
-    \item IO, Modules $\rightarrow$ Problem sets 4,5, \ldots
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Introduction}
-  \begin{itemize}
-  \item Creator and BDFL: Guido van Rossum
-  \item December 1989
-  \item ``Python'' as in Monty Python's Flying Circus
-  \item 2.6.x
-  \item PSF license (like BSD: no strings attached)
-  \item Highly cross platform
-  \item Nokia series 60!
-  \item \alert{Philosophy:} Simple and complete by design
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Resources}
-  \begin{itemize}
-  \item Part of many GNU/Linux distributions
-  \item Web: \url{http://www.python.org}
-  \item Doc: \url{http://www.python.org/doc}
-  \item Free Tutorials:
-    \begin{itemize}
-    \item Official Python tutorial: \url{http://docs.python.org/tut/tut.html}
-    \item Byte of Python: \url{http://www.byteofpython.info/}
-    \item Dive into Python: \url{http://diveintopython.org/}
-    \end{itemize}
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Why Python?}
-  \begin{itemize}
-  \item Readable and easy to use
-  \item High level, interpreted, modular, OO
-  \item Much faster development cycle
-  \item Powerful interactive environment
-  \item Rapid application development
-  \item Rich standard library and modules
-  \item Interfaces well with C++, C and FORTRAN
-  \item \alert{More than a math package $\Rightarrow$ some extra work compared to math packages}
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Use cases}
-  \begin{itemize}
-  \item NASA: Space Shuttle Mission Design
-  \item AstraZeneca: Collaborative Drug Discovery
-  \item ForecastWatch.com: Helps Meteorologists
-  \item Industrial Light \& Magic: Runs on Python
-  \item Zope: Commercial grade Toolkit
-  \item Plone: Professional high feature CMS
-  \item RedHat: install scripts, sys-admin tools
-  \item Django: A great web application framework
-  \item Google: A strong python shop
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \frametitle{To sum up, python is\ldots}
-  \begin{itemize}
-  \item dynamically typed, interpreted $\rightarrow$ rapid testing/prototyping
-  \item powerful, very high level
-  \item has full introspection 
-  \item Did we mention powerful?
-  \end{itemize}
-  \begin{block}{But \ldots}
-    may be wanting in performance. specialised resources such as SWIG, \alert{Cython} are available 
-  \end{block}
-  \inctime{15}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TIME: 10 m, running 10m
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\section{Python}
-
-\subsection{Getting Started}
-
-\begin{frame}[fragile]{At the prompt, type the following}
-   \begin{lstlisting}
->>> print 'Hello Python' 
->>> print 3124 * 126789
->>> 1786 % 12
->>> 3124 * 126789
->>> a = 3124 * 126789
->>> big = 12345678901234567890 ** 3
->>> verybig = big * big * big * big 
->>> 12345**6, 12345**67, 12345**678
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]{At the prompt, type the following}
-   \begin{lstlisting}
->>> s = 'Hello '
->>> p = 'World'
->>> s + p 
->>> s * 12 
->>> s * s
->>> s + p * 12, (s + p)* 12
->>> s * 12 + p * 12
->>> 12 * s 
-    \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]{At the prompt, type the following}
-  \begin{lstlisting}
->>> 17/2
->>> 17/2.0
->>> 17.0/2
->>> 17.0/8.5
->>> int(17/2.0)
->>> float(17/2)
->>> str(17/2.0)
->>> round( 7.5 )
-  \end{lstlisting}
-  \begin{block}{Mini exercise}
-	Round a float to the nearest integer, using \texttt{int()}?
-  \end{block}
-\end{frame}
-
-\begin{frame}{Midi exercises}
-  \begin{center}
-    \begin{itemize}
-      \item What does this do?
-      \item \texttt{round(amount * 10) /10.0 }
-    \end{itemize}
-  \end{center}
-\end{frame}
-
-\begin{frame}{More exercises?}
-  \begin{center}
-    \begin{block}{Round sums}
-      How to round a number to the nearest  5 paise?\\
-      \begin{description}
-        \item[Remember] 17.23 $\rightarrow$ 17.25,\\ while 17.22 $\rightarrow$ 17.20\\
-      \end{description}
-      How to round a number to the nearest 20 paise?
-    \end{block}
-  \end{center}
-\end{frame}
-
-\begin{frame}[fragile] {A question of good style}
-  \begin{lstlisting}
-    amount = 12.68
-    denom = 0.05
-    nCoins = round(amount/denom)
-    rAmount = nCoins * denom
-  \end{lstlisting}
-  \pause
-  \begin{block}{Style Rule \#1}
-    Naming is 80\% of programming
-  \end{block}
-\end{frame}
-
-
-\begin{frame}[fragile]
-  \frametitle{Odds and ends}
-  \begin{itemize}
-    \item Case sensitive
-    \item Dynamically typed $\Rightarrow$ need not specify a type
-      \begin{lstlisting}
-a = 1
-a = 1.1
-a = "Now I am a string!"
-      \end{lstlisting}
-    \item Comments:
-      \begin{lstlisting}
-a = 1  # In-line comments
-# Comment in a line to itself.
-a = "# This is not a comment!"
-      \end{lstlisting}
-  \end{itemize}
-  \inctime{15}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TIME: 10 m, running 20m
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Data types}
-\begin{frame}
-  \frametitle{Basic types}
-  \begin{itemize}
-    \item Numbers: float, int, long, complex
-    \item Strings
-    \item Boolean
-  \end{itemize}
-  \begin{block}{Also to be discussed later}
-    tuples, lists, dictionaries, functions, objects\ldots
-  \end{block}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Numbers}
-  \vspace*{-0.25in}
-  \begin{lstlisting}
->>> a = 1 # Int.
->>> l = 1000000L # Long
->>> e = 1.01325e5 # float
->>> f = 3.14159 # float
->>> c = 1+1j # Complex!
->>> print f*c/a
-(3.14159+3.14159j)
->>> print c.real, c.imag
-1.0 1.0
->>> abs(c)
-1.4142135623730951
->>> abs( 8 - 9.5 )
-1.5
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Boolean}
-  \begin{lstlisting}
->>> t = True
->>> f = not t
-False
->>> f or t
-True
->>> f and t
-False
-  \end{lstlisting}
-  \begin{block}{Try:}
-  NOT True\\
-  not TRUE
-  \end{block}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TIME: 10 m, running 30m
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{frame}[fragile]
-  \frametitle{Relational and logical operators}
-  \begin{lstlisting}
->>> a, b, c = -1, 0, 1
->>> a == b
-False
->>> a <= b 
-True
->>> a + b != c
-True
->>> a < b < c
-True
->>> c >= a + b
-True
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Strings}
-  \begin{lstlisting}
-s = 'this is a string'
-s = 'This one has "quotes" inside!'
-s = "I have 'single-quotes' inside!"
-l = "A string spanning many lines\
-one more line\
-yet another"
-t = """A triple quoted string does
-not need to be escaped at the end and 
-"can have nested quotes" etc."""
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{More Strings}
-  \vspace*{-0.2in}
-  \begin{lstlisting}
->>> w = "hello"    
->>> print w[0] + w[2] + w[-1]
-hlo
->>> len(w) # guess what
-5
->>> s = u'Unicode strings!'
->>> # Raw strings (note the leading 'r')
-... r_s = r'A string $\alpha \nu$'
-  \end{lstlisting}
-\pause
-  \begin{lstlisting}
->>> w[0] = 'H' # Can't do that!
-Traceback (most recent call last):
-  File "<stdin>", line 1, in ?
-TypeError: object does not support item assignment
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}
-  \frametitle{Let us switch to IPython}
-  Why?
-  \begin{block}
-    {Better help (and a lot more)}
-    Tab completion\\
-    ?\\
-    .?\\
-    object.function?
-  \end{block}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{More on strings}
-  \begin{lstlisting}
-In [1]: a = 'hello world'
-In [2]: a.startswith('hell')
-Out[2]: True
-In [3]: a.endswith('ld')
-Out[3]: True
-In [4]: a.upper()
-Out[4]: 'HELLO WORLD'
-In [5]: a.upper().lower()
-Out[5]: 'hello world'
-  \end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]{Still with strings}
-  \begin{lstlisting}
-In [6]: a.split()
-Out[6]: ['hello', 'world']
-In [7]: ''.join(['a', 'b', 'c'])
-Out[7]: 'abc'
-In [8] 'd' in ''.join( 'a', 'b', 'c')
-Out[8]: False
-  \end{lstlisting}
-  \begin{block}{Try:}
-    \texttt{a.split( 'o' )}\\
-    \texttt{'x'.join( a.split( 'o' ) )}
-  \end{block}
-\end{frame}
-
-\begin{frame}[fragile]{Surprise! strings!!}
-  \begin{lstlisting}
-In [11]: x, y = 1, 1.2
-In [12]: 'x is %s, y is %s' %(x, y)
-Out[12]: 'x is 1, y is 1.234'
-  \end{lstlisting}
-  \begin{block}{Try:}
-    \texttt{'x is \%d, y is \%f' \%(x, y) }\\
-    \texttt{'x is \%3d, y is \%4.2f' \%(x, y) }
-  \end{block}
-  \small
-\url{docs.python.org/lib/typesseq-strings.html}\\
-\end{frame}
-
-\begin{frame}
-  {Interlude}
-  \begin{block}
-    {A classic problem}
-    How to interchange values of two variables? Please note that the type of either variable is unknown and it is not necessary that both be of the same type even!
-  \end{block}
-  \inctime{30}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TIME: 25 m+ Interlude break 5 mins, running 60m 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{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}
-
-\begin{frame}[fragile]
-  \frametitle{Basic conditional flow}
-  \begin{lstlisting}
-In [21]: a = 7
-In [22]: b = 8
-In [23]: if a > b:
-   ....:    print 'Hello'
-   ....: else:
-   ....:     print 'World'
-   ....:
-   ....:
-World
-  \end{lstlisting}
-  Let us switch to creating a file
-\end{frame}
-
-\begin{frame}
-  {Creating python files}
-  \begin{itemize}
-    \item aka scripts
-    \item use your editor
-    \item Note that white space is the way to specify blocks!
-    \item extension \typ{.py}
-    \item run with \texttt{python hello.py} at the command line
-    \item in IPython\ldots
-  \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{\typ{If...elif...else} example}
-\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'
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}{Simple IO}
-  \begin{block}
-    {Console Input}
-    \texttt{raw\_input()} waits for user input.\\Prompt string is optional.\\
-    All keystrokes are Strings!\\\texttt{int()} converts string to int.
-  \end{block}
-  \begin{block}
-    {Console output}
-    \texttt{print} is straight forward. Major point to remember is the distinction between \texttt{print x} and \texttt{print x,}
-  \end{block}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Basic looping}
-  \begin{lstlisting}
-# Fibonacci series:
-# 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}\\  
-\alert{Recall it is easy to write infinite loops with \kwrd{while}}
-  \inctime{20}
-\end{frame}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% TIME: 20 m, running 80m 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\end{document}