#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [presentation]
#+BEAMER_FRAME_LEVEL: 1

#+BEAMER_HEADER_EXTRA: \usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent}
#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_envargs(Env Args) %4BEAMER_col(Col) %8BEAMER_extra(Extra)
#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 :ETC

#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [presentation]

#+LaTeX_HEADER: \usepackage[english]{babel} \usepackage{ae,aecompl}
#+LaTeX_HEADER: \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet}

#+LaTeX_HEADER: \usepackage{listings}

#+LaTeX_HEADER:\lstset{language=Python, basicstyle=\ttfamily\bfseries,
#+LaTeX_HEADER:  commentstyle=\color{red}\itshape, stringstyle=\color{darkgreen},
#+LaTeX_HEADER:  showstringspaces=false, keywordstyle=\color{blue}\bfseries}

#+TITLE:  
#+AUTHOR:  FOSSEE
#+EMAIL:   info@fossee.in
#+DATE:    

#+DESCRIPTION: 
#+KEYWORDS: 
#+LANGUAGE:  en
#+OPTIONS:   H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
#+OPTIONS:   TeX:t LaTeX:nil skip:nil d:nil todo:nil pri:nil tags:not-in-toc

* 
 #+begin_latex
\begin{center}
\vspace{12pt}
\textcolor{blue}{\huge Getting started with \texttt{functions}}
\end{center}
\vspace{18pt}
\begin{center}
\vspace{10pt}
\includegraphics[scale=0.95]{../images/fossee-logo.png}\\
\vspace{5pt}
\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ 
\scriptsize Funded by National Mission on Education through ICT\\
\scriptsize  MHRD,Govt. of India\\
\includegraphics[scale=0.30]{../images/iitb-logo.png}\\
\end{center}

#+end_latex
* Objectives
  At the end of this tutorial, you will be able to, 

 - Define a function.
 - Define functions with arguments.
 - Learn about docstrings.
 - Learn about function return value.
 - Read and understand code.

* Pre-requisite
Spoken tutorial on -
- Conditionals.
- Loops.
* Function
  - Eliminate code redundancy
  - Help in code reuse
  - Subroutine
    - relatively independent of remaining code

* Define ~f(x)~ in Python
  #+begin_src python
    def f(x):
        return x*x
  #+end_src

  - ~def~ - keyword
  - ~f~ - function name
  - ~x~ - parameter / argument to function ~f~

* Exercise 1

 - Write a python function named ~cube~ which computes the cube of a given
  number ~n~.

* Exercise 2

 - Write a python function named ~avg~ which computes the average of
  ~a~ and ~b~.
* Docstring

  - Documenting/commenting code is a good practice
   #+begin_src python
     def avg(a,b):
         """ avg takes two numbers as input 
	 (a & b), and returns the average 
	 of a and b"""
	 return (a+b)/2
   #+end_src
  - Docstring
    - written in the line after the ~def~ line.
    - Inside triple quote.
  - Documentation
    : avg?
* Exercise 3
 - Add docstring to the function f.

* Solution 3
#+begin_src Python
def f(x):
    """Accepts a number x as argument and,
    returns the square of the number x."""
    return x*x
#+end_src
* Exercise 4
 - Write a python function named ~circle~ which returns the area and
  perimeter of a circle given radius ~r~.

* ~what~
#+begin_src python

 def what( n ):
     if n < 0: n = -n
     while n > 0:
         if n % 2 == 1:
             return False
         n /= 10
     return True
#+end_src

* ~even\_digits~
#+begin_src python
 def even_digits( n ):
    """returns True if all the digits of number 
    n is even returns False if all the digits 
    of number n is not even"""
     if n < 0: n = -n
     while n > 0:
         if n % 2 == 1:
             return False
         n /= 10
     return True
#+end_src

* ~what~
#+begin_src python
 def what( n ):
     i = 1
     while i * i < n:
         i += 1
     return i * i == n, i
#+end_src

* ~is\_perfect\_square~
#+begin_src python
 def is_perfect_square( n ):
     """returns True and square root of n, 
     if n is a perfect square, otherwise 
     returns False and the square root 
     of the next perfect square"""
     i = 1
     while i * i < n:
         i += 1
     return i * i == n, i
#+end_src

* Summary
 In this tutorial, we have learnt to,

  - Define functions in Python by using the keyword ``def''.
  - Call the function by specifying the function name.
  - Assign a docstring to a function by putting it as a triple quoted string.
  - Pass parameters to a function.
  - Return values from a function.

* Evaluation
1. What will the function do?
#+begin_src Python
def what(x)
    return x*x
#+end_src

   - Returns the square of x
   - Returns x
   - Function doesn't have docstring
   - Error	   

2. How many arguments can be passed to a python function?

   - None
   - One
   - Two
   - Any

3. Write a function which calculates the area of a rectangle.
* Solutions
1. Error

2. Any

3. 
#+begin_src Python
def area(l,b):
    return l * b
#+end_src
* 
#+begin_latex
  \begin{block}{}
  \begin{center}
  \textcolor{blue}{\Large THANK YOU!} 
  \end{center}
  \end{block}
\begin{block}{}
  \begin{center}
    For more Information, visit our website\\
    \url{http://fossee.in/}
  \end{center}  
  \end{block}
#+end_latex