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)
+
+<ipython console> in <module>()
+
+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)
+
+<ipython console> in <module>()
+
+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 

