From 2c5145f262e82996c9c2424159e5eb5dde47fae7 Mon Sep 17 00:00:00 2001 From: Prabhu Ramachandran Date: Tue, 15 May 2018 19:17:01 +0530 Subject: Reorganize files so order is obvious. --- basic_python/01_basics.tex | 698 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 698 insertions(+) create mode 100644 basic_python/01_basics.tex (limited to 'basic_python/01_basics.tex') diff --git a/basic_python/01_basics.tex b/basic_python/01_basics.tex new file mode 100644 index 0000000..28aa214 --- /dev/null +++ b/basic_python/01_basics.tex @@ -0,0 +1,698 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Tutorial slides on Python. +% +% Author: FOSSEE +% Copyright (c) 2009-2017, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[14pt,compress]{beamer} + +\input{macros.tex} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Title page +\title[Basic Python]{Python language: Basics} + +\author[FOSSEE Team] {The FOSSEE Group} + +\institute[FOSSEE -- IITB] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {Mumbai, India} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DOCUMENT STARTS +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame} + \frametitle{Outline} + \tableofcontents + % You might wish to add the option [pausesections] +\end{frame} + +\section{Data types} + +\begin{frame} + \frametitle{Primitive Data types} + \begin{itemize} + \item Numbers: float, int, complex + \item Strings + \item Booleans + \end{itemize} +\end{frame} + +\subsection{Numbers} +\begin{frame}[fragile] + \frametitle{Numbers} + \begin{itemize} + \item \kwrd{int}\\ whole number, no matter what the size! + \begin{lstlisting} +In []: a = 13 + +In []: b = 99999999999999999999 + \end{lstlisting} + \item \kwrd{float} + \begin{lstlisting} +In []: p = 3.141592 + \end{lstlisting} + \item \kwrd{complex} + \begin{lstlisting} +In []: c = 3+4j +In []: c = complex(3, 4) + \end{lstlisting} + \end{itemize} +\end{frame} + +\subsection{Booleans} +\begin{frame}[fragile] + \frametitle{Booleans} + \begin{lstlisting} +In []: t = True + +In []: F = not t + +In []: F or t +Out[]: True + +In []: F and t +Out[]: False + \end{lstlisting} +%% \inctime{5} +\end{frame} + +\begin{frame}[fragile] + \frametitle{( ) for precedence} + \begin{lstlisting} +In []: a = False +In []: b = True +In []: c = True + +In []: (a and b) or c +Out[]: True + +In []: a and (b or c) +Out[]: False + \end{lstlisting} +%% \inctime{5} +\end{frame} + +\subsection{Strings} + +\begin{frame}[fragile] +\frametitle{Strings} +Anything within ``quotes'' is a string! +\begin{lstlisting} +' This is a string ' +" This too! " +""" This one too! """ +''' And one more! ''' +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Strings} +Why so many? +\begin{lstlisting} +' "Do or do not. No try." said Yoda.' +" ' is a mighty lonely quote." +\end{lstlisting} +The triple quoted ones can span multiple lines! + +\begin{lstlisting} +""" The quick brown +fox jumped over + the lazy dingbat. +""" +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Strings} + \begin{lstlisting} +In []: w = "hello" + +In []: print(w[0], w[1], w[-1]) + +In []: len(w) +Out[]: 5 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Strings \ldots} + \emphbar{Strings are immutable} + \begin{lstlisting} +In []: w[0] = 'H' + \end{lstlisting} + \pause + \begin{lstlisting} +-------------------------------------------- +TypeError Traceback (most recent call last) + + in () + +TypeError: 'str' object does not + support item assignment + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Finding the type} +\begin{lstlisting} +In []: a = 1.0 +In []: type(a) +Out[]: float +In []: type(1) +Out[]: int + +In []: type(1+1j) +Out[]: complex + +In []: type('hello') +Out[]: str +\end{lstlisting} +\end{frame} + +\section{Operators} + +\begin{frame}[fragile] + \frametitle{Arithmetic operators} + \small + \begin{lstlisting} +In []: 1786 % 12 +Out[]: 10 + +In []: 45 % 2 +Out[]: 1 + +In []: 864675 % 10 +Out[]: 5 + +In []: 3124 * 126789 +Out[]: 396088836 + +In []: big = 1234567891234567890 ** 3 + +In []: verybig = big * big * big * big + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Arithmetic operators} + \begin{lstlisting} +In []: 17 / 2 +Out[]: 8.5 # 8 on Python 2.x + +In []: 17 / 2.0 +Out[]: 8.5 + +In []: 17.0 / 2 +Out[]: 8.5 + +In []: 17.0 / 8.5 +Out[]: 2.0 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Arithmetic operators: floor division} + \begin{lstlisting} +In []: 17 // 2 +Out[]: 8 + +In []: 17 // 2.0 +Out[]: 8.0 + +In []: 17.0 // 2.0 +Out[]: 8.0 + +In []: 17.0 // 8.6 +Out[]: 1.0 + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{Arithmetic operators} + \begin{lstlisting} +In []: c = 3+4j + +In []: abs(c) +Out[]: 5.0 + +In []: c.imag +Out[]: 4.0 +In []: c.real +Out[]: 3.0 + +In []: c.conjugate() +(3-4j) + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Arithmetic operators} + \begin{lstlisting} +In []: a = 7546 + +In []: a += 1 +In []: a +Out[]: 7547 + +In []: a -= 5 +In []: a + +In []: a *= 2 + +In []: a /= 5 + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{String operations} + \begin{lstlisting} +In []: s = 'Hello' + +In []: p = 'World' + +In []: s + p +Out[]: 'HelloWorld' + +In []: s * 4 +Out[]: 'HelloHelloHelloHello' + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{String operations \ldots} + \begin{lstlisting} +In []: s * s + \end{lstlisting} + \pause + \begin{lstlisting} +-------------------------------------------- +TypeError Traceback (most recent call last) + + in () + +TypeError: can`t multiply sequence by + non-int of type `str` + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{String methods} + \begin{lstlisting} +In []: a = 'Hello World' +In []: a.startswith('Hell') +Out[]: True + +In []: a.endswith('ld') +Out[]: True + +In []: a.upper() +Out[]: 'HELLO WORLD' + +In []: a.lower() +Out[]: 'hello world' + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{String methods} + \begin{lstlisting} +In []: a = ' Hello World ' +In []: b = a.strip() +In []: b +Out[]: 'Hello World' + +In []: b.index('ll') +Out[]: 2 +In []: b.replace('Hello', 'Goodbye') +Out[]: 'Goodbye World' +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{Strings: \typ{split} \& \typ{join}} + \begin{lstlisting} +In []: chars = 'a b c' +In []: chars.split() +Out[]: ['a', 'b', 'c'] +In []: ' '.join(['a', 'b', 'c']) +Out[]: 'a b c' + \end{lstlisting} + \begin{lstlisting} +In []: alpha = ', '.join(['a', 'b', 'c']) +In []: alpha +Out[]: 'a, b, c' +In []: alpha.split(', ') +Out[]: ['a', 'b', 'c'] + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{String formatting} + \begin{lstlisting} +In []: x, y = 1, 1.234 + +In []: 'x is %s, y is %s' %(x, y) +Out[]: 'x is 1, y is 1.234' + \end{lstlisting} + \begin{itemize} + \item \emph{\%d}, \emph{\%f} etc. available + \end{itemize} + \emphbar{\url{http://docs.python.org/library/stdtypes.html}} +%% \inctime{10} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Relational and logical operators} + \begin{lstlisting} +In []: p, z, n = 1, 0, -1 +In []: p == n +Out[]: False + +In []: p >= n +Out[]: True + +In []: n < z < p +Out[]: True + +In []: p + n != z +Out[]: False + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{The \typ{assert} statement} + \begin{itemize} + \item You will see it in tests and your exam! + \end{itemize} + + \begin{small} +\begin{lstlisting} +In []: assert p != n +In []: assert p == n +------------------------------------------------------ +AssertionError Traceback (most recent call last) +----> 1 assert p == n + +AssertionError: +\end{lstlisting} + \end{small} + \begin{itemize} + \item No error if condition is True + \item Raises error if False + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\typ{assert} examples} + \begin{small} +\begin{lstlisting} +In []: assert p == n, "Oops condition failed" +------------------------------------------------------ +AssertionError Traceback (most recent call last) +----> 1 assert p == n + +AssertionError: Oops condition failed +\end{lstlisting} + \end{small} + \begin{itemize} + \item Can supply an optional message + \end{itemize} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{String containership} + \begin{lstlisting} +In []: fruits = 'apple, banana, pear' +In []: 'apple' in fruits +Out[]: True + +In []: 'potato' in fruits +Out[]: False + +\end{lstlisting} + \begin{itemize} + \item Use tab complete to list other string methods + \item Use \typ{?} to find more information + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Built-ins} + \begin{lstlisting} +In []: int(17 / 2.0) +Out[]: 8 + +In []: float(17 // 2) +Out[]: 8.0 + +In []: str(17 / 2.0) +Out[]: '8.5' + +In []: round( 7.5 ) +Out[]: 8.0 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Odds and ends} + \begin{itemize} + \item Case sensitive + \item Dynamically typed $\Rightarrow$ need not specify a type + \begin{lstlisting} +In []: a = 1 +In []: a = 1.1 +In []: a = "Now I am a string!" + \end{lstlisting} + \item Comments: + \begin{lstlisting} +In []: a = 1 # In-line comments +In []: # A comment line. +In []: a = "# Not a comment!" + \end{lstlisting} + \end{itemize} +%% \inctime{15} +\end{frame} + +\begin{frame} + \frametitle{Exercise 1} + Given a 2 digit integer\ \typ{x}, find the digits of the number. + \vspace*{1em} + + \begin{itemize} + \item For example, let us say \typ{x = 38} + \item Find a way to get \typ{a = 3} and \typ{b = 8} using \typ{x}? + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Possible Solution} +\begin{lstlisting} +In []: a = x//10 +In []: b = x%10 +In []: a*10 + b == x +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Another Solution} +\begin{lstlisting} +In []: sx = str(x) +In []: a = int(sx[0]) +In []: b = int(sx[1]) +In []: a*10 + b == x +\end{lstlisting} +\end{frame} + + +\begin{frame} + \frametitle{Exercise 2} + Given an arbitrary integer, count the number of digits it has. +\end{frame} + +\begin{frame}[fragile] +\frametitle{Possible solution} +\begin{lstlisting} +In []: x = 12345678 +In []: len(str(x)) +\end{lstlisting} + + Sneaky solution! +\end{frame} + + + +\section{Simple IO} +\begin{frame}[fragile] + \frametitle{Simple IO: Console Input} + \small + \begin{itemize} + \item \typ{input()} waits for user input. + \begin{lstlisting} +In []: a = input() +5 + +In []: a +Out[]: '5' # Python 3.x! + +In []: a = input('Enter a value: ') +Enter a value: 5 + \end{lstlisting} + \item Prompt string is optional. + \item \typ{input} produces strings (Python 3.x) + \item \typ{int()} converts string to int. + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple IO: Python 2.x vs 3.x} + \begin{itemize} + \item \typ{print} is familiar to us + \item Changed from Python 2.x to 3.x + \item We use the Python 3 convention here + \vspace*{2em} + \item If on Python 2.x do this: + { + \small +\begin{lstlisting} +In []: from __future__ import print_function +\end{lstlisting} + } + \item Safe to use in Python 3.x also + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple IO: Console output} + \begin{itemize} + \item Put the following code snippet in a file \typ{hello1.py} + \end{itemize} +\begin{lstlisting} +from __future__ import print_function +print("Hello", "World") +print("Goodbye", "World") +\end{lstlisting} +Now run it like so: +\begin{lstlisting} +In []: %run hello1.py +Hello World +Goodbye World + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple IO: Console output \ldots} +Put the following code snippet in a file \typ{hello2.py} + \begin{lstlisting} +from __future__ import print_function +print("Hello", end=' ') +print("World") +\end{lstlisting} +Now run it like so: +\begin{lstlisting} +In []: %run hello2.py +Hello World + \end{lstlisting} + +\pause + +\begin{block}{Mini Exercise} + \begin{itemize} + \item Read docs for \typ{print} + \item Remember: use \typ{print?} \ + \end{itemize} +\end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{What did we learn?} + \begin{itemize} + \item Data types: int, float, complex, boolean, string + \item Use \typ{type} builtin function to find the type + \item Operators: +, -, *, /, \%, **, +=, -=, *=, /=, >, <, <=, >=, ==, !=, a < b < c + \item Simple IO: \kwrd{input} and \kwrd{print} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Homework} + \begin{itemize} + \item Explore the various string methods + \item Read the documentation for the string methods + \item Explore the different builtins seen so far also + \end{itemize} +\end{frame} + + +\end{document} + +%% Questions for Quiz %% +%% ------------------ %% + + +\begin{frame} +\frametitle{\incqno } + What is the largest integer value that can be represented natively by Python? +\end{frame} + +\begin{frame} +\frametitle{\incqno } + What is the result of 17.0 / 2? +\end{frame} + +\begin{frame} +\frametitle{\incqno } + Which of the following is not a type in Python? + \begin{enumerate} + \item int + \item float + \item char + \item string + \end{enumerate} +\end{frame} + +\begin{frame} +\frametitle{\incqno } +How do you create a complex number with real part 2 and imaginary part +0.5. +\end{frame} + +\begin{frame} +\frametitle{\incqno } + What is the difference between \kwrd{print} \emph{x} and \kwrd{print} \emph{x,} ? +\end{frame} + +\begin{frame} +\frametitle{\incqno } + What does '*' * 40 produce? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } + What is the output of: + \begin{lstlisting} +In []: ', '.join(['a', 'b', 'c']) + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{\incqno} + \begin{lstlisting} +In []: 47 % 3 + \end{lstlisting} + What is the output? +\end{frame} -- cgit