0% found this document useful (0 votes)
21 views63 pages

Chapter 7

Uploaded by

Isanka
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views63 pages

Chapter 7

Uploaded by

Isanka
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

Using Computers to Solve Problems

After studying this lesson, you will have better understanding of,
 How to analyze a problem and develop an algorithm
 Control structures and their use
 Drawing Flow charts, writing pseudo codes and conversions between them
 Finding alternate solutions to a problem
 Programming in Python
 Evolution of programming languages

Analyzing a problem
The raw materials that are used to solve a problem are known as the 'input'. The result obtained after solving a
problem is known as the 'output'. Converting input to output is called the 'process'. A process takes place step
by step and it is very important to understand the order of the process. When Analyzing a problem, the input,
process and output are identified separately.

Example -
Problem 1 : Preparing a letter which can be posted.

Input : A sheet of paper suitable to write the letter on and a pen An envelope and a stamp Glue
Process : 1. Writing the letter
2. Folding the letter and putting it into the envelope
3. Pasting the envelope
4. Writing the recipient's address on the envelope
5. Sticking the stamp
Output : A letter ready to be posted.

Note: Steps No. 4 and 5 in this process can be interchanged. However, the other steps should be followed in
the order indicated.

Problem 2 : Making a cup of tea

Input : Tea leaves, sugar, hot water


Process : 1. Putting tea leaves in the strainer
2. Pouring hot water to the cup through the strainer
3. Adding some sugar to the cup
4. Stirring it well with a spoon
5. Testing for taste, taking a small sip from cup
6. If the taste is not satisfactory, go to step 3 and repeat step Nos. 4 and 5
Output : A cup of tea

Problem 3 : Dividing 40 page and 80 page books from a parcel of books between two siblings - Sanduni and
Anupama.

Input :

Process :

Output :
1
Problem 4 : Adding two numbers

Input :

Process :

Output :

Problem 5 : Finding the area of a rectangle

Input :

Process :

Output :

Problem 6 : Finding the larger number between two numbers

Input :

Process :

Output :

Problem 7 : Finding whether a number is odd or even

Input :

Process :

Output :

What are alternative solutions?


If there is more than one solution to a given problem, such solutions are called alternative solutions. Such
solutions depend on the nature of the problem
.

2
Example
Imagine you come to school by school bus. If the bus breaks down on your way to school, you certainly will
think of other alternative ways to reach school.
1. Coming to school by another school bus which goes to your school
2. If you have money, reaching the school by CTB or private bus
3. Walking to school along the road
4. Walking to school using a short-cut
5. If you have a way to inform your parents, get their support to reach the school
6. Reaching the school by car or motor bike with the support of a trustworthy person

You may select a good solution out of these if it is mandatory to go to school that day.

Thus, if there are many solutions (set) to a particular problem, it is suitable to consider these and select an
appropriate solution.

All the solutions pertaining to a problem are called solution space. In computer programming also, various
solutions should be identified and an appropriate solution should be selected. Then, we can create a short,
simple program.

Example 1
Let us examine the solution space to find the perimeter of a rectangle.

Let us analyze the input, process and output related to this problem.

Input : Length and width of the rectangle


Process : Calculating the perimeter
Output : Indicating the perimeter

Let us examine the solution space to calculate the perimeter.


1st solution Perimeter = length + width + length + width
2nd solution Perimeter = length × 2 + width × 2
3rd solution Perimeter = (length + width) × 2

Out of these solutions, a person who has knowledge only of addition, can select the 1st solution as the most
appropriate. A person who has knowledge of multiplication and addition can select the 3rd solution out of the
2nd and 3rd solutions as the most appropriate. The person for this is, it has the minimum number of additions
and multiplications.

Example 2
Indicating that a student has failed if the score for the ICT subject is less than 35, and indicating pass if the
score is 35 or above.
Input : Marks
Process : Comparing the mark scored with 35

Solution 1. If the mark is less than 35


Result = Fail
If not
Result = Pass

Solution 2. If the mark is 35 or more than 35


Result = Pass
If not
Result = Fail
Output : Fail or Pass

3
Example 3
Finding the larger number from between two numbers. Let us consider the two input numbers as n1 and n2.

Solution 1. If n1 is larger than n2, the larger number will be n1.


If n2 is larger than n1 the larger number will be n2.

Solution 2. Subtract n2 from n1.


If the result is more than 0, n1 is the larger number.
If the result is less than 0, n2 is the larger number.

Thus, it is important to select the appropriate solutions out of the available alternative solutions.

1.2 Problem Solving using Algorithms

An algorithm is a method to show the steps in solving a problem. An algorithm is a step-by-step procedure for
solving a problem. The need for this is to present a way to solve the problem with a plan.

Example 1 - Let us develop an algorithm to post a letter.


(1). Writing the letter
(2). Folding the letter
(3). Inserting the letter in an envelope
(4). Writing the address.
(5). Sticking the stamp
(6). Posting the letter

Step (1), (2) and (3) in this algorithm should be followed in the given order. Step (4) and (5) can be
interchanged. The reason for this is, you can either stick the stamp after writing the address or write the
address after sticking the stamp.

Thus, there are steps in an algorithm which should be followed in a strict sequential order. Sometimes, if the
order of some steps is changed, it does not affect the process and the output is same.

Example 2 - Let us consider steps in measuring 500g of sugar using a scale.


(1). Putting sugar into a bag
(2). Placing the bag on the scale and getting the reading on the scale
(3). If the weight of the sugar is less than 500g,add sugar till it weights 500g
(4). If the weight of the sugar is more than 500g from the bag till it weighs 500g
(5). Remove the bag of sugar from the scale when the weight is 500g

The algorithm to measure 500g sugar is given above.

Activity
There are 183 students in a primary school. The principal has decided to hold an inter-house sports meet
dividing them into three houses – Olu, Nelum and Manel. Develop an algorithm to the divide the students into
the three houses.

1.2.1 Control Structures


Three types of control structures are used in an algorithms.
i. Sequence
ii. Selection
iii. Repetition

i. Sequence
If the steps from the beginning to the end of an algorithm are carried out in a strict order, it is called a
sequence.
4
Example -
1. Climbing up or down step by step when going on a staircase
2. Students who were admitted to grade 1 of the school continue studies till grade 13

ii. Selection
Selection is a situation where step(s) are executed depending on whether a condition of an algorithm is
satisfied or not. There are two choices; if the condition is satisfied, one is selected and if it is not satisfied, the
other selection is selected.

Examples of selection
1. Admitting a child to Grade 1:
If a child is below 5 years as at 31st of January that year
The child cannot be admitted to school
If not
The child can be admitted to school

2. Passing a subject:
If the mark is 35 or more
It is a Pass
If not
It is a Fail

3. Buying a book
If you have money equal to or more than the price of the book
You can buy the book
If not
You cannot buy the book

Activity
1. If a Sri Lankan citizen gets the right to vote after completing the age of 18, select the most suitable
word for the blanks given below.

If the age is ……………………(more/less) than 18

The vote……………………(can/cannot) be casted

If not,

The vote …………………….(can/cannot) be casted.

iii. Repetition
If one or several steps of an algorithm are repeated until a condition is satisfied, it is called repetition.

Examples
1. Let us consider the process of a class teacher marking the attendance register.
(1). Call the first name on the register
(2). Mark 1 if the student is present
(3). Mark 0 if the student is absent
(4). Call the name of the next student
(5). Repeat step (2) or (3) and (4) till the last name of the register is called

2. Let us consider the process of reading a paragraph and calculating the number of words you read.
(1). Read the first word of the paragraph
(2). Number of words = 1
(3). Read the next word

5
(4). Add 1 to the number of words
(5). Repeat step (3) and (4) till the end of the paragraph
(6) After reading the paragraph, indicate the number of words.

1.3 Representation of an algorithm


Flow charts and pseudo codes are used as tools to present an algorithm tomake the algorithm understand
better.

1.3.1 Flowcharts
Flowcharts are used to present how the algorithm is built step by step in a dramatic manner. The symbols
given in table are used to indicate different functions.

Sequence
In sequence the steps from the beginning to the end are executed in order.
E.g. 1 - Finding the area of a circle.

Selection
The selection indicates the flow of direction
depending on a condition being satisfied or not
E.g. - Finding whether a number is odd or even

6
Repetition
If one or several Steps are repeated till a condition is satisfied or are continued till is satisfied.
E.g. - Finding the total of some numbers

Activity
Draw flow charts to solve the problems given below.
1. Find the perimeter and area of a rectangle.
2. It is decided to add Rs.5000 to the basic salary of the employees of a company. Calculate the new salary.
3. When posting a letter, postal fare is charged according to its weight. The standard fare should be paid for
letters which are equal to or less than the standard weight. An additional fare should be charged if the weight
is more than the standard weight.
4. Indicate the first 12 multiples of 7

1.3.2 Pseudo codes


When an algorithm is presented in simple English terms it is called a pseudo code. Pseudo codes are
independent of a computer language. Pseudo codes can be converted to any programming language
instructions. Hence, pseudo codes make computer programming easier.

Let us see simple English terms used in an pseudo code.


BEGIN - To indicate a beginning
END - To indicate an end
INPUT, READ, GET – To indicate an input
OUTPUT, DISPLAY, SHOW – To show an output
PROCESS, CALCULATE – To indicate a process
IF … THEN .. .ELSE … ENDIF - Used to indicate a selection
FOR – DO
WHILE – ENDWHILE Used to indicate a repetition
REPEAT – UNTIL

Writing pseudo codes


E.g. 1 - Finding the area of a circle
BEGIN
INPUT Radius
CALCULATE Area = 22/7 * Radius * Radius
DISPLAY Area
END.

7
E.g. 2 - Finding whether a number is odd or even

BEGIN
READ number as N
CALCULATE Remainder after number is divided by 2
IF Remainder = 0 THEN
DISPLAY “Even number”
ELSE
DISPLAY “Odd number”
ENDIF
END.

E.g. 3 - Finding the total of some numbers

E.g. 4 - Finding the total and the average of 10 numbers

8
Following are some of the facts about the above pseudo code.

 Total, Average and Number are variables.


o When values are assigned to number variable, the value of Total, Average and n variables
change.
 n indicates the number of repetitions. (Number of times the loop is executed)
 The statements Total = 0 and Average = 0, makes starting values of these variables assigned as 0.
o Hence, the initial value of Total and Average are 0s.
 The statement n = 1, makes the starting value of n is assigned to 1.
 n<=10 is the condition that should be satisfied.
 WHILE n <= 10 indicates that the loop n should be repeated until value of n is 10.
o Repetition occurs when the value of n is 10 or less than 10. This means, till the condition n
<=10 is true, repetition occurs. When the value of n becomes 11, the repetition stops. Then the
condition becomes false.
 READ denotes getting a value for Number variable.
 Total = Total + Number denotes the present value of Total is added to number and the resultant value
is assigned on the new value of Total.
 n = n + 1 calculates the number of repetitions. 1 is added to the present value of n and the result is
assigned to n.
 ENDWHILE indicates the limit to end repetition. Hence, only READ number, Total = Total +
Number and n = n + 1 are repeated till the condition n <- 10 is fulfilled
 When the repetition stops, the value of n is 11 and the condition is false.
 By Average = Total / (n-1), final value of Total is devied by (n-1) and that value is assigned to
Average variable.
 DISPLAY (Total, Average) produces the output of the total of 10 numbers and its average.

Observation
 When a value is assigned to a variable, the previous value is lost.
 When the statement Total = Total + Number is executed, the value assigned to the Number variable is
added with the value assigned to Total variable and the result obtained is assigned to the Total
variable.
 Total = Total + Number is not a mathematical formula.

9
1.3.3 Converting Flow charts to Pseudo codes
An algorithm can be presented in a flow chart as well as in a pseudo code. Hence, let us examine how a flow
chart can be converted to a pseudo code.

E.g. 1 - Finding the larger number from two different numbers

10
E.g. 2 - Finding the smallest number from 10 numbers

Python programming
Identifiers

An identifier is a term used to represent a variable, constant or a program. The following are some rules that should be
followed in declaring an identifier.

 Reserved words in Pascal cannot be used as an identifier name. In any programming language
reserved words cannot be used as identifiers.
E.g. PRINT, INPUT are not valid
 Should start with an English letter. (E.g. A-Z, a-z)
 After the first letter of the identifier, letters (A-Z, a-z) or numbers (0-9) and underscore ( _ ) can be
used.
E.g. Student_name
 Not case sensitive (E.g. – Art, art, ART will be the same identifier)
 There should not be any space between words.
E.g. - Student Name - Not valid
 The special characters such as the following should not be included in an identifier.
~!@#$%^&*()-+={}[]:;’”<>?,./|\
But, only underscore ( _ ) is valid.

 Use of meaningful terms for identifiers can make program easily understood.
Examples for valid identifiers
Sum, SUM, Total_Nos, Num1, FirstName, Last_Name
Examples of identifiers that are not valid
$75, Average Marks, 9A, Last-name

11
Reserved words

The reserved words in Python, are defined in Python language. Hence, reserved words are not used as
identifiers.

Reserved words are different from language to language. The following arereserved words used in Pascal.

You may not name your variables any of the following words as they mean special things in Python:

and assert break class continue


def del elif else except
exec finally for from global
if import in is lambda
not or pass print raise
return try while

Do NOT use any of the following words either (although they are not strictly Python reserved words, they
conflict with the names of commonly-used Python functions):

Data Float Int Numeric Oxphys


array close float int input
open range type write zeros

You should also avoid all the names defined in the math library (you must avoid them if you import the
library):

acos asin atan cos e


exp fabs floor log log10
tan
pi sin sqrt

Standard data types in Pascal

When a program is executed, the input and output should be stored in computer memory. The space needed
for each is defined according to the data type. Hence, it is essential for a programmer to have knowledge of
data types.

Python has five standard data types −


 Numbers
 String
 List
 Tuple
 Dictionary

Python supports four different numerical types −


 int (signed integers)
 long (long integers, they can also be represented in octal and hexadecimal)
 float (floating point real values)
 complex (complex numbers)

12
Variables and constants

Variable

A variable is an identifier which changes the values given to it when the program is being executed.
var1 = 1
var2 = 10

Important

A variable has a name, and it stores a value of the declared type.

Constants

The identifiers which do not change their values while the program is executed are called constants.

Eg : max = 100, pi = 22/7

Observation

When executing a program, a variable can take different values. However, the value of a
constant remains unchanged.

Types of Operator
Python language supports the following types of operators.

 Arithmetic Operators
 Comparison (Relational) Operators
 Assignment Operators
 Logical Operators
 Bitwise Operators
 Membership Operators
 Identity Operators
Let us have a look on all operators one by one.

13
Python Arithmetic Operators
Assume variable a holds 10 and variable b holds 20, then −

Operator Description Example

+ Addition Adds values on either side of the operator. a + b = 30

- Subtraction Subtracts right hand operand from left hand operand. a – b = -10

* Multiplication Multiplies values on either side of the operator a * b = 200

/ Division Divides left hand operand by right hand operand b/a=2

% Modulus Divides left hand operand by right hand operand and returns b%a=0
remainder

** Exponent Performs exponential (power) calculation on operators a**b =10 to the


power 20

// Floor Division - The division of operands where the result is the 9//2 = 4 and
quotient in which the digits after the decimal point are removed. 9.0//2.0 = 4.0, -
But if one of the operands is negative, the result is floored, i.e., 11//3 = -4, -
rounded away from zero (towards negative infinity): 11.0//3 = -4.0

Python Comparison Operators


These operators compare the values on either sides of them and decide the relation among them. They are
also called Relational operators.

Assume variable a holds 10 and variable b holds 20, then −

Operator Description Example

== If the values of two operands are equal, then the condition becomes true. (a == b) is not
true.

!= If values of two operands are not equal, then condition becomes true.

<> If values of two operands are not equal, then condition becomes true. (a <> b) is true.
This is similar to
!= operator.

> If the value of left operand is greater than the value of right operand, then (a > b) is not
condition becomes true. true.

< If the value of left operand is less than the value of right operand, then (a < b) is true.
condition becomes true.

>= If the value of left operand is greater than or equal to the value of right (a >= b) is not
operand, then condition becomes true. true.

<= If the value of left operand is less than or equal to the value of right operand, (a <= b) is true.
then condition becomes true.

14
Python Assignment Operators
Assume variable a holds 10 and variable b holds 20, then −

Operator Description Example

= Assigns values from right side operands to left side operand c = a + b assigns
value of a + b into c

+= Add AND It adds right operand to the left operand and assign the result to left c += a is equivalent
operand to c = c + a

-= Subtract AND It subtracts right operand from the left operand and assign the result c -= a is equivalent
to left operand to c = c - a

*= Multiply AND It multiplies right operand with the left operand and assign the result c *= a is equivalent
to left operand to c = c * a

/= Divide AND It divides left operand with the right operand and assign the result to c /= a is equivalent
left operand to c = c / ac /= a is
equivalent to c = c /
a

%= Modulus AND It takes modulus using two operands and assign the result to left c %= a is equivalent
operand to c = c % a

**= Exponent Performs exponential (power) calculation on operators and assign c **= a is
AND value to the left operand equivalent to c = c
** a

//= Floor Division It performs floor division on operators and assign value to the left c //= a is equivalent
operand to c = c // a

Python Bitwise Operators


Bitwise operator works on bits and performs bit by bit operation. Assume if a = 60; and b = 13; Now in
binary format they will be as follows −

a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
There are following Bitwise operators supported by Python language

Operator Description Example

& Binary AND Operator copies a bit to the result if it exists in both operands (a & b) (means
0000 1100)

| Binary OR It copies a bit if it exists in either operand. (a | b) = 61 (means


0011 1101)

^ Binary XOR It copies the bit if it is set in one operand but not both. (a ^ b) = 49 (means

15
0011 0001)

~ Binary Ones It is unary and has the effect of 'flipping' bits. (~a ) = -61 (means
Complement 1100 0011 in 2's
complement form
due to a signed
binary number.

<< Binary Left Shift The left operands value is moved left by the number of bits a << = 240 (means
specified by the right operand. 1111 0000)

>> Binary Right Shift The left operands value is moved right by the number of bits a >> = 15 (means
specified by the right operand. 0000 1111)

Python Logical Operators


There are following logical operators supported by Python language. Assume variable a holds 10 and
variable b holds 20 then

Used to reverse the logical state of its operand.


Python Membership Operators
Python’s membership operators test for membership in a sequence, such as strings, lists, or tuples. There are
two membership operators as explained below

Operator Description Example

in Evaluates to true if it finds a variable in the specified sequence and false x in y, here in results
otherwise. in a 1 if x is a
member of
sequence y.

not in Evaluates to true if it does not finds a variable in the specified sequence x not in y, here not
and false otherwise. in results in a 1 if x is
not a member of
sequence y.

Python Identity Operators


Identity operators compare the memory locations of two objects. There are two Identity operators explained
below:

Operator Description Example

is Evaluates to true if the variables on either side of the operator point to x is y, here is results in
the same object and false otherwise. 1 if id(x) equals id(y).

is not Evaluates to false if the variables on either side of the operator point to x is not y, here is
the same object and true otherwise. not results in 1 if id(x)
is not equal to id(y).

Python Operators Precedence


The following table lists all operators from highest precedence to lowest.

16
Operator Description

** Exponentiation (raise to the power)

~+- Complement, unary plus and minus (method names for the last two are +@ and -@)

* / % // Multiply, divide, modulo and floor division

+- Addition and subtraction

>> << Right and left bitwise shift

& Bitwise 'AND'

^| Bitwise exclusive `OR' and regular `OR'

<= < > >= Comparison operators

<> == != Equality operators

= %= /= //= -= += *= Assignment operators


**=

is is not Identity operators

in not in Membership operators

not or and Logical operators

Selection

IF statement

If condition structure is as follows.

Decision making is anticipation of conditions occurring while execution of


the program and specifying actions taken according to the conditions.

Decision structures evaluate multiple expressions which produce TRUE


or FALSE as outcome. You need to determine which action to take and
which statements to execute if outcome is TRUE or FALSE otherwise.

This is the general form of a typical decision making structure found in


most of the programming languages

Python programming language assumes any non-zero and non-


null values as TRUE, and if it is either zero or null, then it is assumed as
FALSE value.

Python programming language provides following types of decision making statements. Click the following
links to check their detail.

17
Statement Description

if statements An if statement consists of a boolean expression followed


by one or more statements.

if...else statements An if statement can be followed by an optional else


statement, which executes when the boolean expression
is FALSE.

nested if statements You can use one if or else if statement inside


another if or else if statement(s).

Single Statement Suites


If the suite of an if clause consists only of a single line, it may go on the same line as the header statement.

Here is an example of a one-line if clause −

#!/usr/bin/python

var = 100

if ( var == 100 ) : print "Value of expression is 100"

print "Good bye!"


When the above code is executed, it produces the following result −

Value of expression is 100


Good bye!

Repetition

In general, statements are executed sequentially: The first


statement in a function is executed first, followed by the
second, and so on. There may be a situation when you need
to execute a block of code several number of times.

Programming languages provide various control structures


that allow for more complicated execution paths.

A loop statement allows us to execute a statement or group


of statements multiple times. The following diagram
illustrates a loop statement −

Python programming language provides following types of loops to handle looping requirements.

18
Loop Type Description

while loop Repeats a statement or group of statements while a given condition


is TRUE. It tests the condition before executing the loop body.

for loop Executes a sequence of statements multiple times and abbreviates


the code that manages the loop variable.

nested loops You can use one or more loop inside any another while, for or
do..while loop.

Loop Control Statements


Loop control statements change execution from its normal sequence. When execution leaves a scope, all
automatic objects that were created in that scope are destroyed.

Python supports the following control statements. Click the following links to check their detail.

Control Statement Description

break statement Terminates the loop statement and transfers execution to the
statement immediately following the loop.

continue statement Causes the loop to skip the remainder of its body and immediately
retest its condition prior to reiterating.

pass statement The pass statement in Python is used when a statement is required
syntactically but you do not want any command or code to execute.

Let us go through the loop control statements briefly −

Number data types store numeric values. They are immutable data types, means that changing the value of a
number data type results in a newly allocated object.

Number objects are created when you assign a value to them. For example −

var1 = 1
var2 = 10

You can also delete the reference to a number object by using the delstatement. The syntax of the del
statement is −

del var1[,var2[,var3[....,varN]]]]

You can delete a single object or multiple objects by using the del statement. For example:

del var
del var_a, var_b

Python supports four different numerical types −

19
 int (signed integers): They are often called just integers or ints, are positive or negative whole numbers with no
decimal point.
 long (long integers ): Also called longs, they are integers of unlimited size, written like integers and followed by an
uppercase or lowercase L.
 float (floating point real values) : Also called floats, they represent real numbers and are written with a decimal
point dividing the integer and fractional parts. Floats may also be in scientific notation, with E or e indicating the
power of 10 (2.5e2 = 2.5 x 102 = 250).
 complex (complex numbers) : are of the form a + bJ, where a and b are floats and J (or j) represents the square
root of -1 (which is an imaginary number). The real part of the number is a, and the imaginary part is b. Complex
numbers are not used much in Python programming.
Examples
Here are some examples of numbers

int long float complex

10 51924361L 0.0 3.14j

100 -0x19323L 15.20 45.j

-786 0122L -21.9 9.322e-36j

080 0xDEFABCECBDAECBFBAEL 32.3+e18 .876j

-0490 535633629843L -90. -.6545+0J

-0x260 -052318172735L -32.54e100 3e+26J

0x69 -4721885298529L 70.2-E12 4.53e-7j

 Python allows you to use a lowercase L with long, but it is recommended that you use only an uppercase L to avoid
confusion with the number 1. Python displays long integers with an uppercase L.

 A complex number consists of an ordered pair of real floating point numbers denoted by a + bj, where a is the real
part and b is the imaginary part of the complex number.

Number Type Conversion


Python converts numbers internally in an expression containing mixed types to a common type for
evaluation. But sometimes, you need to coerce a number explicitly from one type to another to satisfy the
requirements of an operator or function parameter.

 Type int(x) to convert x to a plain integer.


 Type long(x) to convert x to a long integer.
 Type float(x) to convert x to a floating-point number.
 Type complex(x) to convert x to a complex number with real part x and imaginary part zero.
 Type complex(x, y) to convert x and y to a complex number with real part x and imaginary part y. x and y are
numeric expressions

Mathematical Functions
Python includes following functions that perform mathematical calculations.

20
Function Returns ( description )

abs(x) The absolute value of x: the (positive) distance between x and zero.

ceil(x) The ceiling of x: the smallest integer not less than x

cmp(x, y) -1 if x < y, 0 if x == y, or 1 if x > y

exp(x) The exponential of x: ex

fabs(x) The absolute value of x.

floor(x) The floor of x: the largest integer not greater than x

log(x) The natural logarithm of x, for x> 0

log10(x) The base-10 logarithm of x for x> 0 .

max(x1, x2,...) The largest of its arguments: the value closest to positive infinity

min(x1, x2,...) The smallest of its arguments: the value closest to negative infinity

modf(x) The fractional and integer parts of x in a two-item tuple. Both parts have the same
sign as x. The integer part is returned as a float.

pow(x, y) The value of x**y.

round(x [,n]) x rounded to n digits from the decimal point. Python rounds away from zero as a
tie-breaker: round(0.5) is 1.0 and round(-0.5) is -1.0.

sqrt(x) The square root of x for x > 0

Python Strings
Strings are amongst the most popular types in Python. We can create them simply by enclosing characters in
quotes. Python treats single quotes the same as double quotes. Creating strings is as simple as assigning a
value to a variable. For example −

var1 = 'Hello World!'


var2 = "Python Programming"

Accessing Values in Strings


Python does not support a character type; these are treated as strings of length one, thus also considered a substring.

To access substrings, use the square brackets for slicing along with the index or indices to obtain your
substring. For example −

#!/usr/bin/python

var1 = 'Hello World!'


var2 = "Python Programming"

print "var1[0]: ", var1[0]


print "var2[1:5]: ", var2[1:5]

21
When the above code is executed, it produces the following result −

var1[0]: H
var2[1:5]: ytho

Updating Strings
You can "update" an existing string by (re)assigning a variable to another string. The new value can be
related to its previous value or to a completely different string altogether. For example −

#!/usr/bin/python

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'


When the above code is executed, it produces the following result −

Updated String :- Hello Python

Escape Characters
Following table is a list of escape or non-printable characters that can be represented with backslash notation.
An escape character gets interpreted; in a single quoted as well as double quoted strings.
Backslash Hexadecimal Description
notation character

\a 0x07 Bell or alert

\b 0x08 Backspace

\cx Control-x

\C-x Control-x

\e 0x1b Escape

\f 0x0c Formfeed

\M-\C-x Meta-Control-x

\n 0x0a Newline

\nnn Octal notation, where n is in the range 0.7

\r 0x0d Carriage return

\s 0x20 Space

\t 0x09 Tab

\v 0x0b Vertical tab

\x Character x

\xnn Hexadecimal notation, where n is in the range 0.9, a.f, or


A.F

22
String Special Operators
Assume string variable a holds 'Hello' and variable b holds 'Python', then −

Operator Description Example

+ Concatenation - Adds values on either side of the operator a + b will give


HelloPython

* Repetition - Creates new strings, concatenating multiple copies of the same string a*2 will give -
HelloHello

[] Slice - Gives the character from the given index a[1] will give e

[:] Range Slice - Gives the characters from the given range a[1:4] will give
ell

in Membership - Returns true if a character exists in the given string H in a will give 1

not in Membership - Returns true if a character does not exist in the given string M not in a will
give 1

r/R Raw String - Suppresses actual meaning of Escape characters. The syntax for raw print r'\n' prints
strings is exactly the same as for normal strings with the exception of the raw string \n and print
operator, the letter "r," which precedes the quotation marks. The "r" can be R'\n'prints \n
lowercase (r) or uppercase (R) and must be placed immediately preceding the first
quote mark.

% Format - Performs String formatting See at next


section

String Formatting Operator


One of Python's coolest features is the string format operator %. This operator is unique to strings and makes
up for the pack of having functions from C's printf() family. Following is a simple example −

#!/usr/bin/python
print "My name is %s and weight is %d kg!" % ('Zara', 21)

When the above code is executed, it produces the following result −

My name is Zara and weight is 21 kg!

Here is the list of complete set of symbols which can be used along with % −

Format Symbol Conversion

%c character

%s string conversion via str() prior to formatting

%i signed decimal integer

%d signed decimal integer

%u unsigned decimal integer

23
%o octal integer

%x hexadecimal integer (lowercase letters)

%X hexadecimal integer (UPPERcase letters)

%e exponential notation (with lowercase 'e')

%E exponential notation (with UPPERcase 'E')

%f floating point real number

%g the shorter of %f and %e

%G the shorter of %f and %E


Other supported symbols and functionality are listed in the following table −
Symbol Functionality

* argument specifies width or precision

- left justification

+ display the sign

<sp> leave a blank space before a positive number

# add the octal leading zero ( '0' ) or hexadecimal leading '0x' or '0X', depending
on whether 'x' or 'X' were used.

0 pad from left with zeros (instead of spaces)

% '%%' leaves you with a single literal '%'

(var) mapping variable (dictionary arguments)

m.n. m is the minimum total width and n is the number of digits to display after the
decimal point (if appl.)

Triple Quotes
Python's triple quotes comes to the rescue by allowing strings to span multiple lines, including verbatim
NEWLINEs, TABs, and any other special characters.

The syntax for triple quotes consists of three consecutive single or double quotes.

#!/usr/bin/python
para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up."""

24
print para_str

When the above code is executed, it produces the following result. Note how every single special character
has been converted to its printed form, right down to the last NEWLINE at the end of the string between the
"up." and closing triple quotes. Also note that NEWLINEs occur either with an explicit carriage return at the
end of a line or its escape code (\n) −

this is a long string that is made up of


several lines and non-printable characters such as
TAB ( ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.

Raw strings do not treat the backslash as a special character at all. Every character you put into a raw string
stays the way you wrote it −

#!/usr/bin/python
print 'C:\\nowhere'

When the above code is executed, it produces the following result −

C:\nowhere

Now let's make use of raw string. We would put expression in r'expression' as follows −

#!/usr/bin/python
print r'C:\\nowhere'

When the above code is executed, it produces the following result −

C:\\nowhere

Unicode String
Normal strings in Python are stored internally as 8-bit ASCII, while Unicode strings are stored as 16-bit
Unicode. This allows for a more varied set of characters, including special characters from most languages in
the world. I'll restrict my treatment of Unicode strings to the following −

#!/usr/bin/python
print u'Hello, world!'

When the above code is executed, it produces the following result −

Hello, world!

As you can see, Unicode strings use the prefix u, just as raw strings use the prefix r.

25
Python Lists
The most basic data structure in Python is the sequence. Each element of a sequence is assigned a number -
its position or index. The first index is zero, the second index is one, and so forth.

Python has six built-in types of sequences, but the most common ones are lists and tuples, which we would
see in this tutorial.

There are certain things you can do with all sequence types. These operations include indexing, slicing,
adding, multiplying, and checking for membership. In addition, Python has built-in functions for finding the
length of a sequence and for finding its largest and smallest elements.

Python Lists
The list is a most versatile datatype available in Python which can be written as a list of comma-separated
values (items) between square brackets. Important thing about a list is that items in a list need not be of the
same type.

Creating a list is as simple as putting different comma-separated values between square brackets. For
example −

list1 = ['physics', 'chemistry', 1997, 2000];


list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]

Similar to string indices, list indices start at 0, and lists can be sliced, concatenated and so on.

Accessing Values in Lists


To access values in lists, use the square brackets for slicing along with the index or indices to obtain value
available at that index. For example −

#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];

print "list1[0]: ", list1[0]


print "list2[1:5]: ", list2[1:5]

When the above code is executed, it produces the following result −

list1[0]: physics
list2[1:5]: [2, 3, 4, 5]

Updating Lists
You can update single or multiple elements of lists by giving the slice on the left-hand side of the assignment
operator, and you can add to elements in a list with the append() method. For example −

26
#!/usr/bin/python
list = ['physics', 'chemistry', 1997, 2000];

print "Value available at index 2 : "


print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

Note: append() method is discussed in subsequent section.

When the above code is executed, it produces the following result −

Value available at index 2 :


1997
New value available at index 2 :
2001

Delete List Elements


To remove a list element, you can use either the del statement if you know exactly which element(s) you are
deleting or the remove() method if you do not know. For example −

#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000];

print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

When the above code is executed, it produces following result −

['physics', 'chemistry', 1997, 2000]


After deleting value at index 2 :
['physics', 'chemistry', 2000]

Note: remove() method is discussed in subsequent section.

Basic List Operations


Lists respond to the + and * operators much like strings; they mean concatenation and repetition here too,
except that the result is a new list, not a string.

In fact, lists respond to all of the general sequence operations we used on strings in the prior chapter.

Python Expression Results Description

len([1, 2, 3]) 3 Length

27
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation

['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] Repetition

3 in [1, 2, 3] True Membership

for x in [1, 2, 3]: print x, 123 Iteration

Indexing, Slicing, and Matrixes


Because lists are sequences, indexing and slicing work the same way for lists as they do for strings.

Assuming following input −

L = ['spam', 'Spam', 'SPAM!']

Python Expression Results Description

L[2] 'SPAM!' Offsets start at zero

L[-2] 'Spam' Negative: count from the right

L[1:] ['Spam', 'SPAM!'] Slicing fetches sections

Python Tuples
A tuple is a sequence of immutable Python objects. Tuples are sequences, just like lists. The differences
between tuples and lists are, the tuples cannot be changed unlike lists and tuples use parentheses, whereas
lists use square brackets.

Creating a tuple is as simple as putting different comma-separated values. Optionally you can put these
comma-separated values between parentheses also. For example −

tup1 = ('physics', 'chemistry', 1997, 2000);


tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

The empty tuple is written as two parentheses containing nothing −

tup1 = ();

To write a tuple containing a single value you have to include a comma, even though there is only one value

tup1 = (50,);

Like string indices, tuple indices start at 0, and they can be sliced, concatenated, and so on.

Accessing Values in Tuples:


To access values in tuple, use the square brackets for slicing along with the index or indices to obtain value
available at that index. For example −

#!/usr/bin/python
28
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );

print "tup1[0]: ", tup1[0]


print "tup2[1:5]: ", tup2[1:5]

When the above code is executed, it produces the following result −

tup1[0]: physics
tup2[1:5]: [2, 3, 4, 5]

Updating Tuples
Tuples are immutable which means you cannot update or change the values of tuple elements. You are able
to take portions of existing tuples to create new tuples as the following example demonstrates −

#!/usr/bin/python
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');

# Following action is not valid for tuples


# tup1[0] = 100;

# So let's create a new tuple as follows


tup3 = tup1 + tup2;
print tup3

When the above code is executed, it produces the following result −

(12, 34.56, 'abc', 'xyz')

Delete Tuple Elements


Removing individual tuple elements is not possible. There is, of course, nothing wrong with putting together
another tuple with the undesired elements discarded.

To explicitly remove an entire tuple, just use the del statement. For example:

#!/usr/bin/python
tup = ('physics', 'chemistry', 1997, 2000);

print tup
del tup;
print "After deleting tup : "
print tup

29
This produces the following result. Note an exception raised, this is because after del tup tuple does not exist
any more −

('physics', 'chemistry', 1997, 2000)


After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup;
NameError: name 'tup' is not defined

Basic Tuples Operations


Tuples respond to the + and * operators much like strings; they mean concatenation and repetition here too,
except that the result is a new tuple, not a string.

In fact, tuples respond to all of the general sequence operations we used on strings in the prior chapter −

Python Expression Results Description

len((1, 2, 3)) 3 Length

(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) Concatenation

('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') Repetition

3 in (1, 2, 3) True Membership

for x in (1, 2, 3): print x, 123 Iteration

Indexing, Slicing, and Matrixes


Because tuples are sequences, indexing and slicing work the same way for tuples as they do for strings.
Assuming following input −

L = ('spam', 'Spam', 'SPAM!')

Python Expression Results Description

L[2] 'SPAM!' Offsets start at zero

L[-2] 'Spam' Negative: count from the right

L[1:] ['Spam', 'SPAM!'] Slicing fetches sections

No Enclosing Delimiters
Any set of multiple objects, comma-separated, written without identifying symbols, i.e., brackets for lists,
parentheses for tuples, etc., default to tuples, as indicated in these short examples −

#!/usr/bin/python
print 'abc', -4.24e93, 18+6.6j, 'xyz'
x, y = 1, 2;
print "Value of x , y : ", x,y

30
When the above code is executed, it produces the following result −

abc -4.24e+93 (18+6.6j) xyz


Value of x , y : 1 2

Python Dictionary
Each key is separated from its value by a colon (:), the items are separated by commas, and the whole thing
is enclosed in curly braces. An empty dictionary without any items is written with just two curly braces, like
this: {}.

Keys are unique within a dictionary while values may not be. The values of a dictionary can be of any type,
but the keys must be of an immutable data type such as strings, numbers, or tuples.

Accessing Values in Dictionary:


To access dictionary elements, you can use the familiar square brackets along with the key to obtain its
value. Following is a simple example −

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print "dict['Name']: ", dict['Name']


print "dict['Age']: ", dict['Age']

When the above code is executed, it produces the following result −

dict['Name']: Zara
dict['Age']: 7

If we attempt to access a data item with a key, which is not part of the dictionary, we get an error as follows

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print "dict['Alice']: ", dict['Alice']

When the above code is executed, it produces the following result −

dict['Alice']:
Traceback (most recent call last):
File "test.py", line 4, in <module>
print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

Updating Dictionary
You can update a dictionary by adding a new entry or a key-value pair, modifying an existing entry, or
deleting an existing entry as shown below in the simple example −

#!/usr/bin/python

31
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

dict['Age'] = 8; # update existing entry


dict['School'] = "DPS School"; # Add new entry

print "dict['Age']: ", dict['Age']


print "dict['School']: ", dict['School']

When the above code is executed, it produces the following result −

dict['Age']: 8
dict['School']: DPS School

Delete Dictionary Elements


You can either remove individual dictionary elements or clear the entire contents of a dictionary. You can
also delete entire dictionary in a single operation.

To explicitly remove an entire dictionary, just use the del statement. Following is a simple example −

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

del dict['Name']; # remove entry with key 'Name'


dict.clear(); # remove all entries in dict
del dict ; # delete entire dictionary

print "dict['Age']: ", dict['Age']


print "dict['School']: ", dict['School']

This produces the following result. Note that an exception is raised because after del dict dictionary does not
exist any more −

dict['Age']:
Traceback (most recent call last):
File "test.py", line 8, in <module>
print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

Note: del() method is discussed in subsequent section.

Properties of Dictionary Keys


Dictionary values have no restrictions. They can be any arbitrary Python object, either standard objects or
user-defined objects. However, same is not true for the keys.

There are two important points to remember about dictionary keys −

32
(a) More than one entry per key not allowed. Which means no duplicate key is allowed. When duplicate keys
encountered during assignment, the last assignment wins. For example −

#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}

print "dict['Name']: ", dict['Name']

When the above code is executed, it produces the following result −

dict['Name']: Manni

(b) Keys must be immutable. Which means you can use strings, numbers or tuples as dictionary keys but
something like ['key'] is not allowed. Following is a simple example:

#!/usr/bin/python
dict = {['Name']: 'Zara', 'Age': 7}

print "dict['Name']: ", dict['Name']

When the above code is executed, it produces the following result −

Traceback (most recent call last):


File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: list objects are unhashable

Python Date & Time


A Python program can handle date and time in several ways. Converting between date formats is a common
chore for computers. Python's time and calendar modules help track dates and times.

What is Tick?
Time intervals are floating-point numbers in units of seconds. Particular instants in time are expressed in
seconds since 12:00am, January 1, 1970(epoch).

There is a popular time module available in Python which provides functions for working with times, and for
converting between representations. The function time.time() returns the current system time in ticks since
12:00am, January 1, 1970(epoch).

Example
#!/usr/bin/python
import time; # This is required to include time module.

ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks

This would produce a result something as follows −


33
Number of ticks since 12:00am, January 1, 1970: 7186862.73399

Date arithmetic is easy to do with ticks. However, dates before the epoch cannot be represented in this form.
Dates in the far future also cannot be represented this way - the cutoff point is sometime in 2038 for UNIX
and Windows.

What is TimeTuple?
Many of Python's time functions handle time as a tuple of 9 numbers, as shown below −

Index Field Values

0 4-digit year 2008

1 Month 1 to 12

2 Day 1 to 31

3 Hour 0 to 23

4 Minute 0 to 59

5 Second 0 to 61 (60 or 61 are leap-seconds)

6 Day of Week 0 to 6 (0 is Monday)

7 Day of year 1 to 366 (Julian day)

8 Daylight savings -1, 0, 1, -1 means library determines DST

The above tuple is equivalent to struct_time structure. This structure has following attributes −

Index Attributes Values

0 tm_year 2008

1 tm_mon 1 to 12

2 tm_mday 1 to 31

3 tm_hour 0 to 23

4 tm_min 0 to 59

5 tm_sec 0 to 61 (60 or 61 are leap-seconds)

6 tm_wday 0 to 6 (0 is Monday)

7 tm_yday 1 to 366 (Julian day)

8 tm_isdst -1, 0, 1, -1 means library determines DST

Getting current time

34
To translate a time instant from a seconds since the epoch floating-point value into a time-tuple, pass the
floating-point value to a function (e.g., localtime) that returns a time-tuple with all nine items valid.

#!/usr/bin/python
import time;

localtime = time.localtime(time.time())
print "Local current time :", localtime

This would produce the following result, which could be formatted in any other presentable form −

Local current time : time.struct_time(tm_year=2013, tm_mon=7,


tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)

Getting formatted time


You can format any time as per your requirement, but simple method to get time in readable format is
asctime() −

#!/usr/bin/python
import time;

localtime = time.asctime( time.localtime(time.time()) )


print "Local current time :", localtime

This would produce the following result −

Local current time : Tue Jan 13 10:17:09 2009

Getting calendar for a month


The calendar module gives a wide range of methods to play with yearly and monthly calendars. Here, we
print a calendar for a given month ( Jan 2008 ) −

#!/usr/bin/python
import calendar

cal = calendar.month(2008, 1)
print "Here is the calendar:"
print cal

This would produce the following result −

Here is the calendar:


January 2008
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
35
28 29 30 31

Python Functions
A function is a block of organized, reusable code that is used to perform a single, related action. Functions
provide better modularity for your application and a high degree of code reusing.

As you already know, Python gives you many built-in functions like print(), etc. but you can also create your
own functions. These functions are called user-defined functions.

Defining a Function
You can define functions to provide the required functionality. Here are simple rules to define a function in
Python.

 Function blocks begin with the keyword def followed by the function name and parentheses ( ( ) ).
 Any input parameters or arguments should be placed within these parentheses. You can also define
parameters inside these parentheses.
 The first statement of a function can be an optional statement - the documentation string of the function
or docstring.
 The code block within every function starts with a colon (:) and is indented.
 The statement return [expression] exits a function, optionally passing back an expression to the caller. A
return statement with no arguments is the same as return None.
Syntax
def functionname( parameters ):
"function_docstring"
function_suite
return [expression]

By default, parameters have a positional behavior and you need to inform them in the same order that they
were defined.

Example
The following function takes a string as input parameter and prints it on standard screen.

def printme( str ):


"This prints a passed string into this function"
print str
return

Calling a Function
Defining a function only gives it a name, specifies the parameters that are to be included in the function and
structures the blocks of code.

Once the basic structure of a function is finalized, you can execute it by calling it from another function or
directly from the Python prompt. Following is the example to call printme() function −

#!/usr/bin/python
# Function definition is here
36
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

When the above code is executed, it produces the following result −

I'm first call to user defined function!


Again second call to the same function

Pass by reference vs value


All parameters (arguments) in the Python language are passed by reference. It means if you change what a
parameter refers to within a function, the change also reflects back in the calling function. For example −

#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist.append([1,2,3,4]);
print "Values inside the function: ", mylist
return
# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Here, we are maintaining reference of the passed object and appending values in the same object. So, this
would produce the following result −

Values inside the function: [10, 20, 30, [1, 2, 3, 4]]


Values outside the function: [10, 20, 30, [1, 2, 3, 4]]

There is one more example where argument is being passed by reference and the reference is being
overwritten inside the called function.

#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist = [1,2,3,4]; # This would assig new reference in mylist

37
print "Values inside the function: ", mylist
return
# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

The parameter mylist is local to the function changeme. Changing mylist within the function does not
affect mylist. The function accomplishes nothing and finally this would produce the following result:

Values inside the function: [1, 2, 3, 4]


Values outside the function: [10, 20, 30]

Function Arguments
You can call a function by using the following types of formal arguments:

 Required arguments
 Keyword arguments
 Default arguments
 Variable-length arguments
Required arguments
Required arguments are the arguments passed to a function in correct positional order. Here, the number of
arguments in the function call should match exactly with the function definition.

To call the function printme(), you definitely need to pass one argument, otherwise it gives a syntax error as
follows −

#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme()

When the above code is executed, it produces the following result:

Traceback (most recent call last):


File "test.py", line 11, in <module>
printme();
TypeError: printme() takes exactly 1 argument (0 given)

Keyword arguments

38
Keyword arguments are related to the function calls. When you use keyword arguments in a function call,
the caller identifies the arguments by the parameter name.

This allows you to skip arguments or place them out of order because the Python interpreter is able to use the
keywords provided to match the values with parameters. You can also make keyword calls to
the printme() function in the following ways –

#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme( str = "My string")

When the above code is executed, it produces the following result −

My string

The following example gives more clear picture. Note that the order of parameters does not matter.

#!/usr/bin/python
# Function definition is here
def printinfo( name, age ):
"This prints a passed info into this function"
print "Name: ", name
print "Age ", age
return;
# Now you can call printinfo function
printinfo( age=50, name="miki" )

When the above code is executed, it produces the following result −

Name: miki
Age 50

Default arguments
A default argument is an argument that assumes a default value if a value is not provided in the function call
for that argument. The following example gives an idea on default arguments, it prints default age if it is not
passed −

#!/usr/bin/python
39
# Function definition is here
def printinfo( name, age = 35 ):
"This prints a passed info into this function"
print "Name: ", name
print "Age ", age
return;
# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

When the above code is executed, it produces the following result −

Name: miki
Age 50
Name: miki
Age 35

Variable-length arguments
You may need to process a function for more arguments than you specified while defining the function.
These arguments are called variable-lengtharguments and are not named in the function definition, unlike
required and default arguments.

Syntax for a function with non-keyword variable arguments is this −

def functionname([formal_args,] *var_args_tuple ):


"function_docstring"
function_suite
return [expression]

An asterisk (*) is placed before the variable name that holds the values of all nonkeyword variable
arguments. This tuple remains empty if no additional arguments are specified during the function call.
Following is a simple example −

#!/usr/bin/python
# Function definition is here
def printinfo( arg1, *vartuple ):
"This prints a variable passed arguments"
print "Output is: "
print arg1
for var in vartuple:
print var
return;
# Now you can call printinfo function
40
printinfo( 10 )
printinfo( 70, 60, 50 )

When the above code is executed, it produces the following result −

Output is:
10
Output is:
70
60
50

The Anonymous Functions


These functions are called anonymous because they are not declared in the standard manner by using
the def keyword. You can use the lambda keyword to create small anonymous functions.

 Lambda forms can take any number of arguments but return just one value in the form of an expression. They
cannot contain commands or multiple expressions.
 An anonymous function cannot be a direct call to print because lambda requires an expression
 Lambda functions have their own local namespace and cannot access variables other than those in their
parameter list and those in the global namespace.
 Although it appears that lambda's are a one-line version of a function, they are not equivalent to inline
statements in C or C++, whose purpose is by passing function stack allocation during invocation for
performance reasons.
Syntax
The syntax of lambda functions contains only a single statement, which is as follows −

lambda [arg1 [,arg2,.....argn]]:expression

Following is the example to show how lambda form of function works −

#!/usr/bin/python
# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;
# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

When the above code is executed, it produces the following result −

Value of total : 30
Value of total : 40

The return Statement


The statement return [expression] exits a function, optionally passing back an expression to the caller. A
return statement with no arguments is the same as return None.

41
All the above examples are not returning any value. You can return a value from a function as follows −

#!/usr/bin/python
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2
print "Inside the function : ", total
return total;
# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total

When the above code is executed, it produces the following result −

Inside the function : 30


Outside the function : 30

Scope of Variables
All variables in a program may not be accessible at all locations in that program. This depends on where you
have declared a variable.

The scope of a variable determines the portion of the program where you can access a particular identifier.
There are two basic scopes of variables in Python −

 Global variables
 Local variables
Global vs. Local variables
Variables that are defined inside a function body have a local scope, and those defined outside have a global
scope.

This means that local variables can be accessed only inside the function in which they are declared, whereas
global variables can be accessed throughout the program body by all functions. When you call a function, the
variables declared inside it are brought into scope. Following is a simple example −

#!/usr/bin/python
total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2; # Here total is local variable.
print "Inside the function local total : ", total
return total;

42
# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total

When the above code is executed, it produces the following result −

Inside the function local total : 30


Outside the function global total : 0

Python Modules
A module allows you to logically organize your Python code. Grouping related code into a module makes
the code easier to understand and use. A module is a Python object with arbitrarily named attributes that you
can bind and reference.

Simply, a module is a file consisting of Python code. A module can define functions, classes and variables. A
module can also include runnable code.

Example
The Python code for a module named aname normally resides in a file named aname.py. Here's an example
of a simple module, support.py

def print_func( par ):


print "Hello : ", par
return

The import Statement


You can use any Python source file as a module by executing an import statement in some other Python
source file. The import has the following syntax:

import module1[, module2[,... moduleN]

When the interpreter encounters an import statement, it imports the module if the module is present in the
search path. A search path is a list of directories that the interpreter searches before importing a module. For
example, to import the module hello.py, you need to put the following command at the top of the script −

#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Zara")

When the above code is executed, it produces the following result −

Hello : Zara

43
A module is loaded only once, regardless of the number of times it is imported. This prevents the module
execution from happening over and over again if multiple imports occur.

The from...import Statement


Python's from statement lets you import specific attributes from a module into the current namespace.
The from...import has the following syntax −

from modname import name1[, name2[, ... nameN]]

For example, to import the function fibonacci from the module fib, use the following statement −

from fib import fibonacci

This statement does not import the entire module fib into the current namespace; it just introduces the item
fibonacci from the module fib into the global symbol table of the importing module.

The from...import * Statement:


It is also possible to import all names from a module into the current namespace by using the following
import statement −

from modname import *

This provides an easy way to import all the items from a module into the current namespace; however, this
statement should be used sparingly.

Locating Modules
When you import a module, the Python interpreter searches for the module in the following sequences −

 The current directory.

 If the module isn't found, Python then searches each directory in the shell variable PYTHONPATH.

 If all else fails, Python checks the default path. On UNIX, this default path is normally /usr/local/lib/python/.

The module search path is stored in the system module sys as the sys.pathvariable. The sys.path variable
contains the current directory, PYTHONPATH, and the installation-dependent default.

The PYTHONPATH Variable:


The PYTHONPATH is an environment variable, consisting of a list of directories. The syntax of
PYTHONPATH is the same as that of the shell variable PATH.

Here is a typical PYTHONPATH from a Windows system:

set PYTHONPATH=c:\python20\lib;

And here is a typical PYTHONPATH from a UNIX system:

set PYTHONPATH=/usr/local/lib/python

44
Namespaces and Scoping
Variables are names (identifiers) that map to objects. A namespace is a dictionary of variable names (keys)
and their corresponding objects (values).

A Python statement can access variables in a local namespace and in the global namespace. If a local and a
global variable have the same name, the local variable shadows the global variable.

Each function has its own local namespace. Class methods follow the same scoping rule as ordinary
functions.

Python makes educated guesses on whether variables are local or global. It assumes that any variable
assigned a value in a function is local.

Therefore, in order to assign a value to a global variable within a function, you must first use the global
statement.

The statement global VarName tells Python that VarName is a global variable. Python stops searching the
local namespace for the variable.

For example, we define a variable Money in the global namespace. Within the function Money, we
assign Money a value, therefore Python assumes Money as a local variable. However, we accessed the value
of the local variable Moneybefore setting it, so an UnboundLocalError is the result. Uncommenting the
global statement fixes the problem.

#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money

The dir( ) Function


The dir() built-in function returns a sorted list of strings containing the names defined by a module.

The list contains the names of all the modules, variables and functions that are defined in a module.
Following is a simple example −

#!/usr/bin/python
# Import built-in module math
import math
content = dir(math)

45
print content

When the above code is executed, it produces the following result −

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',


'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh']

Here, the special string variable __name__ is the module's name, and __file__is the filename from which the
module was loaded.

The globals() and locals() Functions −


The globals() and locals() functions can be used to return the names in the global and local namespaces
depending on the location from where they are called.

If locals() is called from within a function, it will return all the names that can be accessed locally from that
function.

If globals() is called from within a function, it will return all the names that can be accessed globally from
that function.

The return type of both these functions is dictionary. Therefore, names can be extracted using the keys()
function.

The reload() Function


When the module is imported into a script, the code in the top-level portion of a module is executed only
once.

Therefore, if you want to reexecute the top-level code in a module, you can use the reload() function. The
reload() function imports a previously imported module again. The syntax of the reload() function is this −

reload(module_name)

Here, module_name is the name of the module you want to reload and not the string containing the module
name. For example, to reload hello module, do the following −

reload(hello)

Packages in Python
A package is a hierarchical file directory structure that defines a single Python application environment that
consists of modules and subpackages and sub-subpackages, and so on.

Consider a file Pots.py available in Phone directory. This file has following line of source code −

#!/usr/bin/python
46
def Pots():
print "I'm Pots Phone"

Similar way, we have another two files having different functions with the same name as above −

 Phone/Isdn.py file having function Isdn()

 Phone/G3.py file having function G3()

Now, create one more file __init__.py in Phone directory −

 Phone/__init__.py

To make all of your functions available when you've imported Phone, you need to put explicit import
statements in __init__.py as follows −

from Pots import Pots


from Isdn import Isdn
from G3 import G3

After you add these lines to __init__.py, you have all of these classes available when you import the Phone
package.

#!/usr/bin/python
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()

When the above code is executed, it produces the following result −

I'm Pots Phone


I'm 3G Phone
I'm ISDN Phone

In the above example, we have taken example of a single functions in each file, but you can keep multiple
functions in your files. You can also define different Python classes in those files and then you can create
your packages out of those classes.

Python Files I/O


Printing to the Screen
The simplest way to produce output is using the print statement where you can pass zero or more expressions
separated by commas. This function converts the expressions you pass into a string and writes the result to
standard output as follows −

47
#!/usr/bin/python
print "Python is really a great language,", "isn't it?"

This produces the following result on your standard screen −

Python is really a great language, isn't it?

Reading Keyboard Input


Python provides two built-in functions to read a line of text from standard input, which by default comes
from the keyboard. These functions are −

 raw_input
 input
The raw_input Function
The raw_input([prompt]) function reads one line from standard input and returns it as a string (removing the
trailing newline).

#!/usr/bin/python
str = raw_input("Enter your input: ");
print "Received input is : ", str

This prompts you to enter any string and it would display same string on the screen. When I typed "Hello
Python!", its output is like this −

Enter your input: Hello Python


Received input is : Hello Python

The input Function


The input([prompt]) function is equivalent to raw_input, except that it assumes the input is a valid Python
expression and returns the evaluated result to you.

#!/usr/bin/python
str = input("Enter your input: ");
print "Received input is : ", str

This would produce the following result against the entered input −

Enter your input: [x*5 for x in range(2,10,2)]


Recieved input is : [10, 20, 30, 40]

Opening and Closing Files


Until now, you have been reading and writing to the standard input and output. Now, we will see how to use
actual data files.

48
Python provides basic functions and methods necessary to manipulate files by default. You can do most of
the file manipulation using a file object.

The open Function


Before you can read or write a file, you have to open it using Python's built-in open() function. This function
creates a file object, which would be utilized to call other support methods associated with it.

Syntax
file object = open(file_name [, access_mode][, buffering])

Here are parameter details:

 file_name: The file_name argument is a string value that contains the name of the file that you want to
access.
 access_mode: The access_mode determines the mode in which the file has to be opened, i.e., read, write,
append, etc. A complete list of possible values is given below in the table. This is optional parameter and the
default file access mode is read (r).
 buffering: If the buffering value is set to 0, no buffering takes place. If the buffering value is 1, line buffering is
performed while accessing a file. If you specify the buffering value as an integer greater than 1, then buffering
action is performed with the indicated buffer size. If negative, the buffer size is the system default(default
behavior).
Here is a list of the different modes of opening a file −

Modes Description

r Opens a file for reading only. The file pointer is placed at the beginning of the file. This is the default
mode.

rb Opens a file for reading only in binary format. The file pointer is placed at the beginning of the file. This is
the default mode.

r+ Opens a file for both reading and writing. The file pointer placed at the beginning of the file.

rb+ Opens a file for both reading and writing in binary format. The file pointer placed at the beginning of the
file.

w Opens a file for writing only. Overwrites the file if the file exists. If the file does not exist, creates a new
file for writing.

wb Opens a file for writing only in binary format. Overwrites the file if the file exists. If the file does not exist,
creates a new file for writing.

w+ Opens a file for both writing and reading. Overwrites the existing file if the file exists. If the file does not
exist, creates a new file for reading and writing.

wb+ Opens a file for both writing and reading in binary format. Overwrites the existing file if the file exists. If
the file does not exist, creates a new file for reading and writing.

a Opens a file for appending. The file pointer is at the end of the file if the file exists. That is, the file is in
the append mode. If the file does not exist, it creates a new file for writing.

ab Opens a file for appending in binary format. The file pointer is at the end of the file if the file exists. That
is, the file is in the append mode. If the file does not exist, it creates a new file for writing.

49
a+ Opens a file for both appending and reading. The file pointer is at the end of the file if the file exists. The
file opens in the append mode. If the file does not exist, it creates a new file for reading and writing.

ab+ Opens a file for both appending and reading in binary format. The file pointer is at the end of the file if
the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for
reading and writing.

The file Object Attributes


Once a file is opened and you have one file object, you can get various information related to that file.

Here is a list of all attributes related to file object:

Attribute Description

file.closed Returns true if file is closed, false otherwise.

file.mode Returns access mode with which file was opened.

file.name Returns name of the file.

file.softspace Returns false if space explicitly required with print, true otherwise.

Example
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

This produces the following result −

Name of the file: foo.txt


Closed or not : False
Opening mode : wb
Softspace flag : 0

The close() Method


The close() method of a file object flushes any unwritten information and closes the file object, after which
no more writing can be done.

Python automatically closes a file when the reference object of a file is reassigned to another file. It is a good
practice to use the close() method to close a file.

Syntax
fileObject.close();

Example
#!/usr/bin/python
50
# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file


fo.close()

This produces the following result −

Name of the file: foo.txt

Reading and Writing Files


The file object provides a set of access methods to make our lives easier. We would see how to
use read() and write() methods to read and write files.

The write() Method


The write() method writes any string to an open file. It is important to note that Python strings can have
binary data and not just text.

The write() method does not add a newline character ('\n') to the end of the string −

Syntax
fileObject.write(string);

Here, passed parameter is the content to be written into the opened file.

Example
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n");
# Close opend file
fo.close()

The above method would create foo.txt file and would write given content in that file and finally it would
close that file. If you would open this file, it would have following content.

Python is a great language.


Yeah its great!!

The read() Method


The read() method reads a string from an open file. It is important to note that Python strings can have binary
data. apart from text data.

Syntax
fileObject.read([count]);

51
Here, passed parameter is the number of bytes to be read from the opened file. This method starts reading
from the beginning of the file and if count is missing, then it tries to read as much as possible, maybe until
the end of file.

Example
Let's take a file foo.txt, which we created above.

#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

This produces the following result −

Read String is : Python is

File Positions
The tell() method tells you the current position within the file; in other words, the next read or write will
occur at that many bytes from the beginning of the file.

The seek(offset[, from]) method changes the current file position. The offsetargument indicates the number of
bytes to be moved. The from argument specifies the reference position from where the bytes are to be moved.

If from is set to 0, it means use the beginning of the file as the reference position and 1 means use the current
position as the reference position and if it is set to 2 then the end of the file would be taken as the reference
position.

Example
Let us take a file foo.txt, which we created above.

#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str

# Check current position


position = fo.tell();
print "Current file position : ", position

# Reposition pointer at the beginning once again


52
position = fo.seek(0, 0);
str = fo.read(10);
print "Again read String is : ", str
# Close opend file
fo.close()

This produces the following result −

Read String is : Python is


Current file position : 10
Again read String is : Python is

Renaming and Deleting Files


Python os module provides methods that help you perform file-processing operations, such as renaming and
deleting files.

To use this module you need to import it first and then you can call any related functions.

The rename() Method


The rename() method takes two arguments, the current filename and the new filename.

Syntax
os.rename(current_file_name, new_file_name)

Example
Following is the example to rename an existing file test1.txt:

#!/usr/bin/python
import os
# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

The remove() Method


You can use the remove() method to delete files by supplying the name of the file to be deleted as the
argument.

Syntax
os.remove(file_name)

Example
Following is the example to delete an existing file test2.txt −

#!/usr/bin/python
import os

53
# Delete file test2.txt
os.remove("text2.txt")

Directories in Python
All files are contained within various directories, and Python has no problem handling these too.
The os module has several methods that help you create, remove, and change directories.

The mkdir() Method


You can use the mkdir() method of the os module to create directories in the current directory. You need to
supply an argument to this method which contains the name of the directory to be created.

Syntax
os.mkdir("newdir")

Example
Following is the example to create a directory test in the current directory −

#!/usr/bin/python
import os

# Create a directory "test"


os.mkdir("test")

The chdir() Method


You can use the chdir() method to change the current directory. The chdir() method takes an argument,
which is the name of the directory that you want to make the current directory.

Syntax
os.chdir("newdir")

Example
Following is the example to go into "/home/newdir" directory −

#!/usr/bin/python
import os

# Changing a directory to "/home/newdir"


os.chdir("/home/newdir")

The getcwd() Method


The getcwd() method displays the current working directory.

Syntax
os.getcwd()

54
Example
Following is the example to give current directory −

#!/usr/bin/python
import os

# This would give location of the current directory


os.getcwd()

The rmdir() Method


The rmdir() method deletes the directory, which is passed as an argument in the method.

Before removing a directory, all the contents in it should be removed.

Syntax:
os.rmdir('dirname')

Example
Following is the example to remove "/tmp/test" directory. It is required to give fully qualified name of the
directory, otherwise it would search for that directory in the current directory.

#!/usr/bin/python
import os

# This would remove "/tmp/test" directory.


os.rmdir( "/tmp/test" )

File & Directory Related Methods


There are three important sources, which provide a wide range of utility methods to handle and manipulate
files & directories on Windows and Unix operating systems. They are as follows −

 File Object Methods: The file object provides functions to manipulate files.

 OS Object Methods: This provides methods to process files as well as directories.

ython provides two very important features to handle any unexpected error in your Python programs and to
add debugging capabilities in them −

 Exception Handling: This would be covered in this tutorial. Here is a list standard Exceptions available in
Python: Standard Exceptions.

 Assertions: This would be covered in Assertions in Python tutorial.

List of Standard Exceptions −

55
EXCEPTION NAME DESCRIPTION

Exception Base class for all exceptions

StopIteration Raised when the next() method of an iterator does not point to any object.

SystemExit Raised by the sys.exit() function.

StandardError Base class for all built-in exceptions except StopIteration and SystemExit.

ArithmeticError Base class for all errors that occur for numeric calculation.

OverflowError Raised when a calculation exceeds maximum limit for a numeric type.

FloatingPointError Raised when a floating point calculation fails.

ZeroDivisonError Raised when division or modulo by zero takes place for all numeric types.

AssertionError Raised in case of failure of the Assert statement.

AttributeError Raised in case of failure of attribute reference or assignment.

EOFError Raised when there is no input from either the raw_input() or input() function and the
end of file is reached.

ImportError Raised when an import statement fails.

KeyboardInterrupt Raised when the user interrupts program execution, usually by pressing Ctrl+c.

LookupError Base class for all lookup errors.

IndexError Raised when an index is not found in a sequence.


KeyError Raised when the specified key is not found in the dictionary.

NameError Raised when an identifier is not found in the local or global namespace.

UnboundLocalError Raised when trying to access a local variable in a function or method but no value has
EnvironmentError been assigned to it.
Base class for all exceptions that occur outside the Python environment.

IOError Raised when an input/ output operation fails, such as the print statement or the open()
IOError function when trying to open a file that does not exist.
Raised for operating system-related errors.

SyntaxError Raised when there is an error in Python syntax.


IndentationError Raised when indentation is not specified properly.

SystemError Raised when the interpreter finds an internal problem, but when this error is
encountered the Python interpreter does not exit.

SystemExit Raised when Python interpreter is quit by using the sys.exit() function. If not handled in
the code, causes the interpreter to exit.

Raised when Python Raised when an operation or function is attempted that is invalid for the specified data
interpreter is quit by type.
using the sys.exit()
function. If not handled

56
in the code, causes the
interpreter to exit.

ValueError Raised when the built-in function for a data type has the valid type of arguments, but
the arguments have invalid values specified.

RuntimeError Raised when a generated error does not fall into any category.

NotImplementedError Raised when an abstract method that needs to be implemented in an inherited class is
not actually implemented.

Assertions in Python
An assertion is a sanity-check that you can turn on or turn off when you are done with your testing of the
program.

The easiest way to think of an assertion is to liken it to a raise-if statement (or to be more accurate, a raise-if-
not statement). An expression is tested, and if the result comes up false, an exception is raised.

Assertions are carried out by the assert statement, the newest keyword to Python, introduced in version 1.5.

Programmers often place assertions at the start of a function to check for valid input, and after a function call
to check for valid output.

The assert Statement


When it encounters an assert statement, Python evaluates the accompanying expression, which is hopefully
true. If the expression is false, Python raises an AssertionError exception.

The syntax for assert is −

assert Expression[, Arguments]

If the assertion fails, Python uses ArgumentExpression as the argument for the AssertionError.
AssertionError exceptions can be caught and handled like any other exception using the try-except statement,
but if not handled, they will terminate the program and produce a traceback.

Example
Here is a function that converts a temperature from degrees Kelvin to degrees Fahrenheit. Since zero degrees
Kelvin is as cold as it gets, the function bails out if it sees a negative temperature −

#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
assert (Temperature >= 0),"Colder than absolute zero!"
return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

When the above code is executed, it produces the following result −


57
32.0
451
Traceback (most recent call last):
File "test.py", line 9, in
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

What is Exception?
An exception is an event, which occurs during the execution of a program that disrupts the normal flow of
the program's instructions. In general, when a Python script encounters a situation that it cannot cope with, it
raises an exception. An exception is a Python object that represents an error.

When a Python script raises an exception, it must either handle the exception immediately otherwise it
terminates and quits.

Handling an exception
If you have some suspicious code that may raise an exception, you can defend your program by placing the
suspicious code in a try: block. After the try: block, include an except: statement, followed by a block of
code which handles the problem as elegantly as possible.

Syntax
Here is simple syntax of try....except...else blocks −

try:
You do your operations here;
......................
except ExceptionI:
If there is ExceptionI, then execute this block.
except ExceptionII:
If there is ExceptionII, then execute this block.
......................
else:
If there is no exception then execute this block.

Here are few important points about the above-mentioned syntax −

 A single try statement can have multiple except statements. This is useful when the try block contains statements
that may throw different types of exceptions.

 You can also provide a generic except clause, which handles any exception.

 After the except clause(s), you can include an else-clause. The code in the else-block executes if the code in the try:
block does not raise an exception.

 The else-block is a good place for code that does not need the try: block's protection.

58
Example
This example opens a file, writes content in the, file and comes out gracefully because there is no problem at
all −

#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"
fh.close()

This produces the following result −

Written content in the file successfully

Example
This example tries to open a file where you do not have write permission, so it raises an exception −

#!/usr/bin/python
try:
fh = open("testfile", "r")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"

This produces the following result −

Error: can't find file or read data

The except Clause with No Exceptions


You can also use the except statement with no exceptions defined as follows −

try:
You do your operations here;
......................
except:
If there is any exception, then execute this block.
......................
else:

59
If there is no exception then execute this block.

This kind of a try-except statement catches all the exceptions that occur. Using this kind of try-except
statement is not considered a good programming practice though, because it catches all exceptions but does
not make the programmer identify the root cause of the problem that may occur.

The except Clause with Multiple Exceptions


You can also use the same except statement to handle multiple exceptions as follows −

try:
You do your operations here;
......................
except(Exception1[, Exception2[,...ExceptionN]]]):
If there is any exception from the given exception list,
then execute this block.
......................
else:
If there is no exception then execute this block.

The try-finally Clause


You can use a finally: block along with a try: block. The finally block is a place to put any code that must
execute, whether the try-block raised an exception or not. The syntax of the try-finally statement is this −

try:
You do your operations here;
......................
Due to any exception, this may be skipped.
finally:
This would always be executed.
......................

You cannot use else clause as well along with a finally clause.

Example
#!/usr/bin/python

try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
finally:
print "Error: can\'t find file or read data"
If you do not have permission to open the file in writing mode, then this will produce the following result:

Error: can't find file or read data

Same example can be written more cleanly as follows −


60
#!/usr/bin/python

try:
fh = open("testfile", "w")
try:
fh.write("This is my test file for exception handling!!")
finally:
print "Going to close the file"
fh.close()
except IOError:
print "Error: can\'t find file or read data"
When an exception is thrown in the try block, the execution immediately passes to the finally block. After all
the statements in the finally block are executed, the exception is raised again and is handled in
the except statements if present in the next higher layer of the try-except statement.

Argument of an Exception
An exception can have an argument, which is a value that gives additional information about the problem.
The contents of the argument vary by exception. You capture an exception's argument by supplying a
variable in the except clause as follows −

try:
You do your operations here;
......................
except ExceptionType, Argument:
You can print value of Argument here...

If you write the code to handle a single exception, you can have a variable follow the name of the exception
in the except statement. If you are trapping multiple exceptions, you can have a variable follow the tuple of
the exception.

This variable receives the value of the exception mostly containing the cause of the exception. The variable
can receive a single value or multiple values in the form of a tuple. This tuple usually contains the error
string, the error number, and an error location.

Example
Following is an example for a single exception −

#!/usr/bin/python
# Define a function here.
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "The argument does not contain numbers\n", Argument
# Call above function here.
temp_convert("xyz");

61
This produces the following result −

The argument does not contain numbers


invalid literal for int() with base 10: 'xyz'

Raising an Exceptions
You can raise exceptions in several ways by using the raise statement. The general syntax for
the raise statement is as follows.

Syntax
raise [Exception [, args [, traceback]]]

Here, Exception is the type of exception (for example, NameError) and argument is a value for the exception
argument. The argument is optional; if not supplied, the exception argument is None.

The final argument, traceback, is also optional (and rarely used in practice), and if present, is the traceback
object used for the exception.

Example
An exception can be a string, a class or an object. Most of the exceptions that the Python core raises are
classes, with an argument that is an instance of the class. Defining new exceptions is quite easy and can be
done as follows −

def functionName( level ):


if level < 1:
raise "Invalid level!", level
# The code below to this would not be executed
# if we raise the exception

Note: In order to catch an exception, an "except" clause must refer to the same exception thrown either class
object or simple string. For example, to capture above exception, we must write the except clause as follows

try:
Business Logic here...
except "Invalid level!":
Exception handling here...
else:
Rest of the code here...

User-Defined Exceptions
Python also allows you to create your own exceptions by deriving classes from the standard built-in
exceptions.

Here is an example related to RuntimeError. Here, a class is created that is subclassed from RuntimeError.
This is useful when you need to display more specific information when an exception is caught.
62
In the try block, the user-defined exception is raised and caught in the except block. The variable e is used to
create an instance of the class Networkerror.

class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg

So once you defined above class, you can raise the exception as follows −

try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args

63

You might also like