Fixed errors found during REC workshop.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Tutorial slides on Python.
%
% Author: FOSSEE
% Copyright (c) 2009, FOSSEE, IIT Bombay
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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{infolines}
\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]{\lstinline{#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 language: Functions, modules and objects}
\author[FOSSEE Team] {The FOSSEE Group}
\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {12 January, 2010\\Day 2, Session 3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\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}
}
\AtBeginSection[]
{
\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}
\frametitle{Outline}
\tableofcontents
% You might wish to add the option [pausesections]
\end{frame}
\section{Functions}
\subsection{Default arguments}
\begin{frame}[fragile]
\frametitle{Functions: default arguments}
\begin{lstlisting}
In []: greet = 'hello world'
In []: greet.split()
Out[]: ['hello', 'world']
In []: line = 'Rossum, Guido, 54, 46, 55'
In []: line.split(',')
Out[]: ['Rossum', ' Guido', ' 54',
' 46', ' 55']
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Functions: default arguments \ldots}
\begin{lstlisting}
In []: def welcome(greet, name="World"):
.... print greet, name
In []: welcome("Hello")
Hello World
In []: welcome("Hi", "Guido")
Hi Guido
\end{lstlisting}
\end{frame}
\subsection{Keyword arguments}
\begin{frame}[fragile]
\frametitle{Functions: Keyword arguments}
We have seen the following
\begin{lstlisting}
In []: legend(['sin(2y)'],
loc = 'center')
In []: plot(y, sin(y), 'g',
linewidth = 2)
In []: annotate('local max',
xy = (1.5, 1))
In []: pie(science.values(),
labels = science.keys())
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Functions: keyword arguments \ldots}
\begin{lstlisting}
In []: def welcome(greet, name="World"):
.... print greet, name
In []: welcome("Hello", "James")
Hello James
In []: welcome("Hi", name="Guido")
Hi Guido
In []: welcome(name="Guido", greet="Hey")
Hey Guido
\end{lstlisting}
\end{frame}
\subsection{Built-in functions}
\begin{frame}
{Before writing a function}
\begin{itemize}
\item Variety of built-in functions are available
\item \typ{abs, any, all, len, max, min}
\item \typ{pow, range, sum, type}
\item Refer here:
\url{http://docs.python.org/library/functions.html}
\end{itemize}
\inctime{10}
\end{frame}
\subsection{Exercises}
\begin{frame}{Problem set 3: Problem 3.1}
Write a function to return the gcd of two numbers.
\end{frame}
\begin{frame}{Problem 3.2}
Write a program to print all primitive pythagorean triads (a, b, c) where a, b are in the range 1---100 \\
A pythagorean triad $(a,b,c)$ has the property $a^2 + b^2 = c^2$.\\By primitive we mean triads that do not `depend' on others. For example, (4,3,5) is a variant of (3,4,5) and hence is not primitive. And (10,24,26) is easily derived from (5,12,13) and is also not primitive.
\end{frame}
\begin{frame}{Problem 3.3}
Write a program that generates a list of all four digit numbers that have all their digits even and are perfect squares.\newline\\\emph{For example, the output should include 6400 but not 8100 (one digit is odd) or 4248 (not a perfect square).}
\inctime{15}
\end{frame}
\section{Modules}
\begin{frame}[fragile]
\frametitle{\texttt{from} \ldots \texttt{import} magic}
\begin{lstlisting}
from scipy.integrate import odeint
from scipy.optimize import fsolve
\end{lstlisting}
\emphbar{Above statements import a function to our namespace}
\end{frame}
\begin{frame}[fragile]
\frametitle{Running scripts from command line}
\small
\begin{itemize}
\item Fire up a terminal
\item python four\_plot.py
\end{itemize}
\pause
\begin{lstlisting}
Traceback (most recent call last):
File "four_plot.py", line 1, in <module>
x = linspace(-5*pi, 5*pi, 500)
NameError: name 'linspace' is not defined
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Remedy \ldots}
\begin{lstlisting}
from scipy import *
\end{lstlisting}
\alert{Now run python four\_plot.py again}
\end{frame}
\begin{frame}[fragile]
\begin{lstlisting}
Traceback (most recent call last):
File "four_plot.py", line 1, in <module>
x = plot(x, x, 'b')
NameError: name 'plot' is not defined
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Remedy \ldots}
\begin{lstlisting}
from pylab import *
\end{lstlisting}
\alert{Now run python four\_plot.py again!!}
\end{frame}
\begin{frame}[fragile]
\frametitle{Modules}
\begin{itemize}
\item The \kwrd{import} keyword ``loads'' a module
\item One can also use:
\begin{lstlisting}
In []: from scipy import *
In []: from scipy import linspace
\end{lstlisting}
\item What is the difference?
\item \alert{Use the former only in interactive mode}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Package hierarchies}
\begin{lstlisting}
from scipy.integrate import odeint
from scipy.optimize import fsolve
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{\texttt{from} \ldots \texttt{import} - conventional way!}
\small
\begin{lstlisting}
from scipy import linspace, pi, sin
from pylab import plot, legend, annotate
from pylab import xlim, ylim
x = linspace(-5*pi, 5*pi, 500)
plot(x, x, 'b')
plot(x, -x, 'b')
plot(x, sin(x), 'g', linewidth=2)
plot(x, x*sin(x), 'r', linewidth=3)
legend(['x', '-x', 'sin(x)', 'xsin(x)'])
annotate('origin', xy = (0, 0))
xlim(-5*pi, 5*pi)
ylim(-5*pi, 5*pi)
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{\texttt{from} \ldots \texttt{import} - conventional way!}
\small
\begin{lstlisting}
import scipy
import pylab
x = scipy.linspace(-5*scipy.pi, 5*scipy.pi, 500)
pylab.plot(x, x, 'b')
pylab.plot(x, -x, 'b')
pylab.plot(x, scipy.sin(x), 'g', linewidth=2)
pylab.plot(x, x*scipy.sin(x), 'r', linewidth=3)
pylab.legend(['x', '-x', 'sin(x)', 'xsin(x)'])
pylab.annotate('origin', xy = (0, 0))
pylab.xlim(-5*scipy.pi, 5*scipy.pi)
pylab.ylim(-5*scipy.pi, 5*scipy.pi)
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Modules: Standard library}
\begin{itemize}
\item Very powerful, ``Batteries included''
\item Some standard modules:
\begin{itemize}
\item Math: \typ{math}, \typ{random}
\item Internet access: \typ{urllib2}, \typ{smtplib}
\item System, Command line arguments: \typ{sys}
\item Operating system interface: \typ{os}
\item Regular expressions: \typ{re}
\item Compression: \typ{gzip}, \typ{zipfile}, and \typ{tarfile}
\item And a whole lot more!
\end{itemize}
\item Check out the Python Library reference:
\url{http://docs.python.org/library/}
\end{itemize}
\inctime{5}
\end{frame}
\begin{frame}[fragile]
\frametitle{Modules of special interest}
\begin{description}[matplotlibfor2d]
\item[\texttt{pylab}] Easy, interactive, 2D plotting
\item[\texttt{scipy}] arrays, statistics, optimization, integration, linear
algebra, Fourier transforms, signal and image processing,
genetic algorithms, ODE solvers, special functions, and more
\item[\texttt{Mayavi}] Easy, interactive, 3D plotting
\end{description}
\end{frame}
\section{Objects}
\begin{frame}{Everything is an Object!}
\begin{itemize}
\item \typ{int}
\item \typ{float}
\item \typ{str}
\item \typ{list}
\item \typ{tuple}
\item \typ{string}
\item \typ{dictionary}
\item \typ{function}
\item User defined class is also an object!
\end{itemize}
\end {frame}
\begin{frame}[fragile]
\frametitle{Using Objects}
\begin{itemize}
\item Creating Objects
\begin{itemize}
\item Initialization
\end{itemize}
\begin{lstlisting}
In []: a = str()
In []: b = "Hello World"
\end{lstlisting}
\item Object Manipulation
\begin{itemize}
\item Object methods
\item ``.'' operator
\end{itemize}
\begin{lstlisting}
In []: "Hello World".split()
Out[]: ['Hello', 'World']
\end{lstlisting}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Objects provide consistency}
\small
\begin{lstlisting}
for element in (1, 2, 3):
print element
for key in {'one':1, 'two':2}:
print key
for char in "123":
print char
for line in open("myfile.txt"):
print line
for line in urllib2.urlopen('http://site.com'):
print line
\end{lstlisting}
\inctime{10}
\end{frame}
\begin{frame}
\frametitle{What did we learn?}
\begin{itemize}
\item Functions: Default and Keyword arguments
\item Modules
\item Objects
\end{itemize}
\end{frame}
\end{document}
%% Questions for Quiz %%
%% ------------------ %%
\begin{frame}
\frametitle{\incqno}
How many items can a function return?
\end{frame}