%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %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{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 language: Data structures and functions} \author[FOSSEE Team] {The FOSSEE Group} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {1, 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} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } \AtBeginSection[] { \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} \frametitle{Outline} \tableofcontents % You might wish to add the option [pausesections] \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, 5, 6, 7, 8] \end{lstlisting} \centerline{is a list} \end{block} \end{frame} \begin{frame}[fragile] \frametitle{Lists: methods} \begin{lstlisting} In []: num.reverse() In []: num Out[]: [8, 7, 6, 5, 4, 3, 2, 1] In []: num.extend([0, -1, -2]) In []: num Out[]: [8, 7, 6, 5, 4, 3, 2, 1, 0, -1] In []: num.remove(0) In []: num Out[]: [8, 7, 6, 5, 4, 3, 2, 1, -1] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{List containership} \begin{lstlisting} In []: a = 8 In []: a in num Out[]: True In []: b = 10 In []: b in num Out[]: False In []: b not in num Out[]: 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[]: 13 \end{lstlisting} \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 are not allowed!\\ Dictionaries are iterable through keys. \end{block} \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{Set} \begin{frame}[fragile] \frametitle{Set} \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} >>> f10 = set([1,2,3,5,8]) >>> p10 = set([2,3,5,7]) >>> f10|p10 set([1, 2, 3, 5, 7, 8]) >>> f10&p10 set([2, 3, 5]) >>> f10-p10 set([8, 1]) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Set} \begin{lstlisting} >>> p10-f10, f10^p10 set([7]), set([1, 7, 8]) >>> set([2,3]) < p10 True >>> set([2,3]) <= p10 True >>> 2 in p10 True >>> 4 in p10 False >>> len(f10) 5 \end{lstlisting} \end{frame} \begin{frame} \frametitle{Problem set 2.2} \begin{description} \item[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? \item[2.2.2] Given a string of the form ``4-7, 9, 12, 15'' find the missing numbers in the given range. \end{description} \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 Docstrings are important! \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} \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} \subsection{Default arguments} \begin{frame}[fragile] \frametitle{Functions: default arguments} \small \begin{lstlisting} def ask_ok(prompt, complaint='Yes or no!'): while True: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False print complaint ask_ok('?') ask_ok('?', '[Y/N]') \end{lstlisting} \end{frame} \subsection{Built-in functions} \begin{frame} {Before writing a function} \begin{itemize} \item Variety of builtin 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] {Modules} \begin{lstlisting} >>> sqrt(2) Traceback (most recent call last): File "", line 1, in NameError: name 'sqrt' is not defined >>> import math >>> math.sqrt(2) 1.4142135623730951 \end{lstlisting} \end{frame} \begin{frame}[fragile] {Modules} \begin{itemize} \item The \kwrd{import} keyword ``loads'' a module \item One can also use: \begin{lstlisting} >>> from math import sqrt >>> from math import * \end{lstlisting} \item What is the difference? \item \alert{Use the latter only in interactive mode} \end{itemize} \emphbar{Package hierarchies} \begin{lstlisting} >>> from os.path import exists \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} \section{Coding Style} \begin{frame}{Readability and Consistency} \begin{itemize} \item Readability Counts!\\Code is read more often than its written. \item Consistency! \item Know when to be inconsistent. \end{itemize} \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{Code Layout} \begin{itemize} \item Indentation \item Tabs or Spaces?? \item Maximum Line Length \item Blank Lines \item Encodings \end{itemize} \end{frame} \begin{frame}{Whitespaces in Expressions} \begin{itemize} \item When to use extraneous whitespaces?? \item When to avoid extra whitespaces?? \item Use one statement per line \end{itemize} \end{frame} \begin{frame}{Comments} \begin{itemize} \item No comments better than contradicting comments \item Block comments \item Inline comments \end{itemize} \end{frame} \begin{frame}{Docstrings} \begin{itemize} \item When to write docstrings? \item Ending the docstrings \item One liner docstrings \end{itemize} More information at PEP8: http://www.python.org/dev/peps/pep-0008/ \inctime{5} \end{frame} \section{Objects} \begin{frame}{Objects in general} \begin{itemize} \item What is an Object? (Types and classes) \item identity \item type \item method \end{itemize} \end{frame} \begin{frame}{Almost everything is an Object!} \begin{itemize} \item \typ{list} \item \typ{tuple} \item \typ{string} \item \typ{dictionary} \item \typ{function} \item Of course, user defined class objects! \end{itemize} \end {frame} \begin{frame}{Using Objects} \begin{itemize} \item Creating Objects: Initialization \item Object Manipulation: Object methods and ``.'' operator \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 Lists, Tuples, Dictionaries, Sets: creation and manipulation \item More about functions \item Coding style \item Objects: creation and manipulation \end{itemize} \end{frame} \end{document}