
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 <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{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}<beamer>
-    \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 "<stdin>", 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 "<stdin>", line 1, in <module>
-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 "<stdin>", line 1, in <module>
-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)
-<ipython console> in <module>()
-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}




