%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Tutorial slides on Python.%% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>% 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<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]{\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 formal approach}\author[FOSSEE Team] {The FOSSEE Group}\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}\date[] {1, November 2009\\Day 2, 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}<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{Data types}\begin{frame} \frametitle{Primitive Data types} \begin{itemize} \item Numbers: float, int, complex \item Strings \item Boolean \end{itemize}\end{frame}\subsection{Numbers}\begin{frame}[fragile] \frametitle{Numbers} \begin{itemize} \item \kwrd{int}\\ Any whole number is an \kwrd{int}, no matter what the size! \begin{lstlisting}In [1]: a = 13In [2]: b = 99999999999999999999 \end{lstlisting} \item \kwrd{float} \begin{lstlisting}In [3]: fl = 3.141592 \end{lstlisting} \end{itemize}\end{frame}\begin{frame}[fragile]\frametitle{Complex numbers} \begin{lstlisting}In [1]: cplx = 3+4jIn [2]: abs(cplx)Out[2]: 5.0In [3]: cplx.imagOut[3]: 4.0In [4]: cplx.realOut[4]: 3.0 \end{lstlisting}\end{frame}\subsection{Boolean}\begin{frame}[fragile] \frametitle{Boolean} \begin{lstlisting}In [1]: t = TrueIn [2]: f = not tOut[2]: FalseIn [3]: f or tOut[3]: TrueIn [4]: f and tOut[4]: False \end{lstlisting} \inctime{5}\end{frame}\subsection{Strings}\begin{frame}[fragile] \frametitle{Strings}Strings were introduced previously, let us now look at them in a little more detail. \begin{lstlisting}In [1]: w = "hello"In [2]: print w[0] + w[2] + w[-1]Out[2]: hloIn [3]: len(w) # guess whatOut[3]: 5 \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Strings \ldots} \begin{lstlisting}In [1]: w[0] = 'H' # Can't do that!--------------------------------------------TypeError Traceback (most recent call last)/<ipython console> in <module>()TypeError: 'str' object does not support item assignment \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{String methods} \begin{lstlisting}In [1]: a = 'Hello World'In [2]: a.startswith('Hell')Out[2]: TrueIn [3]: a.endswith('ld')Out[3]: TrueIn [4]: a.upper()Out[4]: 'HELLO WORLD'In [5]: a.lower()Out[5]: 'hello world' \end{lstlisting}\end{frame}\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 [1]: ''.join(['a', 'b', 'c'])Out[1]: 'abc' \end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{String formatting} \begin{lstlisting}In [1]: x, y = 1, 1.234In [2]: 'x is %s, y is %s' %(x, y)Out[2]: 'x is 1, y is 1.234' \end{lstlisting} \emphbar{\url{http://docs.python.org/library/stdtypes.html}} \inctime{10}\end{frame}\section{Operators}\begin{frame}[fragile] \frametitle{Arithematic operators} \begin{lstlisting}In [1]: 1786 % 12Out[1]: 10In [2]: 3124 * 126789Out[2]: 396088836In [3]: a = 3124 * 126789In [4]: big = 1234567891234567890 ** 3In [5]: verybig = big * big * big * big \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Arithematic operators \ldots} \begin{lstlisting}In [1]: 17/2Out[1]: 8In [2]: 17/2.0Out[2]: 8.5In [3]: 17.0/2Out[3]: 8.5In [4]: 17.0/8.5Out[4]: 2.0 \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{String operations} \begin{lstlisting}In [1]: s = 'Hello 'In [2]: p = 'World'In [3]: s + p Out[3]: 'Hello World'In [4]: s * 12 Out[4]: 'Hello Hello Hello Hello ...' \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{String operations \ldots} \begin{lstlisting}In [1]: s * s--------------------------------------------TypeError Traceback (most recent call last)/<ipython console> in <module>()TypeError: can't multiply sequence by non-int of type 'str' \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Relational and logical operators} \begin{lstlisting}In [1]: pos, zer, neg = 1, 0, -1In [2]: pos == negOut[2]: FalseIn [3]: pos >= negOut[3]: TrueIn [4]: neg < zer < posOut[4]: TrueIn [5]: pos + neg != zerOut[5]: False \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Built-ins} \begin{lstlisting}In [1]: int(17/2.0)Out[1]: 8In [2]: float(17/2) # RecallOut[2]: 8.0In [3]: str(17/2.0)Out[3]: '8.5'In [4]: round( 7.5 )Out[4]: 8.0 \end{lstlisting}\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}In [1]: a = 1In [2]: a = 1.1In [3]: a = "Now I am a string!" \end{lstlisting} \item Comments: \begin{lstlisting}In [4]: a = 1 # In-line commentsIn [5]: # Comment in a line to itself.In [6]: a = "# This is not a comment!" \end{lstlisting} \end{itemize} \inctime{15}\end{frame}\section{Simple IO}\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}\section{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}\subsection{Basic Conditional flow}\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} \inctime{10}\end{frame}\subsection{Basic Looping}\begin{frame}[fragile] \frametitle{\typ{while}}Example: Fibonacci series \begin{lstlisting}# the sum of two elements# defines the nexta, b = 0, 1while 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 \alert {range() returns a list of integers} \item \alert {The start and the step arguments are optional} \end{itemize}\end{frame}\begin{frame}[fragile] \frametitle{\typ{for} \ldots \typ{range()}}Example: print squares of first \typ{n} numbers \begin{lstlisting}In []: for i in range(5): ....: print i, i * i ....: ....: 0 01 12 43 94 16\end{lstlisting}\inctime{5}\end{frame}\subsection{Exercises}\begin{frame} \frametitle{Problem set 1} \begin{itemize} \item All the problems can be\\ solved using \kwrd{if} and \kwrd{while} \end{itemize}\end{frame}\begin{frame}{Problem 1.1} 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$\\\vspace*{0.2in}\emphbar{These are called $Armstrong$ numbers.}\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.\end{frame}\begin{frame}[fragile]{Problem 1.3} Write a program that prints the following pyramid on the screen. \begin{lstlisting}12 23 3 34 4 4 4 \end{lstlisting}The number of lines must be obtained from the user as input.\\\pause\emphbar{When can your code fail?}\only<2->{\inctime{10}}\end{frame}\begin{frame}[fragile] \frametitle{What did we learn?} \begin{itemize} \item Basic data types \item Arithematic, logical and relational operations \item Conditional structures \item Loops \end{itemize}\end{frame}\end{document}