diff -r 21de307e6823 -r 7f4c51382f89 day1/Session-3.tex~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/Session-3.tex~ Wed Oct 07 00:50:06 2009 +0530 @@ -0,0 +1,423 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Tutorial slides on Python. +% +% Author: Prabhu Ramachandran +% Copyright (c) 2005-2008, 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, + 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:\\Modular Code, Handling Files and Objects} + +\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} + +\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {10, October 2009} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\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} +} + + +% 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{Python} + +\begin{frame} + {Problem set 3} + As you can guess, idea is to use \kwrd{for}! +\end{frame} + +\begin{frame}{Problem 3.1} + Which of the earlier problems is simpler when we use \kwrd{for} instead of \kwrd{while}? +\end{frame} + +\begin{frame}{Problem 3.2} + Given an empty chessboard and one Bishop placed in any square, say (r, c), generate the list of all squares the Bishop could move to. +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem 3.3} + + Given two real numbers \typ{a, b}, and an integer \typ{N}, write a + function named \typ{linspace( a, b, N)} that returns an ordered list + of \typ{N} points starting with \typ{a} and ending in \typ{b} and + equally spaced.\\ + + For example, \typ{linspace(0, 5, 11)}, should return, \\ +\begin{lstlisting} +[ 0.0 , 0.5, 1.0 , 1.5, 2.0 , 2.5, + 3.0 , 3.5, 4.0 , 4.5, 5.0 ] +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem 3.4a (optional)} + +Use the \typ{linspace} function and generate a list of N tuples of the form\\ +\typ{[($x_1$,f($x_1$)),($x_2$,f($x_2$)),\ldots,($x_N$,f($x_N$))]}\\for the following functions,\begin{itemize} + \item \typ{f(x) = sin(x)} + \item \typ{f(x) = sin(x) + sin(10*x)}. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem 3.4b (optional)} + + Using the tuples generated earlier, determine the intervals where the roots of the functions lie. + + \inctime{15} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TIME: 15 m, running 185m +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{IO} + +\begin{frame}[fragile] + \frametitle{Simple tokenizing and parsing} + \begin{lstlisting} +s = """The quick brown fox jumped + over the lazy dog""" +for word in s.split(): + print word.capitalize() + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem 4.1} + Given a string like, ``1, 3-7, 12, 15, 18-21'', produce the list \\ + \begin{lstlisting} + [1,3,4,5,6,7,12,15,18,19,20,21] + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{File handling} +\begin{lstlisting} +>>> f = open('/path/to/file_name') +>>> data = f.read() # Read entire file. +>>> line = f.readline() # Read one line. +>>> f.close() # close the file. +\end{lstlisting} +Writing files +\begin{lstlisting} +>>> f = open('/path/to/file_name', 'w') +>>> f.write('hello world\n') +>>> f.close() +\end{lstlisting} +\begin{itemize} + \item Everything read or written is a string +\end{itemize} +\emphbar{Try \typ{file?} for more help} +\end{frame} + +\begin{frame}[fragile] + \frametitle{File and \kwrd{for}} +\begin{lstlisting} +>>> f = open('/path/to/file_name') +>>> for line in f: +... print line +... +\end{lstlisting} +\end{frame} + +\begin{frame}{Problem 4.2} + The given file has lakhs of records in the form:\\ + \typ{RGN;ID;NAME;MARK1;\ldots;MARK5;TOTAL;PFW}\\ + Some entries may be empty. Read the data from this file and print the + name of the student with the maximum total marks. +\end{frame} + +\begin{frame}{Problem 4.3} + For the same data file compute the average marks in different + subjects, the student with the maximum mark in each subject and also + the standard deviation of the marks. Do this efficiently. + + \inctime{20} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TIME: 20 m, running 205m +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{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 later 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} +\end{frame} + +\begin{frame}[fragile] + {Modules of special interest} + \begin{description}[matplotlibfor2d] + + \item[\typ{numpy}] Efficient, powerful numeric arrays + + \item[\typ{matplotlib}] Easy, interactive, 2D plotting + + \item[\typ{scipy}] statistics, optimization, integration, linear + algebra, Fourier transforms, signal and image processing, + genetic algorithms, ODE solvers, special functions, and more + + \item[Mayavi] Easy, interactive, 3D plotting + + \end{description} +\end{frame} + +\begin{frame}[fragile] + {Creating your own modules} + \begin{itemize} + \item Define variables, functions and classes in a file with a + \typ{.py} extension + \item This file becomes a module! + \item Accessible when in the current directory + \item Use \typ{cd} in IPython to change directory + + \item Naming your module + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Modules: example} + \begin{lstlisting} +# --- arith.py --- +def gcd(a, b): + if a%b == 0: return b + return gcd(b, a%b) +def lcm(a, b): + return a*b/gcd(a, b) +# ------------------ +>>> import arith +>>> arith.gcd(26, 65) +13 +>>> arith.lcm(26, 65) +130 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem 5.1} + + Put all the functions you have written so far as part of the problems + into one module called \typ{iitb.py} and use this module from IPython. + +\inctime{20} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TIME: 20 m, running 225m +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{Objects} +\begin{frame}{Objects in Python} + \begin{itemize} + \item What is an Object? (Types and classes) + \item identity + \item type + \item method + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Why are they useful?} + \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} +\end{frame} + +\begin{frame}{And the winner is \ldots OBJECTS!} + All objects providing a similar inteface can be used the same way.\\ + Functions (and others) are first-class objects. Can be passed to and returned from functions. + \inctime{10} +\end{frame} + +\subsection{Coding Style in Python} +\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{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} +\end{frame} +\inctime{10} +\end{document}