From b4ca5be84f886e594966b10bc5c013857f826a3d Mon Sep 17 00:00:00 2001 From: Madhusudan.C.S Date: Wed, 14 Oct 2009 12:43:21 +0530 Subject: Created the pristine form of the repository for Goa workshop. --- day1/Session-3.tex | 522 ----------------------------------------------------- 1 file changed, 522 deletions(-) delete mode 100755 day1/Session-3.tex (limited to 'day1/Session-3.tex') diff --git a/day1/Session-3.tex b/day1/Session-3.tex deleted file mode 100755 index 6ad35b1..0000000 --- a/day1/Session-3.tex +++ /dev/null @@ -1,522 +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} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 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\\Day 1, Session 3} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%\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 section: -\AtBeginSection[] -{ - \begin{frame} - \frametitle{Outline} - \tableofcontents[currentsection] - \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{\typ{for}, Lists and Tuples} - -\begin{frame}{Quick Recap} - \begin{itemize} - \item List indexing and slicing - \item The \kwrd{range()} function - \item \kwrd{for} - \item Iterating lists and tuples using \kwrd{for} and \kwrd{range()} - \end{itemize} -\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.4} - -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.5} - - Using the tuples generated earlier, determine the intervals where the roots of the functions lie. - - \inctime{15} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TIME: 15 m, running 185m -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Parsing} - -\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} - -\section{Input/Output} - -\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} -$ cat dummyfile -One 1 -Two 2 -Three 3 -Four 4 -Five 5 -Six 6 -Seven 7 -Eight 8 -Nine 9 -Ten 10 -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{File and \kwrd{for}} -\begin{lstlisting} ->>> f = open('dummyfile') ->>> for line in f: -... print line -... -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{File and \kwrd{for}} -\begin{lstlisting} -In [1]: f = open('dummyfile') - -In [2]: for line in f: - ...: print line - ...: -\end{lstlisting} - -\begin{columns} - \column{0.3\textwidth} - -\begin{lstlisting} -One 1 - -Two 2 - -Three 3 -\end{lstlisting} - \column{0.6\textwidth} -\pause -\begin{block}{What happens when ...} -the \kwrd{print line} is replaced by \kwrd{print line,} -\end{block} -\end{columns} -\ldots -\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{30} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TIME: 30 m, running 215m -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\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} -\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{bprim.py} and use this module from IPython. - -\inctime{25} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TIME: 25 m, running 230m -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\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{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{10} -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TIME: 10 m, running 240m -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\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{IPython Examples} - \begin{lstlisting} -In [1]: l = [] #Initialising a list object -In [2]: l? -In [3]: l. - \end{lstlisting} -\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} -\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} - -\section{Summary} - -\begin{frame}{What have we learnt so far?} - \begin{itemize} - \item Operating on lists and tuples using \kwrd{for} - \item Simple string tokenizing and parsing - \item Writing to and Reading from files using \kwrd{for} - \item Using and writing Python Modules - \item Coding Style - \item Objects in Python - \end{itemize} -\end{frame} - -\end{document} -- cgit