diff -r ae070c133120 -r 24992ab48f2b day1/Session-4.tex --- a/day1/Session-4.tex Wed Oct 14 11:02:18 2009 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,418 +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} - -\usepackage{pgf} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 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:\\Advanced Python data structures, Functions and Debugging} - -\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} - -\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} -\date[] {10, October 2009\\Day 1, Session 4} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%\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: -\AtBeginSection[] -{ - \begin{frame} - \frametitle{Outline} - \tableofcontents[currentsection,subsections] - \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} - -\section{Advanced Data structures} - -\subsection{Dictionary} -\begin{frame}{Dictionary} - \begin{itemize} - \item lists and tuples index: 0 \ldots n - \item dictionaries index using strings - \item \typ{ d = \{ ``Hitchhiker's guide'' : 42, ``Terminator'' : ``I'll be back''\}} - \item \typ{d[``Terminator''] => ``I'll be back''} - \item aka associative array, key-value pair, hashmap, hashtable \ldots - \item what can be keys? - \end{itemize} -\end{frame} - -\begin{frame}{Dictionary \ldots } - \begin{itemize} - \item \alert{Unordered} - \begin{block}{Standard usage} - for key in dict:\\ - \ \ \ \ print dict[key] - \end{block} - \item \typ{d.keys()} returns a list - \item can we have duplicate keys? - \end{itemize} - \inctime{5} -\end{frame} - -\begin{frame} {Problem Set 6.1} - \begin{description} -\item[6.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. - \item[6.1.2] Count word frequencies in a file. - \item[6.1.3] Find the most used Python keywords in your Python code (import keyword). -\end{description} - -\inctime{10} -\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} -\inctime{5} -\end{frame} - -\begin{frame} - \frametitle{Problem set 6.2} - \begin{description} - \item[6.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[6.2.2] Given a string of the form ``4-7, 9, 12, 15'' find the numbers missing in this list for a given range. -\end{description} -\inctime{10} -\end{frame} - - -\section{Functions Reloaded!} -\begin{frame}[fragile] - \frametitle{Advanced functions} - \begin{itemize} - \item default args - \item var args - \item keyword args - \item scope - \item \typ{global} - \end{itemize} -\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{Keyword arguments} -\begin{frame}[fragile] - \frametitle{Functions: keyword 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(prompt='?') -ask_ok(prompt='?', complaint='[y/n]') -ask_ok(complaint='[y/n]', prompt='?') -\end{lstlisting} -\inctime{15} -\end{frame} - -\section{Functional programming} -\begin{frame}[fragile] - \frametitle{Functional programming} - \begin{itemize} - \item What is the basic idea? - \item Why is it interesting? - \item \typ{map, reduce, filter} - \item list comprehension - \item generators - \end{itemize} -\end{frame} - -\subsection{List comprehensions} -\begin{frame}[fragile] - \frametitle{List Comprehensions} -Lets say we want to squares of all the numbers from 1 to 100 - \begin{lstlisting} -squares = [] -for i in range(1, 100): - squares.append(i * i) - \end{lstlisting} - \begin{lstlisting} -# list comprehension -squares = [i*i for i in range(1, 100)] - \end{lstlisting} -Which is more readable? -\end{frame} - -\begin{frame}[fragile] - \frametitle{List Comprehensions} -What if you had a more complex function? -Lets say we want squares of numbers from 1 to 100 ending in 1, 2, 5, 7 only - \begin{lstlisting} -squares = [] -for i in range(1, 100): - if i % 10 in [1, 2, 5, 7]: - squares.append(i * i) - \end{lstlisting} - \begin{lstlisting} -# list comprehension -squares = [i*i for i in range(1, 100) - if i % 10 in [1, 2, 5, 7]] - \end{lstlisting} -Which is more readable? -\inctime{15} -\end{frame} - -\section{Debugging} -\subsection{Errors and Exceptions} -\begin{frame}[fragile] - \frametitle{Errors} - \begin{lstlisting} ->>> while True print 'Hello world' - \end{lstlisting} -\pause - \begin{lstlisting} - File "", line 1, in ? - while True print 'Hello world' - ^ -SyntaxError: invalid syntax -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Exceptions} - \begin{lstlisting} ->>> print spam -\end{lstlisting} -\pause -\begin{lstlisting} -Traceback (most recent call last): - File "", line 1, in -NameError: name 'spam' is not defined -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Exceptions} - \begin{lstlisting} ->>> 1 / 0 -\end{lstlisting} -\pause -\begin{lstlisting} -Traceback (most recent call last): - File "", line 1, in -ZeroDivisionError: integer division -or modulo by zero -\end{lstlisting} -\end{frame} - -\subsection{Strategy} -\begin{frame}[fragile] - \frametitle{Debugging effectively} - \begin{itemize} - \item \kwrd{print} based strategy - \item Process: - \end{itemize} -\pgfimage[interpolate=true,width=5cm,height=5cm]{DebugginDiagram.png} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Debugging effectively} - \begin{itemize} - \item Using \typ{\%debug} in IPython - \end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Debugging in IPython} -\small -\begin{lstlisting} -In [1]: import mymodule -In [2]: mymodule.test() ---------------------------------------------- -NameError Traceback (most recent call last) - in () -mymodule.py in test() - 1 def test(): -----> 2 print spam -NameError: global name 'spam' is not defined - -In [3]: %debug -> mymodule.py(2)test() - 0 print spam -ipdb> -\end{lstlisting} -\inctime{15} -\end{frame} - -\subsection{Exercise} -\begin{frame}[fragile] -\frametitle{Debugging: Exercise} -\small -\begin{lstlisting} -import keyword -f = open('/path/to/file') - -freq = {} -for line in f: - words = line.split() - for word in words: - key = word.strip(',.!;?()[]: ') - if keyword.iskeyword(key): - value = freq[key] - freq[key] = value + 1 - -print freq -\end{lstlisting} -\inctime{10} -\end{frame} - -\begin{frame} - \frametitle{What did we learn?} - \begin{itemize} - \item Dictionaries - \item Sets - \item Default and keyword arguments - \item Functional Programming, list comprehensions - \item Errors and Exceptions in Python - \item Debugging: \%debug in IPython - \end{itemize} -\end{frame} -\end{document}