diff -r ae070c133120 -r 24992ab48f2b day1/Session-1.tex --- a/day1/Session-1.tex Wed Oct 14 11:02:18 2009 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,649 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%Tutorial slides on Python. -% -% Author: Prabhu Ramachandran -% Copyright (c) 2005-2009, 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 -{ - \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\bfseries, - 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\\Day 1, Session 1} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%\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} - \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\\ - 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, Day 1} - \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 - \end{description} -\end{frame} -\begin{frame}{About the Workshop, Day 2} - \begin{description} - \item[Day 2, Quiz] Sun 09:00--09:30 - \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} - -\begin{frame}{About the Workshop} - \begin{block}{Intended Audience} - \begin{itemize} - \item Engg., Mathematics and Science teachers. - \item Interested students from similar streams. - \end{itemize} - \end{block} - - \begin{block}{Goal:} - Successful participants will be able to - \begin{itemize} - \item use Python as their scripting and problem solving language. - \item train the students to use Python for the same - \end{itemize} - \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} - Type ipython at the command line. Is it available? - \end{block} - \begin{block}{Editor} - We recommend scite. - \end{block} -\end{frame} - -\section{Overview} -\begin{frame} - \frametitle{Introduction} - \begin{itemize} - \item Creator and BDFL: Guido van Rossum - \item December 1989 - \item ``Python'' as in \emph {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] - \frametitle{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] - \frametitle{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] - \frametitle{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}\frametitle{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}\frametitle{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] \frametitle{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 "", 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]\frametitle{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]\frametitle{String formatting} - \begin{lstlisting} -In [11]: x, y = 1, 1.234 -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} - {A classic problem} - \begin{block} - {Interchange values} - How to interchange values of two variables? - \end{block} - \pause - \begin{block}{Note:} - This Python idiom works for all types of variables.\\ -They need not be of the same type! - \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 extension \typ{.py} - \item run with \texttt{python hello.py} at the command line - \item in IPython using \kwrd{\%run} - \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. Note 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 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Session Summary} -\begin{frame}{So what have we learnt so far?} - \begin{itemize} - \item The interactive interpreter - \item Basic Data Types - \item Creating and running a Python script - \item \kwrd{if/elif/else} - \item Simple IO - \item Basic Looping with \kwrd{while} - \end{itemize} -\end{frame} -\end{document}