Python
Python
1.Introduction
History of Python
Python was developed by Guido van Rossum in the late eighties and early nineties at the National
Research Institute for Mathematics and Computer Science in the Netherlands.
Python is derived from many other languages, including ABC, Modula-3, C, C++, ALGOL-68,
SmallTalk, and Unix shell and other scripting languages.
Python is now maintained by a core development team at the institute, although Guido van Rossum
still holds a vital role in directing its progress.
Python features
Python's feature highlights include:
Easy-to-learn: Python has relatively few keywords, simple structure and a clearly defined
syntax. This allows the student to pick up the language in a relatively short period of time.
A broad standard library: One of Python's greatest strengths is the bulk of the library is very
portable and cross-platform compatible on UNIX, Windows and Macintosh.
Interactive Mode: Support for an interactive mode in which you can enter results from a
terminal right to the language, allowing interactive testing and debugging of snippets of code.
Portable: Python can run on a wide variety of hardware platforms and has the same interface
on all platforms.
Expandable: You can add low-level modules to the Python interpreter. These modules enable
programmers to add to or customize their tools to be more efficient.
GUI Programming: Python supports GUI applications that can be created and ported to many
system calls, libraries and windows systems, such as Windows MFC, Macintosh and the X
Window system of Unix.
Scalable:
Python provides a better structure and support for large programs than shell scripting.
Apart from the above-mentioned features, Python has a big list of good features, few are
listed below:
It can be used as a scripting language or can be compiled to byte-code for building large
applications.
Very high-level dynamic data types and supports dynamic type checking.
Commenting in Python
Quotations in python
Multi-Line Statements
2.1Simple
2.2 Practise
program in Python
Problems
Note: Single and double quotes have no difference while using as a literal.
Line Indentation
One of the first cautions programmers encounter when learning Python is the fact that there are no
braces to indicate blocks of code for class and function definitions or flow control. Blocks of code are
denoted by line indentation, which is rigidly enforced.
The number of spaces in the indentation is variable, but all statements within the block must be
indented with same amount of spaces
Block 1:
if True:
print "True"
else:
print "False"
However, the second block in this example will generate an error:
Block 2:
if True:
print "Answer"
print "True"
else:
print "Answer"
print "False"
Thus, in Python all the continuous lines indented with similar number of spaces would form a block.
Note: Use 4 spaces for indentation as a good programming practice.
Multi-Line Statements
Statements in Python typically end with a new line. Python does, however, allow the use of the line
continuation character (\) to denote that the line should continue. For example:
total = first_one + \
second_two + \
third_three
Statements contained within the [], {} or () brackets do not need to use the line continuation character.
For example:
days = ['Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday']
Problem statement
Write a program to get the following output?
$
$$$
$
Solution
The output would be as shown below,
print ' $'
print '$$$'
print ' $'
w
www
w
www
The first and last lines have tab as space between them.
3.How to write multiple statements on a single line?
4.Write a program to provide following output
hello 'hi' bye 'why'
5.Write a program to show documented comments in the Program.
Please attempt these above problems.
Click here to download the solutions.
Input operations
Output operations
3.1 Input
3.2 Output
operations
Operations
3.3 Practise
Problems
In order to assign the string data to a variable string1 you would type
string1=raw_input('Enter input')
After user inputs data e.g.hello. The value of string1 is hello
2. input()
input() uses raw_input to read a string of data, and then attempts to evaluate it as if it were a Python
program, and then returns the value that results.
So entering 10 takes as an integer.But for raw_input() it is a string.
lambda expression:
Used to provide complex expressions to the input
lambda x:x+x,range(10)
Here expression converts x into x+x for all values in the range.
To provide complex expressions the input from user can be
map(lambda x: x*x, range(10))
Note: No inputted statement can span more than one line.
The difference between input() and raw_input() is shown in the example,
#!/usr/bin/python
x=raw_input('enter value')
print type(x)
Now,
if input x is 20 then the type(x) is a string.
#!/usr/bin/python
x=input('enter value')
print type(x)
Now,
if input x is 20 then the type(x) is an integer
Lets go through another example:
#For raw_input:
#!/usr/bin/python
str = raw_input("Enter your input: ");
print "Received input is : ", str
Execution:
Enter your input: Hello Python
Received input is : Hello Python
#For input:
#!/usr/bin/python
str = input("Enter your input: "); #complex program can be given as input.The input() function
evaluates it.
print "Received input is : ", str
Execution:
Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is : [10, 20, 30, 40]
If the bare print statement were not present, the above output would look like:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Omitting newlines
To avoid adding spaces and newlines between objects' output with subsequent print statements, you
can do one of the following:
Concatenation: Concatenate the string representations of each object, then later print the whole
thing at once.
print str(1)+str(2)+str(10+5j)+str(-0.999)
This will output the following:
12(10+5j)-0.999
Write function: You can make a shorthand for sys.stdout.write and use that for output.
import sys
write = sys.stdout.write
write('20')
write('05')
This will output the following:
2005
You may need sys.stdout.flush() to get that text on the screen quickly.
Examples:
Examples of output with Python 2.x:
print "Hello"
print "Hello", "world"
Separates the two words with a space.
print "Hello", 34
Prints elements of various data types, separating them by a space.
print "Hello " + 34
Throws an error as a result of trying to concatenate a string and an integer.
y=x*9.0/5.0 + 32
print ("The Fahrenheit value is:",y)
More on strings
Type conversions
4.1Basic
Data types
4.2 Variables
and Literals
4.3 More
on strings
4.4 Type
conversions
4.5 Practise
Problems
9.False
10.True
2.Number
In Python programming language, we have integer numbers, floating point numbers, and complex
numbers.
Here are some examples of these numbers,
integer: 103,-103
Keyword int is used for integers.
Long integer: 5678L (Long integers end with L)
Keyword long is used for long integer data type.
float: 103.0
Keyword float is used for float data type.
Complex : 3+4j
Keyword complex is used for complex data type.
3.String
Strings in programming are simply text, either individual characters,words, phrases, or complete
sentences.
Keyword str is used for string data type
Example:
string="Python"
4. None
There is another special data type - None. Basically, this data type means non existent, not known or
empty.
del
from
yield break
except
for
try
lambda
not
import
while as
elif
print class
global
exec
in
or
with
assert
else
if
pass
def
****************************************************************************************
Python is a dynamic language. It changes during time. The list of keywords may change in the future.
To check the keywords of python version that you are working on use this statement,
print keyword.kwlist
keyword.iskeyword(s) returns true if s is a keyword.
i = 42 + 0.11
i = "string"
print id(y)
157379912
y=2
print id(y)
157379924
You can see the change in id for y=2.
Note: id() is an operator used to find the location of variable.
Ans:P
Ans:P
print(string1[14])
Ans:L
print(string1[-1])
Ans:L
print(string1[4])
Ans:O
print(string1[15])
Ans:False
'P' in string1
Ans:True
'THO' in string1
'tho' in string1
Ans:True
Ans:False
String slicing
To cut a substring from a string is called string slicing. Here two indices are used separated by a
colon (:). A slice 3:7 means indices characters of 3rd, 4th, 5th and 6th positions. The second integer
index i.e. 7 is not included. You can use negative indices for slicing.
Consider, string1="PYTHON TUTORIAL"
See the following statements:
print(string1[0:5])
Ans:PYTHO
print(string1[3:7])
Ans:HON
print(string1[-4:-1])
Ans:RIA
Problem statement
#!/usr/bin/python
string1="hello friend welcome to python learning"
print string1[2:4]
print string1[-4:-1]
print string1[-1:-4]
print string1[:12]
print string1[12:]
output of above code will be?
Solution
The output would be as follows,
ll
nin
hello friend
welcome to python learning
a=4
b='string'
print a+b
what is the error in the above program? Please correct the error.
2. Find out the output and its type of the following statements.
int(5.0)
float(5)
str(7)
int("")
str(7.0)
float("5.0")
int("five")
3. Write a program to check a character in a string.
Note: Take a string of your wish.
4. Consider you have 22 apples,20 bananas,30 carrots. Create variables for each fruit and print the
output as follows,
I have 22 apples 20 bananas 30 carrots.
Note:In place of number use the variable.
5. Answer the following questions.
a) Which function used for the address of a variable?
b) Which function used to know whether a given variable is keyword?
c) Which function used to convert object into an expression string?
d) Which function used to find maximum size that integer can take?
Please attempt these above problems.
Click here to download the solutions.
Basic operators
Operator precedence
5.1Basic
operators
5.2Operator
precedence
5.3 Practise
Problems
Example:
Try the following example to understand all the arithmetic operators available in Python programming
language:
#!/usr/bin/python
a = 21
b = 10
c=0
c=a+b
print "Line 1 - Value of c is ", c
c=a-b
print "Line 2 - Value of c is ", c
c=a*b
print "Line 3 - Value of c is ", c
c=a/b
print "Line 4 - Value of c is ", c
c=a%b
print "Line 5 - Value of c is ", c
a=2
b=3
c = a**b
print "Line 6 - Value of c is ", c
a = 10
b=5
c = a//b
print "Line 7 - Value of c is ", c
When you execute the above program, it produces the following result:
Line 1 - Value of c is 31
Line 2 - Value of c is 11
Line 3 - Value of c is 210
Line 4 - Value of c is 2
Line 5 - Value of c is 1
Line 6 - Value of c is 8
Line 7 - Value of c is 2
2. Relational operators
Relational (comparison) operators always return a boolean result that indicates whether some
relationship holds between their operands. Most relational operators are symbols ( == != < > <= >=
)The table below lists the relational operators and their descriptions.
Assume variable a holds 10 and variable b holds 20, then:
Example:
Try following example to understand all the relational operators available in Python programming
language:
#!/usr/bin/python
a = 21
b = 10
c=0
if ( a == b ):
print "Line 1 - a is equal to b"
else:
print "Line 1 - a is not equal to b"
if ( a != b ):
print "Line 2 - a is not equal to b"
else:
print "Line 2 - a is equal to b"
if ( a <> b ):
print "Line 3 - a is not equal to b"
else:
print "Line 3 - a is equal to b"
if ( a < b ):
print "Line 4 - a is less than b"
else:
print "Line 4 - a is not less than b"
if ( a > b ):
print "Line 5 - a is greater than b"
else:
print "Line 5 - a is not greater than b"
a = 5;
b = 20;
if ( a <= b ):
print "Line 6 - a is either less than or equal to b"
else:
print "Line 6 - a is neither less than nor equal to b"
if ( b >= a ):
print "Line 7 - b is either greater than or equal to b"
else:
print "Line 7 - b is neither greater than nor equal to b"
When you execute the above program it produces the following result:
Line 1 - a is not equal to b
Line 2 - a is not equal to b
Line 3 - a is not equal to b
Line 4 - a is not less than b
Line 5 - a is greater than b
Line 6 - a is either less than or equal to b
Line 7 - b is either greater than or equal to b
3. Assignment operators
Assume variable a holds 10 and variable b holds 20, then:
Example:
Try following example to understand all the assignment operators available in Python programming
language:
#!/usr/bin/python
a = 21
b = 10
c=0
c=a+b
print "Line 1 - Value of c is ", c
c += a
print "Line 2 - Value of c is ", c
c *= a
print "Line 3 - Value of c is ", c
c /= a
print "Line 4 - Value of c is ", c
c =2
c %= a
print "Line 5 - Value of c is ", c
c **= a
print "Line 6 - Value of c is ", c
c //= a
print "Line 7 - Value of c is ", c
When you execute the above program, it produces the following result:
Line 1 - Value of c is 31
Line 2 - Value of c is 52
Line 3 - Value of c is 1092
Line 4 - Value of c is 52
Line 5 - Value of c is 2
Line 6 - Value of c is 2097152
Line 7 - Value of c is 99864
4. Bitwise operators
Bitwise operator works on bits and perform 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:
Example:
Try following example to understand all the bitwise operators available in Python programming
language:
#!/usr/bin/python
a = 60
# 60 = 0011 1100
b = 13
# 13 = 0000 1101
c=0
c = a & b;
# 12 = 0000 1100
# 61 = 0011 1101
# 49 = 0011 0001
c = a >> 2;
# 15 = 0000 1111
Example:
Try the following example to understand all the logical operators available in Python programming
language:
#!/usr/bin/python
a = 10
b = 20
c=0
if ( a and b ):
print "Line 1 - a and b are true"
else:
print "Line 1 - Either a is not true or b is not true"
if ( a or b ):
print "Line 2 - Either a is true or b is true or both are true"
else:
print "Line 2 - Neither a is true nor b is true"
a=0
if ( a and b ):
print "Line 3 - a and b are true"
else:
print "Line 3 - Either a is not true or b is not true"
if ( a or b ):
print "Line 4 - Either a is true or b is true or both are true"
else:
print "Line 4 - Neither a is true nor b is true"
if not( a and b ):
print "Line 5 - Either a is not true or b is not true"
else:
print "Line 5 - a and b are true"
When you execute the above program it produces the following result:
Line 1 - a and b are true
Line 2 - Either a is true or b is true or both are true
Line 3 - Either a is not true or b is not true
Line 4 - Either a is true or b is true or both are true
Line 5 - Either a is not true or b is not true
6. Membership operators
In addition to the operators discussed previously, Python has membership operators, which test for
membership in a sequence, such as strings, lists, or tuples. There are two membership operators
explained below:
Example:
Try following example to understand all the membership operators available in Python programming
language:
#!/usr/bin/python
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
print "Line 1 - a is available in the given list"
else:
print "Line 1 - a is not available in the given list"
if ( b not in list ):
print "Line 2 - b is not available in the given list"
else:
print "Line 2 - b is available in the given list"
a=2
if ( a in list ):
print "Line 3 - a is available in the given list"
else:
print "Line 3 - a is not available in the given list"
When you execute the above program it produces the following result:
Line 1 - a is not available in the given list
Line 2 - b is not available in the given list
Line 3 - a is available in the given list
7. Identity operators
Identity operators compare the memory locations of two objects. There are two Identity operators
explained below:
Example:
Try following example to understand all the identity operators available in Python programming
language:
#!/usr/bin/python
a = 20
b = 20
if ( a is b ):
print "Line 1 - a and b have same identity"
else:
print "Line 1 - a and b do not have same identity"
if ( id(a) == id(b) ):
print "Line 2 - a and b have same identity"
else:
print "Line 2 - a and b do not have same identity"
b = 30
if ( a is b ):
print "Line 3 - a and b have same identity"
else:
print "Line 3 - a and b do not have same identity"
if ( a is not b ):
print "Line 4 - a and b do not have same identity"
else:
print "Line 4 - a and b have same identity"
When you execute the above program it produces the following result:
Line 1 - a and b have same identity
Line 2 - a and b have same identity
Line 3 - a and b do not have same identity
Line 4 - a and b do not have same identity
Example:
Try the following example to understand operator precedence available in Python programming
language :
#!/usr/bin/python
a = 20
b = 10
c = 15
d=5
e=0
e = (a + b) * c / d
#( 30 * 15 ) / 5
# (30 * 15 ) / 5
# (30) * (15/5)
e = a + (b * c) / d;
# 20 + (150/5)
If statement
if...else statement
if...elif...else statement
Nested if
6.1Decision
making structure
6.2Practise
Problems
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.
1. If statement
The if statement of Python is similar to that of other languages. The if statement contains a logical
expression using which data is compared and a decision is made based on the result of the
comparison.
Syntax:
The syntax of an if statement in Python programming language is:
if expression:
statement(s)
If the boolean expression evaluates to true, then the block of statement(s) inside the if statement will
be executed. If boolean expression evaluates to false, then the first set of code after the end of the if
statement(s) will be executed.
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.
Example:
#!/usr/bin/python
var1 = 100
if var1:
print 1
print var1
var2 = 0
if var2:
print 2
print var2
print "Good bye!"
When the above code is executed, it produces the following result:
1
100
Good bye!
2. If...else statement
An else statement can be combined with an if statement. An else statement
contains the block of code that executes if the conditional expression in the if statement resolves to 0
or a false value.
The else statement is an optional statement and there could be at most only one else statement
following if.
Syntax:
The syntax of the if...else statement is:
if expression:
statement(s)
else:
statement(s)
Example:
#!/usr/bin/python
var1 = 100
if var1:
print "1 - Got a true expression value"
print var1
else:
print "1 - Got a false expression value"
print var1
var2 = 0
if var2:
print "2 - Got a true expression value"
print var2
else:
print "2 - Got a false expression value"
print var2
print "Good bye!"
When the above code is executed, it produces the following result:
1 - Got a true expression value
100
2 - Got a false expression value
0
Good bye!
3. If...elif...else statement
The elif statement allows you to check multiple expressions for truth value and execute a block of
code as soon as one of the conditions evaluates to true.
Like the else, the elif statement is optional. However, unlike else, for which there can be at most one
statement, there can be an arbitrary number of elif statements following an if.
The syntax of the if...elif statement is:
if expression1:
statement(s)
elif expression2:
statement(s)
elif expression3:
statement(s)
else:
statement(s)
Note: Core Python does not provide switch or case statements as in other languages, but we can use
if..elif...statements to simulate switch case as follows:
Example:
#!/usr/bin/python
var = 100
if var == 200:
print "1 - Got a true expression value"
print var
elif var == 150:
print "2 - Got a true expression value"
print var
elif var == 100:
print "3 - Got a true expression value"
print var
else:
print "4 - Got a false expression value"
print var
print "Good bye!"
When the above code is executed, it produces the following result:
3 - Got a true expression value
100
Good bye!
4. Nested if condition
There may be a situation when you want to check for another condition after a condition resolves to
true. In such a situation, you can use the nested if construct.
In a nested if construct, you can have an if...elif...else construct inside another if...elif...else construct.
Syntax:
The syntax of the nested if...elif...else construct may be:
if expression1:
statement(s)
if expression2:
statement(s)
elif expression3:
statement(s)
else
statement(s)
elif expression4:
statement(s)
else:
statement(s)
Example:
#!/usr/bin/python
var = 100
if var < 200:
print "Expression value is less than 200"
if var == 150:
print "Which is 150"
elif var == 100:
print "Which is 100"
elif var == 50:
print "Which is 50"
elif var < 50:
print "Expression value is less than 50"
else:
print "Could not find true expression"
print "Good bye!"
When the above code is executed, it produces following result:
Expression value is less than 200
Which is 100
Good bye!
Problem statement
Create a program with python that calculate the cost for shipping.
Solution
#!/usr/bin/python
total = int(raw_input('What is the total amount for your online shopping?'))
country = raw_input('Shipping within the US or Canada?')
if country == "US":
if total <= 50:
print "Shipping Costs $6.00"
elif total <= 100:
print "Shipping Costs $9.00"
elif total <= 150:
print "Shipping Costs $12.00"
else:
print "FREE"
if country == "Canada":
if total <= 50:
print "Shipping Costs $8.00"
elif total <= 100:
print "Shipping Costs $12.00"
elif total <= 150:
print "Shipping Costs $15.00"
else:
print "FREE"
While loop
for loop
break statement
continue statement
pass statement
7.1 Loop
statement
7.2 Loop
control statements
7.3 Problem
statement
7.4 Practise
Problems
Python programming language provides following types of loops to handle looping requirements:
1.
While loop
2.
for loop
3.
1. while loop
A while loop statement in Python programming language repeatedly executes a target statement as
long as a given condition is true. Unlike the for loop, there is no built-in end counter. It is up to the
programmer to make sure that the given condition stops being True at some point, or else the loop
will become an infinite loop.
Syntax:
The syntax of a while loop in Python programming language is:
while expression:
statement(s)
Here, statement(s) may be a single statement or a block of statements. The condition may be any
expression, and true is any non-zero value. The loop iterates while the condition is true.
When the condition becomes false, program control passes to the line immediately following the loop.
In Python, all the statements indented by the same number of character spaces after a programming
construct are considered to be part of a single block of code. Python uses indentation as its method of
grouping statements.
Flow Diagram:
Here, key point of the while loop is that the loop might not ever run. When the condition is tested and
the result is false, the loop body will be skipped and the first statement after the while loop will be
executed.
Example:
#!/usr/bin/python
a=0
while a < 5:
a += 1 # Same as a = a + 1
print (a)
And here is the output:
1
2
3
4
5
2. for loop
The for loop in Python has the ability to iterate over the items of any sequence, such as a list or a
string.
Syntax:
The syntax of a for loop look is as follows:
for iterating_var in sequence:
statements(s)
If a sequence contains an expression list, it is evaluated first. Then, the first item in the sequence is
assigned to the iterating variable iterating_var. Next, the statements block is executed. Each item in
the list is assigned to iterating_var, and the statement(s) block is executed until the entire sequence is
exhausted.
Flow Diagram:
Example:
#!/usr/bin/python
list = [2,4,6,8]
sum = 0
for num in list:
sum = sum + num
print ("The sum is: %d" % sum)
with the output simply being:
The sum is: 20
For / Range Loops:
The range() function creates an arithmetic progression as a list. The for loop can use range to loop
from a beginning integer to an ending integer. The default increment or step value is 1, but you can
set this to any positive or negative integer. Here is the syntax:
range([start,]stop[,step])
Example:
Here is some code to print out the first 9 numbers of the Fibonacci series:
#!/usr/bin/python
a=1
b=1
for c in range(1,10):
print (a)
n=a+b
a=b
b=n
print ("")
with the surprising output :
1
1
2
3
5
8
13
21
34
Everything that can be done with for loops can also be done with while loops but for loops give an
easy way to go through all the elements in a list or to do something a certain number of times.
Else statement used with loops
Python supports to have an else statement associated with a loop statement.
If the else statement is used with a for loop, the else statement is executed when the loop has
exhausted iterating the list.
If the else statement is used with a while loop, the else statement is executed when the condition
becomes false.
Example1: else with for loop
The following example illustrates the combination of an else statement with a for statement that
searches for prime numbers from 10 through 20.
#!/usr/bin/python
for num in range(10,20): #to iterate between 10 to 20
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
break statement
2.
continue
3.
pass
1.break statement
The break statement in Python terminates the current loop and resumes execution at the next
statement, just like the traditional break found in C.
The most common use for break is when some external condition is triggered requiring a hasty exit
from a loop. The break statement can be used in both while and for loops.
If you are using nested loops (i.e., one loop inside another loop), the break statement will stop the
execution of the innermost loop and start executing the next line of code after the block.
Syntax:
The syntax for a break statement in Python is as follows:
break
Example:
#!/usr/bin/python
for letter in 'Python':
if letter == 'h':
break
print 'Current Letter :', letter
When the above code is executed, it produces the following result:
Current Letter : P
Current Letter : y
Current Letter : t
2. continue statement
The continue statement in Python returns the control to the beginning of the while loop. The continue
statement rejects all the remaining statements in the current iteration of the loop and moves the
control back to the top of the loop.
The continue statement can be used in both while and for loops.
Syntax:
The syntax for a continue statement in Python is as follows:
continue
Example:
#!/usr/bin/python
for letter in 'Python':
if letter == 'h':
continue
print 'Current Letter :', letter
When the above code is executed, it produces the following result:
Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : o
Current Letter : n
3. 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.
The pass statement is a null operation; nothing happens when it executes. The pass is also useful in
places where your code will eventually go, but has not been written yet for ex. in stubs.
The syntax for a pass statement in Python is as follows:
pass
Example:
#!/usr/bin/python
for letter in 'Python':
if letter == 'h':
pass
print 'This is pass block'
print 'Current Letter :', letter
print "Good bye!"
When the above code is executed, it produces following result:
Current Letter : P
Current Letter : y
Current Letter : t
This is pass blocks
Current Letter : h
Current Letter : o
Current Letter : n
8.1Inbuilt
String Methods
8.2String
Formatting Operations
8.3Problem
Statement
8.4 Practise
Problems
Output:
string
4. str.count(sub[, start[, end]])
Returns the number of non-overlapping occurrences of substring sub in the range [start, end].
Optional arguments start and end are interpreted as in string slice notation.
Example:
#!/usr/bin/python
a="String string String string String"
print a.count("String")
Output:
3
5. str.index(sub[, start[, end]])
Returns the lowest index in the string where substring sub is found, such that sub is contained in the
slice s[start:end].Optional arguments start and end are interpreted as in slice notation.
Example:
#!/usr/bin/python
a="String string String string String"
print (a.index("String",3))
Output:
14
6. str.endswith(suffix[, start[, end]])
Returns True if the string ends with the specified suffix, otherwise return False.
suffix can also be a tuple of suffixes to look for.With optional start, test beginning at that position. With
optional end, stop comparing at that position.
Example 1:
#!/usr/bin/python
a="String string String string String"
print (a.endswith("String"))
Output:
True
Example 2:
#!/usr/bin/python
a="String string String string String"
print (a.endswith("String",0,27))
Output:
False
7. str.expandtabs([tabsize])
Returns a copy of the string where all tab characters are replaced by one or more spaces, depending
on the current column and the given tab size. Tab positions occur every tabsize characters (default is
8, giving tab positions at columns 0, 8, 16 and so on). To expand the string, the current column is set
to zero and the string is examined character by character. If the character is a tab (\t), one or more
space characters are inserted in the result until the current column is equal to the next tab position.
(The tab character itself is not copied.) If the character is a newline (\n) or return (\r), it is copied and
the current column is reset to zero.Any other character is copied unchanged and the current column is
incremented by one regardless of how the character is represented when printed.
Example:
#!/usr/bin/python
a="String\tstring\tString\tstring\tString"
print (1. +a)
print (2. +a.expandtabs(1))
Output:
1. String
string
String
string
String
Example:
#!/usr/bin/python
a="String string String string String"
print (a.find("string"))
Output:
7
9. str.isalnum()
Returns true if all characters in the string are alphanumeric and there is at least one character, false
otherwise.
Example:
#!/usr/bin/python
a="String string String string String3"
b="StringstringStringstringString3"
print (a.isalnum())
print (b.isalnum())
Output:
False
True
10. str.isalpha()
Returns true if all characters in the string are alphabetic and there is at least one character, false
otherwise.
Example:
#!/usr/bin/python
a="StringstringStringstringString3"
b="StringstringStringstringString"
print (a.isalpha())
print (b.isalpha())
Output:
False
True
11. str.isdigit()
Returns true if all characters in the string are digits and there is at least one character, false
otherwise.
Example:
#!/usr/bin/python
a="StringstringStringstringString3"
b="33434"
print (a.isdigit())
print (b.isdigit())
Output:
False
True
12. str.title()
Returns a titlecased version of the string where words start with an uppercase character and the
remaining characters are lowercase.
Example:
#!/usr/bin/python
a="string string string string string"
print (a.title())
Output:
String String String String String
13. str.islower()
Returns true if all cased characters in the string are lowercase and there is at least one cased
character, false otherwise.
Example:
#!/usr/bin/python
a="string String string string string"
print (a.islower())
Output:
False
14. str.isspace()
Returns true if there are only whitespace characters in the string and there is at least one character,
false otherwise.
Example:
#!/usr/bin/python
b=" "
print (b.isspace())
Output:
True
15. str.istitle()
Returns true if the string is a titlecased string and there is at least one character, for example
uppercase characters may only follow uncased characters and lowercase characters only cased
ones. Return false otherwise.
Example:
#!/usr/bin/python
a="string String string string string"
print (a.istitle())
Output:
False
16. str.isupper()
Returns true if all cased characters in the string are uppercase and there is at least one cased
character, false otherwise.
Example:
#!/usr/bin/python
a="string String string string string"
print (a.isupper())
Output:
False
17. str.partition(sep)
Split the string at the first occurrence of sep, and return a 3-tuple containing the part before the
separator, the separator itself, and the part after the separator. If the separator is not found, return a
3-tuple(will be discussed in further course)containing the string itself, followed by two empty strings.
Example:
#!/usr/bin/python
a="string String string string string"
print (a.partition(" "))
Output:
('string', ' ', 'String string string string')
18. str.replace(old, new[, count])
Returns a copy of the string with all occurrences of substring old replaced by new. If the optional
argument count is given, only the first count occurrences are replaced.
Example:
#!/usr/bin/python
a="string String1 string2 string3 string"
print (a.replace("string","wing"))
Output:
wing String1 wing2 wing3 wing
Example:
#!/usr/bin/python
a="string String1 string2 string3 string"
print (a.replace("string","wing",1))
Output:
wing String1 string2 string3 string
19. str.strip([chars])
Returns a copy of the string with the leading and trailing characters removed. The chars argument is a
string specifying the set of characters to be removed. If omitted or None, the chars argument defaults
to removing white space.
Example:
#!/usr/bin/python
a=" strip "
print (a.strip())
Output:
strip
20. str.split([sep[, maxsplit]])
Returns a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most
maxsplit splits are done (thus, the list will have at most maxsplit+1 elements). If maxsplit is not
specified or -1, then there is no limit on the number of splits (all possible splits are made).
If sep is given, consecutive delimiters are not grouped together and are deemed to delimit empty
strings (for example, '1,,2'.split(',') returns ['1', '', '2']). The sep argument may consist of multiple
characters (for example, '1<>2<>3'.split('<>') returns ['1', '2', '3']). Splitting an empty string with a
specified separator returns [''].
If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive
whitespace are regarded as a single separator, and the result will contain no empty strings at the start
or end if the string has leading or trailing whitespace. Consequently, splitting an empty string or a
string consisting of just whitespace with a None separator returns [].
For example, ' 1 2 3 '.split() returns ['1', '2', '3'], and ' 1 2 3 '.split(None, 1) returns ['1', '2 3 '].
21. str.startswith(prefix[, start[, end]])
Returns True if string starts with the prefix, otherwise return False. prefix can also be a tuple of
prefixes to look for. With optional start, test string beginning at that position. With optional end, stop
comparing string at that position.
Example 1:
#!/usr/bin/python
a="String string String string String"
print (a.startswith("String"))
Output:
True
22. str.swapcase()
Returns a copy of the string with uppercase characters converted to lowercase and vice versa.
Example:
#!/usr/bin/python
a="string String string string"
print (a.swapcase())
Output:
STRING sTRING STRING STRING
23. str.translate(table[, deletechars])
Returns a copy of the string where all characters occurring in the optional argument deletechars are
removed, and the remaining characters have been mapped through the given translation table, which
must be a string of length 256.
Example:
#!/usr/bin/python
a="read this text"
print a.translate(None,'aeiou')
Output:
rd ths txt
Example1:
#!/usr/bin/python
print "%i, %f, %e" % (1000, 1000, 1000)
Output:
1000, 1000.000000, 1.000000e+03
Example2:
pwd='secret'
uid='student'
print "%s is not a good password for %s" % (pwd, uid)
Output:
secret is not a good password for student
2. format() operator
format() operator supports different operations as shown below:
2.1 Accessing arguments by position
Let us understand this with an example,
print 'hello {0}, {1}, {2}'.format('a', 'b', 'c')
It prints : hello a,b,c
Here,we are assigning a,b and c to the string that we want to format.
Let us take another example,
print 'hello {2}, {1}, {0}'.format('a', 'b', 'c')
Output would be hello c,b,a as we changed the positions of indices in the string.
Note: Argument indices can be repeated.
2.2 Accessing arguments by name
The formatting can also be done with name as index.
Example:
#!/usr/bin/python
print 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
Results the output as shown,
Coordinates: 37.24N, -115.81W
2.3 Accessing arguments attributes
For example c=3-5j
print ('The complex number {0} is formed from the real part {0.real} and the imaginary part
{0.imag}.').format(c)
We can access the attributes of complex number i.e., real and imaginary part as shown in above
example.
Lists
Tuples
Sets
Dictionaries
9.1Lists
9.2Tuples
9.3Differences
9.4Dictionaries
9.5Sets
9.6Problem
statement
9.7Practise
Problems
9.1. Lists
Overview
The list type is a container that holds a number of other objects, in a given order. The list type
implements the sequence protocol, and also allows you to add and remove objects from the
sequence.
Creating Lists
To create a list, put a number of expressions in square brackets:
L=[]
L = [expression, ...]
Example:
#!/usr/bin/python
L=[1,2,3,4,5,6,7,8]
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
listinlist=[1,2,[3,4,5],4,5]
Like string indices, list indices start at 0, and lists can be sliced, concatenated and so on.
Accessing Lists
Lists implement the standard sequence interface; len(L) returns the number of items in the list, L[i]
returns the item at index i (the first item has index 0), and L[i:j] returns a new list, containing the
objects between i and j.
Example:
list1 = ['india','australia','south africa','west indies']
print list1[0],"has brighter chances to win the world cup"
print "But may face competition from",list1[2]
Output of the program is:
india has brighter chances to win the world cup
But may face competition from south africa
Modifying Lists
We 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. Following is a
simple example:
Example:
#!/usr/bin/python
List1=['a','b',1,'c']
List1[2]='d'
print List1
Built-in functions
Python includes the following list functions:
1.cmp(list1, list2)
Compares elements of both lists.
2.len(list)
Gives the total length of the list.
3.max(list)
Returns item from the list with max value.
4.min(list)
Returns item from the list with min value.
5.list(seq)
Converts a tuple into list.
Built-in methods
Python includes following list methods
1.list.append(obj)
Appends object obj to list
2.list.count(obj)
Returns count of how many times obj occurs in list
3.list.extend(seq)
Appends the contents of seq to list
4.list.index(obj)
Returns the lowest index in list that obj appears
5.list.insert(index, obj)
Inserts object obj into list at offset index
6.list.pop(obj=list[-1])
Removes and returns last object or obj from list
7.list.remove(obj)
Removes object the obj from list
8.list.reverse()
Reverses the objects of list in place
9.list.sort()
Sorts the objects of list
9.2. Tuples
Overview
A tuple is a sequence of immutable Python objects. Tuples are sequences, just like lists. The only
difference is that tuples can't be changed i.e., tuples are immutable and tuples use parentheses and
lists use square brackets.
Creating tuples
Creating a tuple is as simple as putting different comma-separated values and optionally you can put
these comma-separated values between parentheses also.
For example:
tup1 = ('p', 'c', 19, 20)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
tup4 = '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 to differentiate it with other data types:
tup1 = (50,)
Accessing 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. Following is a simple example:
#!/usr/bin/python
t=(1,2,3)
print t[0]
print t+(t[0],)
Output would be:
1
(1, 2, 3, 1)
Modifying 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.
Example:
#!/usr/bin/python
t=(1,2,3,4)
t[0]=10
t2=t+t
1.cmp(tuple1, tuple2)
Compares elements of both tuples.
2.len(tuple)
Gives the total length of the tuple.
3.max(tuple)
Returns item from the tuple with max value.
4.min(tuple)
Returns item from the tuple with min value.
5.tuple(seq)
Converts a list into tuple
# [3, 2]
a = (1,2)
a[0] = 3
# Error
that also mean that you can't delete element or sort tuple.
At the same time you could add new element to both list and tuple with the only difference that you
will change id of the tuple by adding element
a = (1,2)
b = [1,2]
id(a)
# 140230916716520
id(b)
# 748527696
a += (3,)
# (1, 2, 3)
b += [3]
# [1, 2, 3]
id(a)
# 140230916878160
id(b)
# 748527696
Usage
3. Appending to list and tuple
a = (1,2)
b = [1,2]
a.append(3)
b.append(3)
#[1,2,3]
# OK
c = {b: 1}
# Error
9.4. Dictionaries
A dictionary is mutable and is another container type that can store any number of Python objects,
including other container types. Dictionaries consist of pairs (called items) of keys and their
corresponding values.
Python dictionaries are also known as associative arrays or hash tables. The general notation of a
dictionary is as follows:
diction = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
The things on left side of : are keys and right side are values.
Note:
Keys of a particular dictionary are unique 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.
Operations on dictionaries
Consider below notation as an example,
d={1:'one',2:'two',3:'three',4:'four'}
Now to extract keys from dictionary Keys() operator can be used as shown below
d.keys()
Then it results output as shown
[1,2,3,4]
In the same way to extract values from dictionary values() can be used as shown
d.values()
Then it results output as shown
['one','two','three','four']
1. Adding new elements to a dictionary
To add new element to a dictionary assign a value by providing a key as shown
d[5]='five'
now,d contains five pairs of keys and values.
6 in d
4. Copying a dictionary
A dictionary can be copied with method copy()
Example:
#!/usr/bin/python
d={1:'one',2:'two',3:'three',4:'four',5:'five'}
w=d.copy()
print w
Output would be,
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
5. Merging two dictionaries
What about concatenating dictionaries, like we did with lists? There is something similar for
dictionaries: the update method update() merges the keys and values of one dictionary into another,
overwriting values of the same key:
Example:
#!/usr/bin/python
d={1:'one',2:'two',3:'three',4:'four',5:'five'}
w={2:'to',8:'eight'}
d.update(w)
print d
Output would be,
{1: 'one', 2: 'to', 3: 'three', 4: 'four', 5: 'five', 8: 'eight'}
6. Clearing contents of dictionary
The content of a dictionary can be cleared with the method clear(). The dictionary is not deleted, but
set to an empty dictionary:
Example:
#!/usr/bin/python
d={1:'one',2:'two',3:'three',4:'four',5:'five'}
d.clear()
print d
Output would be
{}
7. Connection between Lists and Dictionaries
If we have a dictionary
{"list":"List", "dictionary":"dict", "function":"Func"}
9.5. Sets
A set is a dictionary with no values. It has only unique keys. Its syntax is similar to that for a
dictionary. But we omit the values,and can use complex,powerful set logic.
1. Creating a set
General syntax for set creation is as follows:
set1={'a','b','c'}
We can also create a set using set() function by providing parameters as list.
Example:
set1=set([1,2])
Note : Use set() operator for creating empty set ,variable with empty {} will be considered as a
dictionary.
2. Modifying sets
This example explains about the usage of sets.
#!/usr/bin/python
set1 = set()
set1.add("cat")
''' Adds a single member
(We can't add several members using add operator)
'''
set1.update(["dog", "mouse"]) # Adds several members
if "cat" in set1:
# Membership test
set1.remove("cat")
# Iteration on sets
print item
print "Item count:", len(set1) # size of set1 is printed as output
len(set1) == 0
# Intersection of sets
# Union of sets
set41=set1.union(set2)
#same as above
# Set difference
set1.issubset(set2)
#same as set1<=set2
Defining a function
Calling a function
Pass by reference
Function arguments
Return statement
Scope of variables
Recursion
10.1Functions
10.2Pass
in Python
by reference
10.3Function
10.4Return
arguments
10.5Problem
statement
10.6Practise
Problems
Reuse of code
Information hiding
Functions in Python are first-class citizens. It means that functions have equal status with other
objects in Python. Functions can be assigned to variables, stored in collections or passed as
arguments. This brings additional flexibility to the language.
There are two basic types of functions. Built-in functions and user defined ones. The built-in functions
are part of the Python language. Examples are: dir(), len() or abs(). The user defined functions are
functions created with the def keyword.
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 behaviour and you need to inform them in the same order
that they were defined.
Example:
here is a function that prints the words "hello" on screen, and then returns the number '1234' to the
main program:
#!/usr/bin/python
def hello():
print "hello"
return 1234
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 hello() function:
# Below is the function
def hello():
print "hello"
return 1234
# And here is the function being used
print hello()
When the above code is executed, it produces the following result:
hello
1234
Accessing python documented comments
We can access the documented comments by using __doc__ attribute as shown below,
def func(param):
'''This is a documented function
Required arguments
Keyword arguments
Default arguments
Variable-length arguments
1. 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 would give a
syntax error as follows:
def printme( str ):
"This prints a passed string into this function"
print str;
return;
printme();
When the above code is executed, it produces the following result:
TypeError: printme() takes exactly 1 argument (0 given)
2. Keyword arguments:
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
def printme( str ):
"This prints a passed string into this function"
print str;
return;
printme( str = "My string");
Name: miki
Age 35
4. 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-length arguments and are not named in the function
definition, unlike required and default arguments.
The general 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 will hold the values of all non keyword variable
arguments. This tuple remains empty if no additional arguments are specified during the function call.
Following is a simple example:
#!/usr/bin/python
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
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
Global variables
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:
name = "Jack"
def f():
name = "Robert"
print "Within function", name
print "Outside function", name
f()
A variable defined in a function body has a local scope. It is valid only within the body of the function.
Output will be:
Outside function Jack
Within function Robert
By default, we can get the contents of a global variable inside the body of a function. But if we want to
change a global variable in a function, we must use the global keyword.
Recursion
We know that in Python, a function can call other functions. It is even possible for the function to call
itself. These type of construct are termed as recursive functions.
Following is an example of recursive function to find the factorial of an integer. Factorial of a number
is the product of all the integers from 1 to that number. For example, the factorial of 6 (denoted as 6!)
is 1*2*3*4*5*6 = 720.
#!/usr/bin/python
def fact(x):
if x == 1:
return 1
else:
return (x * fact(x-1))
Import statement
from...import statement
from...import * statement
11.1Import
Statement
11.2Problem
statement
11.3Practise
Problems
An ordinary module
A package
Bind information about this external item to a variable local to the current module.
Code in the current module will then use this local-module variable to interact with the external item
Python provides at least three different ways to import modules. You can use the import statement,
the from statement, or the built-in__import__function.
These are:
import x -- imports the module X, and creates a reference to that module in the current
namespace. x may be a module or package
from x import b imports the module X, and creates references in the current namespace to the
given objects. Or in other words, you can now use a in your program. x may be a module or
package; b can be a contained module or object (class, function etc.)
From x import * - imports the module X, and creates references in the current namespace to all
public objects defined by that module
Finally, X = __import__(X) works like import X, with the difference that you
import math
content = dir(math)
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.
Directories in Python
12.1Opening
12.2Reading
12.3Renaming
12.4Directories
in Python
12.5Problem
statement
12.6Practise
Problems
Description
file.closed
file.mode
file.name
file.softspace
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 "Soft space flag : ", fo.softspace
This would produce the following result:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Soft space flag : 0
3. 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:
# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
# Close opened file
fo.close()
This would produce the following result:
Name of the file: foo.txt
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 have created above.
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opened file
fo.close()
This would produce the following result:
Read String is : Python is
3. 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 offset argument 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's take a file foo.txt, which we have created above.
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
EXAMPLE:
Following is the example to give current directory:
import os
# This would give location of the current directory
os.getcwd()
4. 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" )
Exception
Handling exceptions
Raising exceptions
13.1Exception
13.2Raising
13.3Problem
13.4Practise
statement
Problems
13.1. Exception
What is Exception?
Even if a statement or expression is syntactically correct, it may cause an error when an attempt is
made to execute it. Errors detected during execution are called exceptions and are not unconditionally
fatal: you will soon learn how to handle them in Python programs. Most exceptions are not handled by
programs, however, and result in error messages as shown here:
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
The last line of the error message indicates what happened. Exceptions come in different types, and
the type is printed as part of the message: the types in the example are ZeroDivisionError, NameError
and TypeError. The string printed as the exception type is the name of the built-in exception that
occurred. This is true for all built-in exceptions, but need not be true for user-defined exceptions
(although it is a useful convention). Standard exception names are built-in identifiers (not reserved
keywords).
The rest of the line provides detail based on the type of exception and what caused it.
The preceding part of the error message shows the context where the exception happened, in the
form of a stack traceback. In general it contains a stack traceback listing source lines; however, it will
not display lines read from standard input.
Built-in Exceptions lists the built-in exceptions and their meanings.
Handling exceptions
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:
#!/usr/bin/python
try:
You do your operations here;
......................
except Exception1:
If there is Exception1, then execute this block.
except Exception2:
If there is Exception2, 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.
EXAMPLE:
Here is simple example, which opens a file and writes the 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 will produce the following result:
Written content in the file successfully.
EXAMPLE:
Here is one more simple example, which tries to open a file where you do not have permission to
write in the file, 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 will produce 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:
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.
Example:
# import module sys to get the type of exception
#!/usr/bin/python
import sys
while True:
try:
x = int(input("Enter an integer: "))
r = 1/x
break
except:
print("Oops!",sys.exc_info()[0],"occured.")
print("Please try again.")
print()
print("The reciprocal of",x,"is",r)
Here is a sample run of this program.
Enter an integer: 1.3
Oops! <class 'ValueError'> occured.
Please try again.
Enter an integer: 0
Oops! <class 'ZeroDivisionError'> occured.
Please try again.
Enter an integer: 2
The reciprocal of 2 is 0.5
In this program, we loop until the user enters an integer that has a valid reciprocal. The portion that
can cause exception is placed inside try block. If no exception occurs, except block is skipped and
normal flow continues. But if any exception occurs, it is caught by the except block. Here, we print the
name of the exception using ex_info() function inside sys module and ask the user to try again. We
can see that the values 'a' and '1.3' causes ValueError and '0' causes ZeroDivisionError.
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.
Example:
#!/usr/bin/python
try:
f = open('integers.txt')
s = f.readline()
i = int(s.strip())
except (IOError, ValueError):
print("An I/O error or a ValueError occurred")
except:
print("An unexpected error occurred")
raise
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.
......................
Note that you can provide except clause(s), or a finally clause, but not both. You can not 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:
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 are writing 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 will receive 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");
This would produce the following result:
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 sub classed from RuntimeError.
This is useful when you need to display more specific information when an exception is caught.
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 your exception as follows:
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
Methods
14.1Classes
and objects
14.2Methods
14.3Python
memory management
14.4Principles
of object orientation
14.5Problem
statement
14.6Practise
Problems
14.7Reference
Links
14.2. Methods
A function defined in a class is called a "method". Methods have access to all the data contained on
the instance of the object. they can access and modify anything previously set on self (discussed in
1.2.2.4). Because they use self, they require an instance of the class in order to be used. For this
reason, they're often referred to as "instance methods".
Constructor __init__
The __init__ method is run as soon as an object of a class is instantiated. Its aim is to initialize the
object. While creating an instance we need some values for internal data.
Example of class with __init__ method
#!/usr/bin/python
class Coordinate(object):
def __init__(self,x,y):
self.x=x
self.y=y
The . operator is used to access an attribute of an object. So the __init__ method above is defining
two attributes for new Coordinate object x and y.
Now,c=Coordinate(3,4)
print c.x,c.y
Prints 3 4 as output
Invoking attributes and methods
Syntax to invoke attribute:
object.attribute
Syntax to invoke method:
object.method()
User defined methods
User defined methods are same as function definition but must be defined inside a class.
Example of class with methods:
#!/usr/bin/python
class Rectangle:
def __init__(self,x,y):
self.x = x
self.y = y
def area(self):
return self.x * self.y
def perimeter(self):
return 2 * self.x + 2 * self.y
This example has methods area and perimeter that are used to calculate area and perimeter of an
object of the class Rectangle.
self
Each method in a class definition begins with a reference to the instance object. It is by convention
named self i.e., methods class access data via self.
For example above(Rectangle class),
instantiate object
r=Rectangle(4,5)
r.area() #area() method uses x and y attributes using self
Self in Python works as a variable of function but it won't invoke data.
Form and object for a class
Class includes two members form and object.
The following example can explain the difference between form and object for a class.
#!/usr/bin/python
Class A:
i=123
#It is a form
def __init__(self):
self.i=12345
print A.i
#It is a form
print A().i
#It is an object
Output would be
123
12345
Destructor
Destructor method is used to delete an object created by initializing constructor.
It is called when the instance is about to be destroyed.
The following example shows a class with constructor and destructor:
#!/usr/bin/python
class Greeting:
def __init__(self, name):
self.name = name
def __del__(self):
print "Destructor started"
def SayHello(self):
print "Hello", self.name
>>>del x1
>>>del x2
Destructor started
Here,If you observe destructor is called only after reference count of objects reaches zero.
Note: special methods (like ex: __init__ , __del__) start and end with two underscores.
make_cycle()
Because make_cycle() creates an object l which refers to itself, the object l will not automatically be
freed when the function returns.
This will cause the memory that l is using to be held onto until the Python garbage collector is
invoked.
Automatic Garbage Collection of Cycles
Because reference cycles are take computational work to discover, garbage collection must be a
scheduled activity. Python schedules garbage collection based upon a threshold of object allocations
and object deallocations. When the number of allocations minus the number of deallocations are
greater than the threshold number, the garbage collector is run. One can inspect the threshold for
new objects (objects in Python known as generation 0 objects) by loading the gc module and asking
for garbage collection thresholds:
import gc
print "Garbage collection thresholds: %r" % gc.get_threshold()
Garbage collection thresholds: (700, 10, 10)
Here we can see that the default threshold on the above system is 700. This means when the number
of allocations vs. the number of deallocations is greater than 700 the automatic garbage collector will
run.
Automatic garbage collection will not run if your Python device is running out of memory; instead your
application will throw exceptions, which must be handled or your application crashes. This is
aggravated by the fact that the automatic garbage collection places high weight upon the NUMBER of
free objects, not on how large they are. Thus any portion of your code which frees up large blocks of
memory is a good candidate for running manual garbage collection.
Manual Garbage Collection
For some programs, especially long running server applications or embedded applications running on
a Digi Device automatic garbage collection may not be sufficient. Although an application should be
written to be as free of reference cycles as possible, it is a good idea to have a strategy for how to
deal with them. Invoking the garbage collector manually during opportune times of program execution
can be a good idea on how to handle memory being consumed by reference cycles.
The garbage collection can be invoked manually in the following way:
import gc
gc.collect()
gc.collect() returns the number of objects it has collected and deallocated. You can print this
information in the following way:
import gc
collected = gc.collect()
print "Garbage collector: collected %d objects." % (collected)
def make_cycle():
l={}
l[0] = l
def main():
collected = gc.collect()
print "Garbage collector: collected %d objects." % (collected)
print "Creating cycles..."
for i in range(10):
make_cycle()
collected = gc.collect()
print "Garbage collector: collected %d objects." % (collected)
if __name__ == "__main__":
ret = main()
sys.exit(ret)
In general there are two recommended strategies for performing manual garbage collection: timebased and event-based garbage collection. Time-based garbage collection is simple: the garbage
collector is called on a fixed time interval. Event-based garbage collection calls the garbage collector
on an event. For example, when a user disconnects from the application or when the application is
known to enter an idle state.
Recommendations
Which garbage collection technique is correct for an application? It depends. The garbage collector
should be invoked as often as necessary to collect cyclic references without affecting vital application
performance. Garbage collection should be a part of your Python application design process.
1) Do not run garbage collection too freely, as it can take considerable time to evaluate every memory
object within a large system. For example, one team having memory issues tried calling gc.collect()
between every step of a complex start-up process, increasing the boot time by 20 times (2000%).
Running it more than a few times per day - without specific design reasons is likely a waste of device
resources.
2) Run manual garbage collection after your application has completed start up and moves into
steady-state operation. This frees potentially huge blocks of memory used to open and parse file, to
build and modify object lists, and even code modules never to be used again. For example, one
application reading XML configuration files was consuming about 1.5MB of temporary memory during
the process. Without manual garbage collection, there is no way to predict when that 1.5MB of
memory will be returned to the python memory pools for reuse.
3) Consider manually running garbage collection either before or after timing-critical sections of code
to prevent garbage collection from disturbing the timing. As example, an irrigation application might sit
idle for 10 minutes, then evaluate the status of all field devices and make adjustments.Since delays
during system adjustment might affect field device battery life, it makes sense to manually run
garbage collection as the gateway is entering the idle period after the adjustment process - or run it
every sixth or tenth idle period. This insures that garbage collection won't be triggered automatically
during the next timing-sensitive period.
Inheritance Syntax:
class Derivedclass(Baseclass):
Example:
Consider a class Shape as shown below,
#!/usr/bin/python
class Shape:
def __init__(self,x,y):
self.x = x
self.y = y
self.description = "This shape has not been described yet"
self.author = "Nobody has claimed to make this shape yet"
def area(self):
self.parameters = parameters
mri_data = MRIDataset(data=[1,2,3])
2. Multiple inheritance
Multiple inheritance is possible in Python. A class can be derived from more than one base classes.
The syntax for multiple inheritance is similar to single inheritance.
Syntax:
class Base1:
...
class Base2:
...
class MultiDerived(Base1, Base2):
...
Here MultiDerived class uses features of Base2 and Base1.Base1 methods are checked first and
then Base2 functions follow.
3. Multilevel Inheritance
On the other hand, we can inherit form a derived class. This is also called multilevel inheritance.
Multilevel inheritance can be of any depth in Python.
An example is given below,
#!/usr/bin/python
class Base:
pass
class Derived1(Base):
pass
class Derived2(Derived1):
pass
Here Derived2 can use features of Base and Derived1 along with features of Derived2.
4. Encapsulation
Encapsulation is the packing of data and functions into a single component.
The features of encapsulation are supported using classes in most object-oriented programming
languages, although other alternatives also exist.
It allows selective hiding of properties and methods in an object by building an impenetrable wall to
protect the code from accidental corruption.
It is a language mechanism for restricting access to some of the object's components. A language
construct that facilitates the bundling of data with the methods (or other functions) operating on that
data.
The accessibility of data is done by providing access specifiers. The access specifiers we have in
programming language are public,private,protected.
In python programming language everything we write is public that means every class can access the
variables/methods as they are public.
To make the accessibility hidden from the classes other than it is defined we should make it as a
private variable/method. To restrict its access to specified classes we make them as protected.
The access specifiers' syntax(check the comments) is explained with following examples,
#!/usr/bin/python
class Person:
def __init__(self):
self.a='hari'
#public variable
self.__b='siddartha'
self._c='hyd'
#private variable
#protected variable
Now let us check how they are accessible with below example,
#!/usr/bin/python
class Person:
def __init__(self):
self.a='hari'
#public variable
self.__b='siddartha'
self._c='hyd'
def printName(self):
print self.a
print self.__b
print self._c
#private variable
#protected variable
P=Person()
P.a
P.b
P.c
P.__b
P._c
Check what happens with above code.
Here you can't access P.b,P.c,P.__b.
To access private variable the syntax to be followed is _ClassName__variable or
_ClassName__function(). So,we can't access them as object.__variable or object.__function().
5. Polymorphism
Another important attribute of an object-oriented programming language is polymorphism: the ability
to use the same syntax for objects or methods of different types. (Strictly speaking, this is ad-hoc
polymorphism.) For example, in Python, the square bracket operator is used to perform indexing of
various sequence types (list[3], dict["foo"]); polymorphism allows us to define our own types, as
classes, that emulate built-in Python types like sequences and which therefore can use e.g. square
brackets for indexing.
This example describes about polymorphism,
#!/usr/bin/python
class Animal:
def Name(self):
pass
def Sleep(self):
print 'sleep'
def MakeNoise(self):
pass
class Dog(Animal):
def Name(self):
print 'I am a dog'
def MakeNoise(self):
print 'Woof'
class Cat(Animal):
def Name(self):
print 'I am cat'
def MakeNoise(self):
print 'Meow'
class Lion(Animal):
def Name(self):
print 'I am a lion'
def MakeNoise(self):
print 'Roar'
class TestAnimals:
def PrintName(self,animal):
animal.Name()
def GotoSleep(self,animal):
animal.Sleep()
def MakeNoise(self,animal):
animal.MakeNoise()
TestAnimals=TestAnimals()
dog=Dog()
cat=Cat()
lion=Lion()
TestAnimals.PrintName(dog)
TestAnimals.GotoSleep(dog)
TestAnimals.MakeNoise(dog)
TestAnimals.PrintName(cat)
TestAnimals.GotoSleep(cat)
TestAnimals.MakeNoise(cat)
TestAnimals.PrintName(lion)
TestAnimals.GotoSleep(lion)
TestAnimals.MakeNoise(lion)
As you can see same methods are repeated in different classes, It is called method overloading.
The output of above program is,
I am a dog
sleep
Woof
I am cat
sleep
Meow
I am a lion
sleep
Roar
Suppose you've created a Vector class to represent two-dimensional vectors, what happens when
you use the plus operator to add them? Most likely Python will not work as desired.
You could, however, define the __add__ method in your class to perform vector addition and then the
plus operator would behave as per expectation. This is called as operator overloading.
EXAMPLE:
#!/usr/bin/python
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2
Now check the working of the code with two sample accounts as shown below,
obj=Account('siddu',1032,17000)
print (obj.balance())
obj2=Account('sid',1435,20000)
print (obj2.balance())
obj2.transfer(obj,2000)
print (obj.balance())
print (obj2.balance())
The answer would be,
17000
20000
19000
18000