\documentclass[12pt]{article}


\title{Python: Basics}
\author{FOSSEE}
\usepackage{listings}
\lstset{language=Python,
    basicstyle=\ttfamily,
commentstyle=\itshape\bfseries, 
showstringspaces=false
}
\newcommand{\typ}[1]{\lstinline{#1}}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage{ae,aecompl}
\usepackage{mathpazo,courier,euler}
\usepackage[scaled=.95]{helvet}
\usepackage{url}

\begin{document}
\date{}
\vspace{-1in}
\begin{center}
\LARGE{Python: Basics}\\
\large{FOSSEE}
\end{center}
\section{Data types}
\subsection{int and float}
A whole number is a \typ{int} variable.
\begin{lstlisting}
In []: a = 13
In []: type(a)
Out[]: <type 'int'>
In []: b = -2
In []: type(b)
Out[]: <type 'int'>
In []: c = 500000000
In []: type(c)
Out[]: <type 'int'>
\end{lstlisting}
A number with decimal is a \typ{float}.
\begin{lstlisting}
In []: p = 3.141592
In []: type(p)
Out[]: <type 'float'>
\end{lstlisting}
\subsection{Complex Numbers}
\begin{lstlisting}
In []: c = 3+4j  #coeff of j specifies imaginary part
In []: abs(c) #absolute value of complex number
Out[]: 5.0
In []: c.imag #accessing imaginary part of c
Out[]: 4.0
In []: c.real #accessing real part of c
Out[]: 3.0
\end{lstlisting}
\newpage
\subsection{Boolean}
\begin{lstlisting}     
In []: a = False
In []: b = True
In []: c = True
In []: (a and b) or c #Boolean operations
Out[]: True
\end{lstlisting}
\textbf{Note:} Python is case sensitive language, \typ{True} is \typ{bool} type, but \typ{true} would be a variable. and hence following assignment fails:\\
\typ{In []: a = true}\\
\subsection{Strings}
  \begin{lstlisting}
In []: w = "hello" #w is string variable
In []: print w[1]
Out[]: e
In []: print w[-1] #last character of string
Out[]: o
  \end{lstlisting}
\textbf{Note:} For a string variable, individual elements can be accessed using indices.\\
\textbf{Note:} All slicing and striding operations works with strings as well.
  \begin{lstlisting}
In []: len(w) #function to calculate length of string
Out[]: 5
In []: w[0] = 'H' # ERROR: Strings are immutable 
  \end{lstlisting}
\subsection{String methods}
  \begin{lstlisting}
In []: a = 'Hello World' 
In []: a.startswith('Hell') # 'a' starts with 'Hell'
Out[]: True
In []: a.endswith('ld') # 'a' ends with 'ld'
Out[]: True
In []: a.upper() # all characters to upper case
Out[]: 'HELLO WORLD'
In []: a.lower() # all characters to lower case
Out[]: 'hello world'
In []: ''.join(['a', 'b', 'c'])
Out[]: 'abc'
  \end{lstlisting}
\typ{join} function joins all the list member passed as argument with the string it is called upon. In above case it is \typ{empty string}.
\begin{lstlisting}
In []: ' '.join(['a','b','c'])
Out[]: 'a b c'  
In []: ','.join(['a','b','c'])
Out[]: 'a,b,c'
\end{lstlisting}
\subsection{String formatting}
  \begin{lstlisting}
In []: x, y = 1, 1.234 #initializing two variables
In []: 'x is %s, y is %s' %(x, y)
Out[]: 'x is 1, y is 1.234'
  \end{lstlisting}
\textbf{Note:} \typ{\%s} used in above formatting specifies \typ{'str'} representation of variables. One can also try:\\
\typ{\%d} for \typ{int} representation\\
\typ{\%f} for \typ{float} representation
\begin{lstlisting}
In []: 'x is %f, y is %f' %(x, y)
Out[]: 'x is 1.000000, y is 1.234000'

In []: 'x is %d, y is %d' %(x, y)
Out[]: 'x is 1, y is 1'
\end{lstlisting}
\subsection{Arithmetic Operators}
  \begin{lstlisting}
In []: 45 % 2 # Modulo operator
Out[]: 1
In []: 5 ** 3 # Power
Out[]: 125
In []: a = 5
In []: a += 1 #increment by 1, translates to a = a + 1
In []: a *= 2
  \end{lstlisting}
\subsection{String Operations}
\begin{lstlisting}
In []: s = 'Hello'
In []: p = 'World'
In []: s + p  #concatenating two strings
Out[]: 'HelloWorld'
In []: s * 4  #repeat string for given number of times
Out[]: 'HelloHelloHelloHello'
\end{lstlisting}
\subsection{Relational and Logical Operators}
\begin{lstlisting}
In []: p, z, n = 1, 0, -1 #initializing three variables
In []: p == n  #equivalency check
Out[]: False
In []: p >= n 
Out[]: True
In []: n < z < p #finding largest number among three
Out[]: True
In []: p + n != z
Out[]: False
\end{lstlisting}
\subsection{Built-ins}
\begin{lstlisting}
In []: int(17 / 2.0) #converts arguments to integer
Out[]: 8
In []: float(17 / 2) #argument is already integer(17 / 2 = 8)
Out[]: 8.0
In []: str(17 / 2.0) #converts to string
Out[]: '8.5'
In []: round( 7.5 ) 
Out[]: 8.0
\end{lstlisting}
\subsection{Console Input}
\begin{lstlisting}
In []: a = raw_input('Enter a value: ')
Enter a value: 5
\end{lstlisting}
\textbf{Note:} \typ{raw_input} always returns string representation of user input and hence:
\begin{lstlisting}
In []: type(a)
Out[]: <type 'str'>
\end{lstlisting}
To get integer or floating point of this input, one has to perform type conversion:\\
\typ{In []: b = int(a)}
\section{Conditionals}
\typ{if}
\begin{lstlisting}
In []: x = int(raw_input("Enter an integer:"))
In []: if x < 0:
  ...:     print 'Be positive!'
  ...: elif x == 0:
  ...:     print 'Zero'
  ...: elif x == 1:
  ...:     print 'Single'
  ...: else:
  ...:     print 'More'
\end{lstlisting}
Ternary Operator
\begin{lstlisting}
In []: a = raw_input('Enter number(Q to quit):')
In []: num = int(a) if a != 'Q' else 0
\end{lstlisting}
Above statement can be read as ``num is int of a, if a is not equal to 'Q', otherwise 0 ``
\section{Links and References}
\begin{itemize}
  \item Reference manual to describe the standard libraries  that are distributed with Python is available at \url{http://docs.python.org/library/} 
  \item To read more on strings refer to: \\ \url{http://docs.python.org/library/stdtypes.html#string-methods}
\end{itemize}
\end{document}
