%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Tutorial slides on Python. % % Author: The FOSSEE Group % Copyright (c) 2009, The FOSSEE Group, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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:\\A great programming toolkit} \author[FOSEE Team] {The FOSSEE Group} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {31, October 2009\\Day 1, 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} {Acknowledgements} \begin{center} This program is conducted by\\ IIT, Bombay\\ as part of the open source initiatives\\ under the aegis of\\ \alert{National Mission on Education through ICT,} \\ Ministry of HRD. \end{center} \end{frame} \begin{frame} \frametitle{Outline} \tableofcontents % You might wish to add the option [pausesections] \end{frame} \section{Functions} \begin{frame}{Functions: Definition} \begin{itemize} \item \kwrd{def} keyword \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Functions: Example 1} \begin{lstlisting} In [1]: def plot_sinx(): ....: x = linspace(0, 2*pi, 100) ....: plt.plot(x, sin(x)) ....: plt.show() ....: In [2]: plot_sinx() \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Functions: Example 2} \begin{lstlisting} In [3]: def f(x): ....: return sin(x*x*x)+(3*x*x) In [4]: x = linspace(0,2*pi, 1000) In [5]: plt.plot(x, f(x)) \end{lstlisting} \inctime{10} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TIME: 10 m, running %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Creating and running scripts} \begin{frame} {Creating python files} \begin{itemize} \item aka scripts \item use your editor \item extension \typ{.py} \item run with \texttt{python hello.py} at the command line \item in IPython using \kwrd{\%run} \end{itemize} \inctime{5} \end{frame} \section{Files Handling} \begin{frame}[fragile] \frametitle{Basic File Operations} Opening and Reading files \begin{lstlisting} In [6]: f = open('/path/to/file_name') In [7]: data = f.read() # Read entire file. In [8]: line = f.readline() # Read one line. In [9]: f.close() # close the file. \end{lstlisting} Writing files \begin{lstlisting} In [10]: f = open('/path/to/file_name', 'w') In [11]: f.write('hello world\n') In [12]: f.close() \end{lstlisting} \begin{itemize} \item Everything read or written is a string \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{File and \kwrd{for}} \begin{lstlisting} In [13]: f = open('dummyfile') In [14]: for line in f: ...: print line ...: \end{lstlisting} \inctime{10} \end{frame} \section{Strings} \begin{frame}[fragile] \frametitle{Strings} \begin{lstlisting} s = 'this is a string' s = 'This one has "quotes" inside!' s = "I have 'single-quotes' inside!" l = "A string spanning many lines\ one more line\ yet another" t = """A triple quoted string does not need to be escaped at the end and "can have nested quotes" etc.""" \end{lstlisting} \end{frame} \begin{frame}[fragile]\frametitle{Strings and \typ{split()}} \begin{lstlisting} In [15]: a = 'hello world' In [16]: a.split() Out[17]: ['hello', 'world'] \end{lstlisting} Now try this: \begin{lstlisting} In [18]: b = 'KD, Madhu, Punchagan, Shantanu, Vattam' In [19]: b.split(',') Out[20]: ['KD', ' Madhu', ' Punchagan', ' Shantanu', ' Vattam'] \end{lstlisting} \inctime{5} \end{frame} \section{Plotting points} \begin{frame}[fragile] \frametitle{How to plot points?} We saw how to plot graphs, lets now look at how to plot points.\\ \begin{lstlisting} In [21]: plt.plot(x, sin(x), 'ro') Out[22]: [] \end{lstlisting} \begin{itemize} \item \kwrd{'r'},\kwrd{'g'},\kwrd{'b'} for red, green and blue \item \kwrd{'o'} - Dots \item \kwrd{'-'} - Lines \item \kwrd{'- -'} - Dashed lines \end{itemize} \inctime{5} \end{frame} \section{Lists} \begin{frame}[fragile] \frametitle{List creation and indexing} \begin{lstlisting} In [23]: lst = [] #Empty list In [24]: lst = [1,2,3,4] #More useful list In [25]: len(lst) Out[26]: 4 In [27]: lst[0]+lst[1]+lst[-1] Out[27]: 7 \end{lstlisting} \begin{itemize} \item Indices start with ? \item Negative indices indicate ? \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{List: slices} \begin{itemize} \item Slicing is a basic operation \item \typ{list[initial:final:step]} \item The step is optional \end{itemize} \begin{lstlisting} In [28]: lst[1:3] # A slice. Out[28]: [2, 3] In [29]: lst[1:-1] Out[29]: [2, 3] In [30]: lst[1:] == lst[1:-1] Out[30]: False \end{lstlisting} Explain last result \end{frame} \begin{frame}[fragile] \frametitle{List: more slices} \begin{lstlisting} In [31]: lst[0:-1:2] # Notice the step! Out[31]: [1, 3] In [31]: lst[::2] Out[31]: [1, 3] In [32]: lst[-1::-1] \end{lstlisting} What do you think the last one will do? \end{frame} \begin{frame}[fragile] \frametitle{List methods} \begin{lstlisting} In [33]: lst.append(5) In [34]: lst Out[34]: [1, 2, 3, 4, 5] In [35]: lst.append([6,7]) In [36]: lst Out[36]: [1, 2, 3, 4, 5, [6, 7]] In [37]: lst.extend([8,9]) In [38]: lst Out[38]: [1, 2, 3, 4, 5, [6, 7], 8, 9] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{List containership} \begin{lstlisting} In [39]: animals = ['cat', 'dog', 'rat', 'croc'] In [40]: 'dog' in animals Out[40]: True In [41]: 'snake' in animals Out[41]: False \end{lstlisting} \inctime{10} \end{frame} \section{Modules and import} \begin{frame}{Modules and \typ{import}} \begin{itemize} \item \kwrd{import} x \item \kwrd{from} x \kwrd{import} y \end{itemize} Whats the difference?? \inctime{5} \end{frame} \end{document}