%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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: Data structures and functions}\author[FOSSEE Team] {The FOSSEE Group}\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}\date[] {8 November, 2009\\Day 2, Session 2}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\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{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, 1In []: 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} \begin{itemize} \item Nothing to do with Python. \end{itemize} \end{itemize}\end{block}\end{frame}\begin{frame}[fragile] \frametitle{\texttt{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 01 12 43 94 16\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{\texttt{for} \ldots \typ{range()}}Example: print squares of odd numbers from 3 to 9 \begin{lstlisting}In []: for i in range(3, 10, 2): ....: print i, i * i ....: ....:3 95 257 499 81\end{lstlisting}\inctime{5}\end{frame}\subsection{Exercises}\begin{frame}{Problem set 1: 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.\\\pause\emphbar{When can your code fail?}\inctime{5}\end{frame}\section{Data structures}\subsection{Lists}\begin{frame}[fragile] \frametitle{Lists}\begin{block}{We already know that} \begin{lstlisting}num = [1, 2, 3, 4] \end{lstlisting}\centerline{is a list}\end{block}\end{frame}\begin{frame}[fragile] \frametitle{Lists: methods} \begin{lstlisting}In []: num = [1, 2, 3, 4]In []: num + [9, 10, 11]Out[]: [1, 2, 3, 4, 9, 10, 11]In []: num.append([9, 10, 11])In []: numOut[]: [1, 2, 3, 4, [9, 10, 11]] \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Lists: methods} \begin{lstlisting}In []: num = [1, 2, 3, 4]In []: num.extend([5, 6, 7])In []: numOut[]: [1, 2, 3, 4, 5, 6, 7]In []: num.reverse()In []: numOut[]: [7, 6, 5, 4, 3, 2, 1]In []: num.remove(6)In []: num \end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Lists: slicing} \begin{itemize} \item \typ{list[initial:final]} \end{itemize}\begin{lstlisting}In []: a = [1, 2, 3, 4, 5]In []: a[1:3]Out[]: [2, 3]In []: a[1:-1]Out[]: [2, 3, 4]In []: a[:3]Out[]: [1, 2, 3]\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Lists: slicing} \begin{itemize} \item \typ{list[initial:final:step]} \end{itemize}\begin{lstlisting}In []: a[1:-1:2]Out[]: [2, 4]In []: a[::2]Out[]: [1, 3, 5]In []: a[-1::-1]Out[]: [5, 4, 3, 2, 1]\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{List containership}\begin{lstlisting}In []: 4 in numOut[]: TrueIn []: b = 15In []: b in numOut[]: FalseIn []: b not in numOut[]: True\end{lstlisting}\end{frame}\subsection{Tuples}\begin{frame}[fragile]\frametitle{Tuples: Immutable lists}\begin{lstlisting}In []: t = (1, 2, 3, 4, 5, 6, 7, 8)In []: t[0] + t[3] + t[-1]Out[]: 13In []: t[4] = 7 \end{lstlisting}\pause\begin{block}{Note:}\begin{itemize} \item Tuples are immutable - cannot be changed\end{itemize}\end{block} \inctime{10}\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}\end{frame}\subsection{Dictionaries}\begin{frame}[fragile] \frametitle{Dictionaries: recall} \begin{lstlisting}In []: player = {'Mat': 134,'Inn': 233, 'Runs': 10823, 'Avg': 52.53}In []: player['Avg']Out[]: 52.530000000000001 \end{lstlisting} \begin{block}{Note!} Duplicate keys $\Rightarrow$ overwritten!\\ You can iterate through a dictionary using keys. \end{block}\end{frame}\begin{frame}[fragile] \frametitle{Dictionaries: containership} \begin{lstlisting}In []: 'Inn' in playerOut[]: TrueIn []: 'Econ' in playerOut[]: False \end{lstlisting} \begin{block}{Note} \begin{itemize} \item We can check for the containership of keys only \item Not values \end{itemize} \end{block}\end{frame}\begin{frame}[fragile] \frametitle{Dictionaries: methods} \begin{lstlisting}In []: player.keys()Out[]: ['Runs', 'Inn', 'Avg', 'Mat']In []: player.values()Out[]: [10823, 233, 52.530000000000001, 134] \end{lstlisting}\end{frame}\begin{frame} {Problem Set 2.1: Problem 2.1.1}You are given date strings of the form ``29 Jul, 2009'', or ``4 January 2008''. In other words a number, a string and another number, with a comma sometimes separating the items.\\Write a function that takes such a string and returns a tuple (yyyy, mm, dd) where all three elements are ints.\end{frame}\subsection{Sets}\begin{frame}[fragile] \frametitle{Sets} \begin{itemize} \item Simplest container, mutable \item No ordering, no duplicates \item usual suspects: union, intersection, subset \ldots \item >, >=, <, <=, in, \ldots \end{itemize} \begin{lstlisting}In []: f10 = set([1,2,3,5,8])In []: p10 = set([2,3,5,7])In []: f10 | p10Out[]: set([1, 2, 3, 5, 7, 8])\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Set \ldots} \begin{lstlisting}In []: f10 & p10Out[]: set([2, 3, 5])In []: f10 - p10Out[]: set([1, 8])In []: p10 - f10, f10 ^ p10Out[]: (set([7]), set([1, 7, 8]))In []: set([2,3]) < p10Out[]: True\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{Set \ldots} \begin{lstlisting}In []: set([2,3]) <= p10Out[]: TrueIn []: 2 in p10Out[]: TrueIn []: 4 in p10Out[]: FalseIn []: len(f10)Out[]: 5\end{lstlisting}\end{frame}\begin{frame} \frametitle{Problem set 2.2: Problem 2.2.1}Given a dictionary of the names of students and their marks, identify how many duplicate marks are there? and what are these?\end{frame}\begin{frame} \frametitle{Problem 2.2.2}Given a list of words, find all the anagrams in the list.\inctime{15}\end{frame}\section{Functions}\begin{frame}[fragile] \frametitle{Functions} \begin{itemize} \item \kwrd{def} - keyword to define a function \item Arguments are local to a function \item Functions can return multiple values \end{itemize}\end{frame}\begin{frame}[fragile] \frametitle{Functions: example} \begin{lstlisting}def signum( r ): """returns 0 if r is zero -1 if r is negative +1 if r is positive""" if r < 0: return -1 elif r > 0: return 1 else: return 0 \end{lstlisting} \emphbar{Note docstrings}\end{frame}\begin{frame}[fragile] \frametitle {What does this function do?} \begin{lstlisting}def what( n ): if n < 0: n = -n while n > 0: if n % 2 == 1: return False n /= 10 return True \end{lstlisting}\end{frame} \begin{frame}[fragile] {What does this function do?}\begin{lstlisting}def what( n ): i = 1 while i * i < n: i += 1 return i * i == n, i \end{lstlisting}\end{frame}\begin{frame} \frametitle{What did we learn?} \begin{itemize} \item Loops: \kwrd{while}, \kwrd{for} \item Advanced Data structures: \begin{itemize} \item Lists \item Tuples \item Dictionaries \item Sets \end{itemize} \item Functions \item Docstrings \end{itemize}\end{frame}\end{document}