GE8151 Notes - by WWW - EasyEngineering.net 2
GE8151 Notes - by WWW - EasyEngineering.net 2
net
ww
w.E
a syE
ngi
nee
rin
g.n
et
ALGORITHM
Definition:
Algorithm is defined as “a sequence of instructions designed in such a way that if the
instructions are executed in the specified sequence, the desired result will be obtained”.
It is also defined as “any problem whose solution can be expressed in a list of executable
instruction”.
Set of step-by-step instructions that perform a specific task or operation
ww
Natural language NOT programming language.
Algorithm is the sequence of steps to be performed in order to solve a problem by the
computer.
w.E
Three reasons for using algorithms are efficiency, abstraction and reusability.
Algorithms can be expressed in many different notations, including natural languages,
asy
pseudocode, flowcharts and programming languages.
Analysis of algorithms is the theoretical study of computer program performance and
E
resource usage, and is often practiced abstractly without the use of specific programming
language or implementation.
ngi
The practical goal of algorithm analysis is to predict the performance of different
nee
algorithms in order to guide program design decisions.
Most algorithms do not perform the same in all cases; normally an algorithm’s
performance varies with the data passed to it.
rin
Typically, three cases are recognized: the best case, average case and worst case
g.n
Worst case analysis of algorithms is considered to be crucial to applications such as
games, finance and robotics.
O-notation, also known as Big O-notation, is the most common notation used to express
an algorithm’s performance in a formal manner.
Characteristics of algorithm
et
1. In the algorithm each and every instruction should be precise and unambiguous.
2. The instruction in an algorithm should not be repeated infinitely.
3. Ensure that the algorithm will ultimately terminate.
4. The algorithm should be written in sequence.
5. It looks like normal English.
6. The desired result should be obtained only after the algorithm terminates.
Sequence - Must be sequence and some instruction may be repeated in number of times
or until particular condition is met.
Generability - Used to solve single problem and more often algorithms are designed to
handle a range of input data.
Examples of algorithm
Problem 1: Find the area of a Circle of radius r.
Inputs to the algorithm:
Radius r of the Circle.
Expected output:
Area of the Circle
Algorithm:
Step 1: Start
ww
Step2: Read input the Radius r of the Circle
Step3: Area PI*r*r // calculation of area
Step 5: Stop
w.E
Step4: Print Area
Problem2: Write an algorithm to read two numbers and find their sum.
asy
Inputs to the algorithm:
First num1.
Second num2.
Expected output:
E
Sum of the two numbers.
Algorithm: ngi
Step1: Start
Step2: Read\input the first num1. nee
Step3: Read\input the second num2.
Step4: Sum num1+num2 // calculation of sum rin
Step5: Print Sum
Step6: Stop g.n
Problem 3: Convert temperature Fahrenheit to Celsius
Inputs to the algorithm:
et
Temperature in Fahrenheit
Expected output:
Temperature in Celsius
Algorithm:
Step1: Start
Step 2: Read Temperature in Fahrenheit F
Step 3: C 5/9*(F-32)
Step 4: Print Temperature in Celsius: C
Step5: End
A, B
Expected output:
Largest A or B
Algorithm:
Step 1: Start
Step 2:Read A, B
Step 3: If A is less than B, then
Big=B
Small=A
Print A is largest
Else
Big=A
Small = B
w.E
Problem 5: To determine a student’s average grade and indicate whether successful or fail.
Step 1: Start
asy
Step 2: Input mid-term and final
Step 3: average=(mid-term + final)/2
Step 4: if (average < 60) then
else E
Print “FAIL”
FLOWCHARTS
Definitions:
A flowchart is a schematic representation of an algorithm or a stepwise process, showing
the steps as boxes of various kinds, and their order by connecting these with arrows. Flowcharts
are used in designing or documenting a process or program.
A flow chart, or flow diagram, is a graphical representation of a process or system that
details the sequencing of steps required to create output.
A flowchart is a picture of the separate steps of a process in sequential order.
The benefits of flowcharts are as follows:
1. Communication: Flowcharts are better way of communicating the logic of a system to all
concerned.
2. Effective analysis: With the help of flowchart, problem can be analysed in more effective way.
ww
3. Proper documentation: Program flowcharts serve as a good program documentation, which is
needed for various purposes.
4. Efficient Coding: The flowcharts act as a guide or blueprint during the systems analysis and
w.E
program development phase.
5. Proper Debugging: The flowchart helps in debugging process.
asy
6. Efficient Program Maintenance: The maintenance of operating program becomes easy with
the help of flowchart. It helps the programmer to put efforts more efficiently on that part
E
The Limitations of using flowcharts :
ngi
1. Complex logic: Sometimes, the program logic is quite complicated. In that case, flowchart
becomes complex and clumsy.
nee
2. Alterations and Modifications: If alterations are required the flowchart may require re-drawing
completely.
rin
3. Reproduction: As the flowchart symbols cannot be typed, reproduction of flowchart becomes
a problem.
g.n
4. The essentials of what is done can easily be lost in the technical details of how it is done.
Terminator:
An oval flow chart shape indicates the start or end of the process, usually containing the
word “Start” or “End”.
Terminator
Process:
A rectangular flow chart shape indicates a normal/generic process flow step. For
example, “Add 1 to X”, “M = M*F” or similar.
Process
Decision:
A diamond flow chart shape indicates a branch in the process flow. This symbol
is used when a decision needs to be made, commonly a Yes/No question or True/False
test.
Decision
No
Yes
ww
Connector:
A small, labelled, circular flow chart shape used to indicate a jump in the process flow.
Connectors are generally used in complex or multi-sheet diagrams.
w.E
Data:
asy
E
A parallelogram that indicates data input or output (I/O) for a process. Examples: Get X
from the user, Display X.
ngi
Input /
Output nee
Delay:
rin
Used to indicate a delay or wait in the process for input from some other process.
g.n
Arrow:
Used to show the flow of control in a process. An arrow coming from one symbol and
et
ending at another symbol represents that control passes to the symbol the arrow points to.
ww
w.E
asy
E ngi
nee
These are the basic symbols used generally. Now, the basic guidelines for drawing a
flowchart with the above symbols are that:
rin
In drawing a proper flowchart, all necessary requirements should be listed out in logical
order.
g.n
The flowchart should be neat, clear and easy to follow. There should not be any room for
ambiguity in understanding the flowchart.
The flowchart is to be read left to right or top to bottom.
A process symbol can have only one flow line coming out of it. et
For a decision symbol, only one flow line can enter it, but multiple lines can leave it to
denote possible answers.
The terminal symbols can only have one flow line in conjunction with them.
Example Flowchart
Problem 1: Draw the flowchart to find the largest number between A and B
ww
w.E
asy
E ngi
Problem 2: Find the area of a circle of radius r.
nee
rin
g.n
et
ww
w.E
asy
E ngi
Problem 4: Flowchart for an algorithm which gets two numbers and prints sum of their value
nee
rin
g.n
et
Problem5: Flowchart for the problem of printing even numbers between 0 and 99.
ww
w.E
asy
E ngi
nee
rin
g.n
et
PSEUDOCODE
Definition:
“Pseudo” means initiation or false.
“Code” means the set of statements or instructions written in a programming language.
Pseudocode is also called as “Program Design Language [PDL]”.
Pseudocode is a Programming Analysis Tool, which is commonly used for planning the
program logic.
Pseudocode is written in normal English and cannot be understood by the computer.
Set of instructions that mimic programming language instructions
An informal high-level description of the operating principle of a computer program. It
uses the structural conventions of a programming language, but is intended for human
reading rather than machine reading.
ww
Rules for writing Pseudocode
1. Write one statement per line
w.E
2. Capitalize initial keywords (READ, WRITE, IF, WHILE, UNTIL).
3. Indent to show hierarchy.
4. End multiline structure.
asy
5. Keep statements language.
Advantages
E ngi
It can be done easily in any word processor.
It can be easily modified as compared to flowchart.
nee
Its implementation is very useful in structured design elements.
It can be written easily.
It can be read and understood easily.
rin
Converting a pseudocode to programming language is very easy compared with
converting a flowchart to programming language.
g.n
Disadvantage
It is not visual.
We do not get a picture of the design.
There is no standardized style or format.
et
For a beginner, it is more difficult to follow the logic or write pseudocode as compared to
flowchart.
Examples Pseudocode
Problem 1: Calculate sum and average for n numbers.
BEGIN
INITIALIZE sum=0, i=1
READ n
FOR i <=n, then
COMPUTE sum = sum +i
CALCULATE i=i+1
END FOR
COMPUTE avg = sum/n
PRINT sum, avg
END
BEGIN
READ radius, r
INITIALIZE pi=3.14
CALCULATE Area=pi * r *r
PRINT Area
END
ww
Problem 3: Read Number n and print the integers counting upto n
BEGIN
READ n w.E
INITIALIZE i to 1
FOR i <= n, then
DISPLAY i
asy
INCREMENT i
END FOR
END
E ngi
Problem 4: Find the greater number between two numbers. nee
BEGIN
Read A, B rin
IF A is less than B
BIG = B g.n
ELSE
SMALL = A
BIG = A
SMALL = B
et
WRITE / DISPLAY BIG, SMALL
END
ILLUSTRATIVE PROBLEM
1. Guess an integer in a range
Algorithm:
Step1: Start
Step 2: Declare hidden, guess
Step 3: Compute hidden= Choose a random value in a range
Step 4: Read guess
Step 5: If guess=hidden, then
Print Guess is hit
Else
Print Guess not hit
Print hidden
Step 6: Stop
wwPseudocode:
BEGIN
COMPUTE hidden=random value in a range
READ guess
w.E
IF guess=hidden, then
ELSE
asy
PRINT Guess is hit
END IF-ELSE
END
E
PRINT hidden
ngi
Flowchart:
nee
rin
g.n
et
Algorithm:
Step 1: Start
Step 2: Read n
Step 3:Initialize i=0
Step 4: If i<n, then goto step 4.1, 4.2 else goto step 5
Step4.1: Read a[i]
Step 4.2: i=i+1 goto step 4
Step 5: Compute min=a[0]
Step 6: Initialize i=1
Step 7: If i<n, then go to step 8 else goto step 10
w.E
Step 9: Print min
Step 10: Stop
Pseudocode:
BEGIN
asy
READ n
E
FOR i=0 to n, then
READ a[i] ngi
INCREMENT i
END FOR nee
COMPUTE min=a[0]
FOR i=1 to n, then rin
IF a[i]<min, then
CALCULATE min=a[i] g.n
ELSE
INCREMENT i
INCREMENT i
END IF-ELSE
et
END FOR
PRINT min
END
Flowchart:
ww
w.E
asy
E ngi
nee
rin
g.n
et
Algorithm:
Step 1: Start
Step 2: Read n
Step 3:Initialize i=0
Step 4: If i<n, then goto step 4.1, 4.2 else goto step 5
Step4.1: Read a[i]
Step 4.2: i=i+1 goto step 4
Step 5: Read item
Step 6: Calculate i=n-1
Step 7: If i>=0 and item<a[i], then go to step 7.1, 7.2 else goto step 8
w.E
Step 9: Compute n=n+1
Step 10: If i<n, then goto step 10.1, 10.2 else goto step 11
asy
Step10.1: Print a[i]
Step10.2: i=i+1 goto step 10
Step 11: Stop
Pseudocode:
BEGIN
E ngi
READ n
FOR i=0 to n, then nee
READ a[i]
INCREMENT i rin
END FOR
READ item g.n
FOR i=n-1 to 0 and item<a[i], then
CALCULATE a[i+1]=a[i]
DECREMENT i
END FOR
et
COMPUTE a[i+1]=a[i]
COMPUTE n=n+1
FOR i=0 to n, then
PRINT a[i]
INCREMENT i
END FOR
END
Flowchart:
ww
w.E
asy
E ngi
nee
rin
g.n
et
4. Tower of Hanoi
Algorithm:
Step 1: Start
Step 2: Read n
Step 3: Calculate move=pow(2,n)-1
Step 4: Function call T(n,Beg,Aux,End) recursively until n=0
Step 4.1: If n=0, then goto step 5 else goto step 4.2
Step 4.2: T(n-1,Beg,End,Aux)
T(1,Beg,Aux,End) , Move disk from source to destination
T(n-1,Aux,Beg,End)
Step 5: Stop
wwPseudcode:
BEGIN
READ n
w.E
CALCULATE move=pow(2,n)-1
FUNCTION T(n,Beg,Aux,End) Recursively until n=0
PROCEDURE
IF n=0 then, asy
Else E
No disk to move
T(n-1,Beg,End,Aux) ngi
nee
T(1,Beg,Aux,End), move disk from source to destination
T(n-1,Aux,Beg,End)
END PROCEDURE
rin
END
Flowchart:
g.n
et
The goal of the puzzle is to move all the disks from leftmost peg to rightmost peg.
ww
w.E
asy
E ngi
nee
rin
g.n
et
ww
w.E
asy
E ngi
nee
rin
g.n
et
ww
w.E
asy
E ngi
nee
rin
g.n
et
ww
w.E
asy
E ngi
nee
rin
g.n
et
What is a program?
A program is a sequence of instructions that specifies how to perform a computation.
The computation might be something mathematical, such as solving a system of equations or
finding the roots of a polynomial, but it can also be a symbolic computation, such as searching
and replacing text in a document or (strangely enough) compiling a program.
w
output: Display data on the screen or send data to a file or other device.
math: Perform basic mathematical operations like addition and multiplication.
.Ea
conditional execution: Check for certain conditions and execute the appropriate code.
sy E
repetition: Perform some action repeatedly, usually with some variation.
ngi
Python is an example of a high-level language; other high-level languages you might
have heard of are C, C++, Perl, and Java. There are also low-level languages, sometimes
referred to as “machine languages” or “assembly languages.
nee
The high-level program is called the source code, and the translatedprogram is called the
rin
object code or the executable. Once a program is compiled, you can execute it repeatedly
without further translation.
g .ne
Programs written in a high-level language have to be processed before they can run.
Python is considered an interpreted language because Python programs are executed by an
interpreter. There are two ways to use the interpreter: interactive mode and script mode.
In interactive mode, type Python programs and the interpreter displays the result.
Eg: >>> 1 + 1
t
2
Where, >>> is the prompt the interpreter uses to indicate that it is ready
In script mode, type python program in a file and store the file with .py extension and use
the interpreter to execute the contents of the file, which is called a script.
bug: An error in a program.
debugging: The process of finding and removing any of the three kinds of programming errors.
syntax: The structure of a program.
syntax error: An error in a program that makes it impossible to parse (and therefore impossible
to interpret).
exception: An error that is detected while the program is running.
semantics: The meaning of a program. Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 1
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
ww
<type 'int'>
>>> type('17')
w
<type 'str'>
>>> type('3.2')
<type 'str'>
.Ea
Variables sy E
A variable is a name that refers to a value. A variable is a location in memory used to store some
ngi
data (value). They are given unique names to differentiate between different memory locations.
nee
The rules for writing a variable name are same as the rules for writing identifiers in Python. The
assignment operator (=) to assign values to a variable. An assignment statement creates new
variables and gives them values:
Eg:
rin
>>> message = 'And now for something completely different'
>>> n = 17
>>> pi = 3.1415926535897932
g .ne
The type of a variable is the type of the value it refers to.
Eg:
>>> type(message)
t
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>
ww break
class
except
exec
import
in
print
raise
nonlocal
false
w
continue finally is return
def for lambda try
.Ea
Python Identifiers
sy E
Identifier is the name given to entities like class, functions, variables etc. in Python. It
helps differentiating one entity from another.
Rules for writing identifiers
ngi
1. Identifiers can be a combination of letters in lowercase (a to z) or uppercase (A to Z) or
nee
digits (0 to 9) or an underscore (_). Names like myClass, var_1 and print_this_to_screen,
all are valid example.
rin
2. An identifier cannot start with a digit. 1variable is invalid, but variable1 is perfectly fine.
3. Keywords cannot be used as identifiers.
g
4. We cannot use special symbols like !, @, #, $, % etc. in our identifier.
5. Identifier can be of any length. .ne
Data types in Python
In Python programming, data types are actually classes and variables are instance (object)
t
of these classes. They are defined as int, float and complex class in Python.
Lists
List is an ordered sequence of items. Python knows a number of compound data types,
used to group together other values. The most versatile is the list, which can be written as a list
of comma-separated values (items) between square brackets. List items need not all have the
same type.
Eg:
>>> a = [’spam’, ’eggs’, 100, 1234]
>>> a
Output: [’spam’, ’eggs’, 100, 1234] Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 3
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
w
Python Indentation
.Ea
Most of the programming languages like C, C++, Java use braces { } to define a block of
code. Python uses indentation.
sy E
A code block (body of a function, loop etc.) starts with indentation and ends with the first
unindented line. The amount of indentation is up to you, but it must be consistent throughout that
block.
ngi
Generally four whitespaces are used for indentation and is preferred over tabs. Here is an
example.
nee
rin
g .ne
t
Python Tuple
Tuple is an ordered sequence of items same as list.The only difference is that tuples are
immutable. Tuples once created cannot be modified.
Tuples are used to write-protect data and are usually faster than list as it cannot change
dynamically.
It is defined within parentheses () where items are separated by commas.
Eg:
>>> t = (5,'program', 1+3j)
>>> a=(5,7.9,10)
Comments
Comments indicate Information in a program that is meant for other programmers (or
anyone reading the source code) and has no effect on the execution of the program. In Python,
we use the hash (#) symbol to start writing a comment.
Eg:
ww
#This is a comment
#print out Hello
print('Hello')
w .Ea
Python Output Using print() function
sy E
The actual syntax of the print() function is
print (“Statement”,variable_name)
ngi
print (‘Statement’,variable_name)
print (“Statement %formatting function”%variable_name)
nee
rin
After all values are printed, end is printed. It defaults into a new line.
The file is the object where the values are printed and its default value is sys.stdout (screen)
Eg:
print ('This sentence is output to the screen')
# Output: This sentence is output to the screen
g .ne
a=5 t
print ('The value of a is', a)
# Output: The value of a is 5
Python Input
The syntax for input() is
input([prompt])
raw_input([prompt])
where prompt is the string we wish to display on the screen. It is optional.
Eg:
>>> num = input('Enter a number: ') Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 5
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
Python Import
A module is a file containing Python definitions and statements. Python modules have a
ww
filename and end with the extension .py.
Definitions inside a module can be imported to another module or the interactive
w
interpreter in Python. We use the import keyword to do this.
.Ea
Python provides two ways to import modules.
Precedence Of Operators
The order of evaluation depends on the rules of precedence. The acronym PEMDAS is
a useful way to remember the rules:
Parentheses have the highest precedence
ww
Exponentiation has the next highest precedence, so 2**1+1 is 3, not 4, and 3*1**3 is 3,
wnot 27.
Multiplication and Division have the same precedence, which is higher than Addition and
.Ea
Subtraction, which also have the same precedence. So 2*3-1 is 5, not 4, and 6+4/2 is 8,
not 5.
sy E
Operators with the same precedence are evaluated from left to right.
# Output: x - y = 11
ww
print('x - y =',x-y)
w
# Output: x * y = 60
print('x * y =',x*y)
.Ea
sy E
# Output: x / y = 3.75
print('x / y =',x/y)
# Output: x // y = 3
print('x // y =',x//y) ngi
# Output: x ** y = 50625 nee
print('x ** y =',x**y)
rin
When you run the program, the output will be:
x + y = 19
x - y = 11
g .ne
x * y = 60
x / y = 3.75
x // y = 3
t
x ** y = 50625
Comparison operators
Comparison operators are used to compare values. It either returns True or False
according to the condition.
Operator Meaning Example
> Greater that - True if left operand is greater than the right x>y
< Less that - True if left operand is less than the right x<y
== Equal to - True if both operands are equal x == y
Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 8
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
ww
# Output: x < y is True
w
print('x < y is',x<y)
# Output: x == y is False
.Ea
sy E
print('x == y is',x==y)
# Output: x != y is True
print('x != y is',x!=y)
ngi
# Output: x >= y is False
print('x >= y is',x>=y) nee
rin
# Output: x <= y is True
print('x <= y is',x<=y)
Output:
g .ne
x > y is False
x < y is True
x == y is False
t
x != y is True
x >= y is False
x <= y is True
Logical operators
# Output: x or y is True
print('x or y is',x or y)
ww
# Output: not x is False
Output:
w
print('not x is',not x)
.Ea
x and y is False
x or y is True sy E
not x is False
ngi
Bitwise operators
nee
Bitwise operators act on operands as if they were string of binary digits. It operates bit by
bit, hence the name.
For example, 2 is 10 in binary and 7 is 111. rin
g
In the table below: Let x = 10 (0000 1010 in binary) and y = 4 (0000 0100 in binary)
.ne
Bitwise operators in Python
Operator Meaning Example t
& Bitwise AND x& y = 0 (0000 0000)
| Bitwise OR x | y = 14 (0000 1110)
~ Bitwise NOT ~x = -11 (1111 0101)
^ Bitwise XOR x ^ y = 14 (0000 1110)
>> Bitwise right shift x>> 2 = 2 (0000 0010)
<< Bitwise left shift x<< 2 = 40 (0010 1000)
Assignment operators
Assignment operators are used in Python to assign values to variables. a = 5 is a simple
assignment operator that assigns the value 5 on the right to the variable a on theFrom
Download left.: www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 10
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
x = 15
y=4
x-=y
# Output: x - y = 11
print('x - y =',x)
x = 15
y=4
x*=y
# Output: x * y = 60
print('x * y =',x)
Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 11
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
x = 15
y=4
x//=y
# Output: x // y = 3
print('x // y =',x)
ww
x = 15
y=4
w
x**=y
# Output: x ** y = 50625
print('x ** y =',x)
.Ea
Special operators
sy E
Python language offers some special type of operators like the identity operator or the
membership operator.
ngi
Identity operators
nee
is and is not are the identity operators in Python. They are used to check if two values (or
rin
variables) are located on the same part of the memory. Two variables that are equal does not
imply that they are identical.
Identity operators in Python g .ne
Operator Meaning
is
is not
True if the operands are identical (refer to the same object)
Example
x is True
True if the operands are not identical (do not refer to the same object) x is not True
t
Example: Identity operators in Python
x1 = 5
y1 = 5
x2 = 'Hello'
y2 = 'Hello'
x3 = [1,2,3]
y3 = [1,2,3]
# Output: False
Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 12
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
# Output: True
print(x2 is y2)
# Output: False
print(x3 is y3)
Output:
False
True
False
ww Here, we see that x1 and y1 are integers of same values, so they are equal as well as
w
identical. Same is the case with x2 and y2 (strings).
But x3 and y3 are list. They are equal but not identical. Since list are mutable (can be
.Ea
changed), interpreter locates them separately in memory although they are equal.
Membership operators
sy E
in and not in are the membership operators in Python. They are used to test whether a
ngi
value or variable is found in a sequence (string, list, tuple, set and dictionary).
In a dictionary we can only test for presence of key, not the value.
nee
Operator Meaning
in True if value/variable is found in the sequence
Example
5 in x rin
not in True if value/variable is not found in the sequence 5 not in x
g .ne
Example: Membership operators in Python
x = 'Hello world'
y = {1:'a',2:'b'}
t
# Output: True
print('H' in x)
# Output: True
print('hello' not in x)
# Output: True
print(1 in y)
Output:
True
True
True
False
Here, 'H' is in x but 'hello' is not present in x (remember, Python is case sensitive).
Similary, 1 is key and 'a' is the value in dictionary y. Hence, 'a' in y returns False.
Functions
w
repetition and makes code reusable.
Function Call
A function is a named sequence of statements that performs a computation. When you
define a function, you specify the name and the sequence of statements. Later, you can “call” the
function by name.
>>> type(32)
<type 'int'>
The name of the function is type. The expression in parentheses is called the argument
of the function. The resultis called the return value.
ww
called. The Syntax of return statement:
return [expression_list]
w
This statement can contain expression which gets evaluated and the value is returned. If there is
.Ea
no expression in the statement or the return statement itself is not present inside a function, then
the function will return the None object.
For example:
>>> print(greet("May"))
Hello, May. Good morning!
sy E
None
ngi
Here, None is the returned value.
Types of Functions
Basically, we can divide functions into the following two types:
1. Built-in functions - Functions that are built into Python.
2. User-defined functions - Functions defined by the users themselves.
>>> int('32')
32
>>> int('Hello')
ValueError: invalid literal for int(): Hello
int can convert floating-point values to integers, but it doesn’t round off; it chops off the
fraction part:
ww
>>> int(3.99999)
3
-2 w
>>> int(-2.3)
.Ea
sy E
float converts integers and strings to floating-point numbers:
>>> float(32)
32.0
>>> float('3.14159') ngi
3.14159
Finally, str converts its argument to a string: nee
>>> str(32)
'32' rin
>>> str(3.14159)
'3.14159'
g .ne
Math functions
Python has a math module that provides mathematical functions.
t
>>> import math
This statement creates a module object named math. If you print the module object, you
get some information about it:
The module object contains the functions and variables defined in the module. To access
one of the functions, you have to specify the name of the module and the name of the
function, separated by a dot (also known as a period). This format is called dotFrom
Download notation.
: www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 16
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
Eg:
>>> math.sqrt(2) / 2.0
0.707106781187
Flow of execution
The order in which statements are executed, which is called the flow of execution.
Execution always begins at the first statement of the program. Statements are executed one at a
time, in order from top to bottom. Function definitions do not alter the flow of execution of the
program, but remember that statements inside the function are not executed until the function is
called.
ww
Parameters and arguments
Some of the built-in functions we have seen require arguments. For example, when you
w
call math.sin you pass a number as an argument. Some functions take more than one argument:
math.pow takes two, the base and the exponent.
.Ea
Inside the function, the arguments are assigned to variables called parameters. Here is
sy E
an example of a user-defined function that takes an argument:
Eg: def print_twice(bruce):
print bruce
print bruce
ngi
This function assigns the argument to a parameter named bruce. When the function is
nee
called, it prints the value of the parameter (whatever it is) twice.
This function works with any value that can be printed.
>>> print_twice('Spam')
rin
Spam
Spam
>>> print_twice(17)
g .ne
17
17
>>> print_twice(math.pi)
t
3.14159265359
3.14159265359
Parameter Passing
Parameter passing is the process of passing arguments to a function. There are two types
of arguments: Actual arguments and formal arguments. Actual arguments are the values passed
to a function’s formal parameters to be operated on.
Eg:
def f(x): #name x used as formal parameter
y=1
x=x+y Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 17
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
Output:
t
Hello Kate, Good morning!
Hello Bruce, How do you do?
ww
w .Ea
sy E
ngi
nee
rin
Global Variables and Global Scope
g .ne
A global variable is a variable that is defined outside of any function definition. Such
variables are said to have global scope .
t
Variable max is defi ned outside func1 and func2 and therefore “global” to each.
Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 19
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
ww
x=x+y
print 'The value of x after swapping:’,x
print 'The value of y after swapping:’,y
w .Ea
2. Python Program to calculate the square root
sy E
# Note: change this value for a different result
num = 8
ngi
# uncomment to take the input from the user
#num = float(input('Enter a number: '))
num_sqrt = num ** 0.5
nee
print('The square root of %0.3f is %0.3f'%(num ,num_sqrt))
rin
3. Distance between two points
import math
p1 = [4, 0]
g .ne
p2 = [6, 6]
distance = math.sqrt( ((p1[0]-p2[0])**2)+((p1[1]-p2[1])**2) )
print(distance)
t
4. Write a function that draws a grid like the following:
+----+----+
| | |
| | |
| | |
| | |
+----+----+
| | |
| | |
| | |
| | |
+----+----+
Download From : www.EasyEngineering.net
St.Joseph’s Institute of Technology Common to all Branch Page 20
www.rejinpaul.com
GE8151-Problem Solving and Python Programming Unit-II
def print_row():
print ("|", " " * 8, "|", " " * 8, "|")
def block():
print_border()
print_row()
print_row()
print_row()
print_row()
ww block()
w
block()
print_border()
.Ea
sy E
5. Adding two numbers using user defined function.
# Program to illustrate
# the use of user-defined functions
def add_numbers(x,y):
sum = x + y ngi
return sum
num1 = 5 nee
num2 = 6
rin
print("The sum is", add_numbers(num1, num2))
(OR)
list=[10,20,30,40,50]
n=2 #Shift 2 location
list[n:]+list[:n]
Modulus operator
ww The modulus operator works on integers and yields the remainder when the first
operand is divided by the second. In Python, the modulus operator is a percent sign (%). The
w
syntax is the same as for other operators:
>>> quotient = 7 / 3
>>> print quotient .Ea
2
>>> remainder = 7 % 3 sy E
>>> print remainder
1
ngi
So 7 divided by 3 is 2 with 1 left over.
nee
The modulus operator turns out to be surprisingly useful. For example, you can check
rin
whether one number is divisible by another—if x % y is zero, then x is divisible by y.
Also, you can extract the right-most digit or digits from a number. For example, x % 10
Boolean expressions
g
yields the right-most digit of x (in base 10). Similarly x % 100 yields the last two digits.
.ne
A boolean expression is an expression that is either true or false. The following
examples use the operator ==, which compares two operands and produces True if they are equal
and False otherwise:
t
>>> 5 == 5
True
>>> 5 == 6
False
True and False are special values that belong to the type bool; they are not strings:
>>> type(True)
<type 'bool'>
>>> type(False)
<type 'bool'>
Logical operators
There are three logical operators: and, or, and not. The semantics (meaning) of these
operators is similar to their meaning in English. For example, x > 0 and x < 10 is true only if x is
greater than 0 and less than 10. n%2 == 0 or n%3 == 0 is true if either of the conditions is true,
ww
that is, if the number is divisible by 2 or 3.
Finally, the not operator negates a boolean expression, so not (x > y) is true if x > y is
false, that is, if x is less than or equal to y. The operands of the logical operators should be
w
boolean expressions. Any nonzero number is interpreted as “true.”
>>> 17 and True
True
.Ea
Keyboard input
sy E
ngi
Python 2 provides a built-in function called raw_input that gets input from the keyboard.
In Python 3, it is called input.
>>> text = raw_input() nee
What are you waiting for?
>>> print text
rin
What are you waiting for?
>>> name = raw_input('What...is your name?\n')
What...is your name?
g .ne
Arthur, King of the Britons!
>>> print name
Arthur, King of the Britons!
t
The sequence \n at the end of the prompt represents a newline, which is a special
character that causes a line break.
>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
if <test_expression>:
<body>
ww
wEg: .Ea
num = 3
if num > 0: sy E
ngi
print(num, "is a positive number.")
print("This is always printed.")
num = -1 nee
if num > 0:
print(num, "is a positive number.") rin
print("This is also always printed.")
g .ne
The boolean expression after if is called the condition. If it is true, then the indented
statement gets executed. If not, nothing happens.
if <test_expression>:
<body_1>
else:
<body_2>
Eg: ww
num = 3w
# Program checks if the number is positive or negative
if num >= 0:
.Ea
else: sy E
print("Positive or Zero")
print("Negative number")
ngi
nee
If the remainder when x is divided by 2 is 0, then we know that x is even, and the
program displays a message to that effect. If the condition is false, the second set of statements is
executed.
rin
Chained conditionals
g .ne
Sometimes there are more than two possibilities and we need more than two branches.
The syntax looks like this:
if <test_expression_1>:
<body1>
elif <test_expression_2>:
t
<body2>
elif <test_expression_3>:
<body3>
….
…..
else:
<bodyN>
ww
w .Ea
sy E
ngi
Eg:
# In this program,
nee
# we check if the number is positive or
# negative or zero and
rin
# display an appropriate message
num = 3.4
g .ne
# Try these two variations as well:
# num = 0
t
# num = -4.5
if num > 0:
print("Positive number")
elif num == 0:
print("Zero")
else:
print("Negative number")
elif is an abbreviation of “else if.” Again, exactly one branch will be executed. There is no limit
on the number of elif statements. If there is an else clause, it has to be at the end, but there
doesn’t have to be one.
if choice == 'a':
draw_a()
elif choice == 'b':
draw_b()
elif choice == 'c':
draw_c()
Each condition is checked in order. If the first is false, the next is checked, and so on. If
one of them is true, the corresponding branch executes, and the statement ends. Even if more
ww
than one condition is true, only the first true branch executes.
w
Nested conditionals
One conditional can also be nested within another. We could have written the trichotomy
example like this:
# .Ea
In this program, we input a number
#
#
#
sy E
check if the number is positive or
negative or zero and display
an appropriate message
# This time we use nested if
ngi
num = float(input("Enter a number: "))
if num >= 0:
if num == 0: nee
print("Zero")
else:
print("Positive number") rin
else:
print("Negative number") g .ne
The outer conditional contains two branches. The first branch contains a simple
statement. The second branch contains another if statement, which has two branches of its own.
Those two branches are both simple statements, although they could have been conditional
t
statements as well.
Although the indentation of the statements makes the structure apparent, nested
conditionals become difficult to read very quickly.
Logical operators often provide a way to simplify nested conditional statements. For
example, we can rewrite the following code using a single conditional:
if 0 < x:
if x < 10:
print 'x is a positive single-digit number.'
The print statement is executed only if we make it past both conditionals, so we can get
the same effect with the and operator: Download From : www.EasyEngineering.net
www.rejinpaul.com
7
Recursion
Recursion is the process of calling the function that is currently executing. It is legal for
one function to call another; it is also legal for a function to call itself. 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.
ww
# An example of a recursive function to
# find the factorial of a number
def calc_factorial(x):
w
"""This is a recursive function
.Ea
to find the factorial of an integer"""
if x == 1:
return 1
else:
sy E
ngi
return (x * calc_factorial(x-1))
num = 4
print("The factorial of", num, "is", calc_factorial(num)) nee
Output:
rin
The factorial of 4 is 24
Iteration
The while statement
The keyword while followed by a test expression (which can be any valid expression),
and a colon. Following the header is an indented body. The test expression is evaluated. If it
Download From : www.EasyEngineering.net
www.rejinpaul.com
8
evaluates to True, then the body of the loop is executed. After executing the body, the test
expression is evaluated again. While test expression evaluates to True, the body of the loop is
executed. When the test expression evaluates to False, the loop is terminated and execution
continues with the statement following the body.
while
<test_expression>:
<body>
ww
w .Ea
sy E
ngi
nee
rin
g .ne
Eg:
def sequence(n):
while n != 1:
t
print n,
if n%2 == 0: # n is even
n = n/2
else: # n is odd
n = n*3+1
The condition for this loop is n != 1, so the loop will continue until n is 1, which makes
the condition false.
Each time through the loop, the program outputs the value of n and then checks whether
it is even or odd. If it is even, n is divided by 2. If it is odd, the value of n is replaced with n*3+1.
For example, if the argument passed to sequence is 3, the resulting sequence is 3,10, 5, 16, 8, 4,
2, 1.
ww
w .Ea
sy E
ngi
nee
rin
Eg:
g .ne
# Program to find the sum of all numbers stored in a list
# List of numbers
t
numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11]
# variable to store the sum
sum = 0
# iterate over the list
for val in numbers:
sum = sum+val
# Output: The sum is 48
print("The sum is", sum)
Eg:
# Prints out the numbers 0,1,2,3,4
for x in range(5):
print(x)
This function does not store all the values in memory, it would be inefficient. So it
remembers the start, stop, step size and generates the next number on the go.
ww The break statement terminates the loop containing it. Control of the program flows to
the statement immediately after the body of the loop.
wIf break statement is inside a nested loop (loop inside another loop), break will terminate
the innermost loop.
.Ea
The working of break statement in for loop and while loop is shown below.
sy E
ngi
nee
rin
g .ne
t
Eg:
# Prints out 0,1,2,3,4
count = 0
while True:
print(count)
count += 1
if count >= 5:
break
The continue statement is used to skip the rest of the code inside a loop for the current
iteration only. Loop does not terminate but continues on with the next iteration.
The working of continue statement in for and while loop is shown below.
ww
Eg:
w .Ea
sy E
# Prints out only odd numbers - 1,3,5,7,9
for x in range(10):
# Check if x is even
if x % 2 == 0: ngi
continue
print(x) nee
rin
Python pass statement
g .ne
The pass statement does nothing. It can be used when a statement is required
syntactically but the program requires no action.
Eg:
>>> while True:
... pass # Busy-wait for keyboard interrupt (Ctrl+C)
t
...
This is commonly used for creating minimal classes:
>>> class MyEmptyClass:
... pass
...
Another place pass can be used is as a place-holder for a function or conditional body
when you are working on new code, allowing you to keep thinking at a more abstract level. The
pass is silently ignored:
>>> def initlog(*args):
... pass # Remember to implement this!
Download From : www.EasyEngineering.net
www.rejinpaul.com
12
FRUITFUL FUNCTIONS
Return values
The built-in functions we have used, such as abs, pow, and max, have produced results.
Calling each of these functions generates a value, which we usually assign to a variable or use as
part of an expression.
biggest = max(3, 7, 2, 5)
x = abs(3 - 11) + 10
But so far, none of the functions we have written has returned a value. In this chapter, we
are going to write functions that return values, which we will call fruitful functions, for want of a
better name. The first example is area, which returns the area of a circle with the given radius:
ww
def area(radius):
temp = 3.14159 * radius**2
w
return temp
.Ea
We have seen the return statement before, but in a fruitful function the return statement
includes a return value. This statement means: Return immediately from this function and use the
sy E
following expression as a return value. The expression provided can be arbitrarily complicated,
so we could have written this function more concisely:
def area(radius):
return 3.14159 * radius**2 ngi
nee
On the other hand, temporary variables like temp often make debugging easier.
rin
Sometimes it is useful to have multiple return statements, one in each branch of a conditional.
We have already seen the built-in abs, now we see how to write our own:
def absolute_value(x):
if x < 0:
g .ne
return -x
else:
return x
t
Since these return statements are in an alternative conditional, only one will be executed.
As soon as one is executed, the function terminates without executing any subsequent
statements. Another way to write the above function is to leave out the else and just follow the if
condition by the second return statement.
def absolute_value(x):
if x < 0:
return -x
return x
Think about this version and convince yourself it works the same as the first one.
Download From : www.EasyEngineering.net
www.rejinpaul.com
13
Code that appears after a return statement, or any other place the flow of execution can
never reach, is called dead code.
In a fruitful function, it is a good idea to ensure that every possible path through the
program hits a return statement. The following version of absolute_value fails to do this:
def
absolute_value(x):
if x < 0:
return -x
elif x > 0:
return x
ww This version is not correct because if x happens to be 0, neither condition is true, and the
function ends without hitting a return statement. In this case, the return value is a special value
w
called None:
.Ea
>>> print absolute_value(0)
None
sy E
None is the unique value of a type called the NoneType:
>>> type(None)
ngi
nee
All Python functions return None whenever they do not return another value.
g .ne
Parameters and variables defined inside a function is not visible from outside. Hence, they have a
local scope.
t
Lifetime of a variable is the period throughout which the variable exits in the memory.
The lifetime of variables inside a function is as long as the function executes.
They are destroyed once we return from the function. Hence, a function does not
remember the value of a variable from its previous calls.
Eg:
def my_func():
x = 10
print("Value inside function:",x)
x = 20
my_func()
print("Value outside function:",x)
Output:
Value inside function: 10
Value outside function: 20
ww
w .Ea
Global Variables and Global Scope
sy E
A global variable is a variable that is defined outside of any function definition. Such
variables are said to have global scope .
ngi
nee
rin
g .ne
t
Variable max is defi ned outside func1 and func2 and therefore “global” to each.
Function Composition
As you should expect by now, you can call one function from within another. This ability
is called composition.
As an example, we’ll write a function that takes two points, the center of the circle and a
point on the perimeter, and computes the area of the circle.
Assume that the center point is stored in the variables xc and yc, and the perimeter point
is in xp and yp. The first step is to find the radius of the circle, which is the distance between the
two points. Fortunately, we’ve just written a function, distance, that does just that, so now all we
have to do is use it:
Download From : www.EasyEngineering.net
www.rejinpaul.com
15
We called this function area2 to distinguish it from the area function defined earlier.
ww
There can only be one function with a given name within a given module. The temporary
variables radius and result are useful for development and debugging, but once the program is
w
working, we can make it more concise by composing the function calls:
.Ea
def area2(xc, yc, xp, yp):
return area(distance(xc, yc, xp, yp))
sy E STRINGS
ngi
A string is a sequence of characters. You can access the characters one at a time with the
bracket operator:
nee
>>> fruit = 'banana'
>>> letter = fruit[1]
rin
The second statement selects character number 1 from fruit and assigns it to letter.
The expression in brackets is called an index. The index indicates which character in the
sequence you want (hence the name).
But you might not get what you expect:
>>> print letter
g .ne
a
For most people, the first letter of 'banana' is b, not a. But for computer scientists, the
t
index is an offset from the beginning of the string, and the offset of the first letter is zero.
>>> letter = fruit[0]
>>> print letter
b
So b is the 0th letter (“zero-eth”) of 'banana', a is the 1th letter (“one-eth”), and n is the
2th(“two-eth”) letter.
You can use any expression, including variables and operators, as an index, but the value
of the index has to be an integer. Otherwise you get:
>>> letter = fruit[1.5]
TypeError: string indices must be integers, not float
len
len is a built-in function that returns the number of characters in a string:
>>> fruit = 'banana'
>>> len(fruit)
6
To get the last letter of a string, you might be tempted to try something like this:
>>> length = len(fruit)
>>> last = fruit[length]
IndexError: string index out of range
The reason for the IndexError is that there is no letter in 'banana' with the index 6. Since
we started counting at zero, the six letters are numbered 0 to 5. To get the last character,
ww
you have to subtract 1 from length:
>>> last = fruit[length-1]
a
w
>>> print last
.Ea
Alternatively, you can use negative indices, which count backward from the end of the
sy E
string. The expression fruit[-1] yields the last letter, fruit[-2] yields the second to last,
and so on.
String slices
ngi
A segment of a string is called a slice. Selecting a slice is similar to selecting a character:
>>> s = 'Monty Python'
>>> print s[0:5] nee
rin
Monty
>>> print s[6:12]
Python
g .ne
The operator [n:m] returns the part of the string from the “n-eth” character to the “m-eth”
character, including the first but excluding the last. This behavior is counterintuitive, but
it might help to imagine the indices pointing between the characters, as in Figure 8.1.
If you omit the first index (before the colon), the slice starts at the beginning of the string.
If you omit the second index, the slice goes to the end of the string:
t
>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'
If the first index is greater than or equal to the second the result is an empty string,
represented by two quotation marks:
>>> fruit = 'banana'
>>> fruit[3:3]
''
An empty string contains no characters and has length 0, but other than that, it is the same
as any other string.
ww The reason for the error is that strings are immutable, which means you can’t change an
existing string. The best you can do is create a new string that is a variation on the original:
w
>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print new_greeting
Jello, world! .Ea
sy E
This example concatenates a new first letter onto a slice of greeting. It has no effect on
ngi
the original string.
String methods
nee
A method is similar to a function—it takes arguments and returns a value—but the syntax
is different. For example, the method upper takes a string and returns a new string with all
uppercase letters:
rin
Instead of the function syntax upper(word), it uses the method syntax word.upper().
>>> word = 'banana'
>>> new_word =
word.upper()
g .ne
>>> print new_word
BANANA t
This form of dot notation specifies the name of the method, upper, and the name of the
string to apply the method to, word. The empty parentheses indicate that this method
takes no argument.
A method call is called an invocation; in this case, we would say that we are invoking
upper on the word.
As it turns out, there is a string method named find that is remarkably similar to the
function we wrote:
>>> word = 'banana'
>>> index = word.find('a')
>>> print index
1
In this example, we invoke find on word and pass the letter we are looking for as a
parameter.
Actually, the find method is more general than our function; it can find substrings, not
just characters:
>>> word.find('na')
2
ww
>>> name.find('b', 1, 2)
-1
w
This search fails because b does not appear in the index range from 1 to 2 (not including 2).
ngi
Other relational operations are useful for putting words in alphabetical order:
if word < 'banana':
print 'Your word,' + word + ', comes before banana.' nee
elif word > 'banana':
print 'Your word,' + word + ', comes after banana.'
rin
else:
print 'All right, bananas.' g .ne
Python does not handle uppercase and lowercase letters the same way that people do. All
the uppercase letters come before all the lowercase letters, so:Your word, Pineapple, comes
before banana.
t
A common way to address this problem is to convert strings to a standard format, such as
all lowercase, before performing the comparison. Keep that in mind in case you have to
defend yourself against a man armed with a Pineapple.
Program
1. Python program to find the factorial of a number provided by the user.
ww
elif num == 0:
print("The factorial of 0 is 1")
else:
w
for i in range(1,num + 1):
.Ea
factorial = factorial*i
print("The factorial of",num,"is",factorial)
sy E
2. Python program to find the factorial of a number using recursion.
3. Python program to find the largest number among the three input numbers
ww
#num3 = float(input("Enter third number: "))
w
largest = num1
.Ea
elif (num2 >= num1) and (num2 >= num3):
largest = num2
else:
largest = num3
sy E
ngi
print("The largest number between",num1,",",num2,"and",num3,"is",largest)
nee
rin
4. Python program to find the sum of natural numbers up to n where n is provided by user
num = 407
wwif (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
w
else:
break
.Ea
print(num,"is a prime number")
sy E
# if input number is less than
ngi
# or equal to 1, it is not prime
else:
print(num,"is not a prime number")
nee
rin
6. Program to display the Fibonacci sequence up to n-th term where n is provided by the
user
ww
7. Python Program to Check Armstrong Number
wnum = 1634
.Ea
sy E
# Changed num variable to string,
# and calculated the length (number of digits)
order = len(str(num))
ngi
# initialize sum
sum = 0 nee
# find the sum of the cube of each digit rin
temp = num
while temp > 0: g .ne
digit = temp % 10
sum += digit ** order
temp //= 10
t
# display the result
if num == sum:
print(num,"is an Armstrong number")
else:
print(num,"is not an Armstrong number")
X = [[12,7,3],
[4 ,5,6],
ww
[7 ,8,9]]
Y = [[5,8,1],
w
[6,7,3],
[4,5,9]]
.Ea
result = [[0,0,0],
[0,0,0],
sy E
[0,0,0]]
ngi
# iterate through rows
for i in range(len(X)): nee
# iterate through columns
rin
for j in range(len(X[0])):
result[i][j] = X[i][j] + Y[i][j] g .ne
for r in result:
print(r) t
10. Program to multiply two matrices using nested loops
# 3x3 matrix
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
[6,7,3,0],
[4,5,9,1]]
# result is 3x4 Download From : www.EasyEngineering.net
www.rejinpaul.com
24
result = [[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
ww for r in result:
print(r)
w .Ea
11. Program to transpose a matrix using nested loop
X = [[12,7],
[4 ,5],
sy E
[3 ,8]]
ngi
result = [[0,0,0],
[0,0,0]] nee
rin
# iterate through rows
for i in range(len(X)):
# iterate through columns
g .ne
for j in range(len(X[0])):
result[j][i] = X[i][j] t
for r in result:
print(r)
12. Program to sort alphabetically the words form a string provided by the user
ww
13. Python program to find the H.C.F of two input number
w
# define a function
.Ea
def computeHCF(x, y):
sy E
# choose the smaller number
if x > y:
smaller = y
else: ngi
smaller = x
for i in range(1, smaller+1): nee
if((x % i == 0) and (y % i == 0)):
rin
hcf = i
return hcf
g .ne
num1 = 54
num2 = 24
t
# take input from the user
# num1 = int(input("Enter first number: "))
# num2 = int(input("Enter second number: "))
list = [4,1,2,5,3]
#set up array Download From : www.EasyEngineering.net
www.rejinpaul.com
26
ww first = 0
last = len(item_list)-1
found = False
.Ea
mid = (first + last)//2
if item_list[mid] == item :
sy E
else:
found = True
ngi
if item < item_list[mid]:
last = mid - 1
else:
first = mid + 1 nee
return found
rin
print(binary_search([1,2,3,5,8], 6))
print(binary_search([1,2,3,5,8], 5))
g .ne
16. Program to find Fibonacci series upto n t
>>> def fib(n): # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a < n:
... print(a)
... a, b = b, a+b
...
>>> # Now call the function we just defined:
... fib(2000)
LISTS
A list is a sequence of values. In a string, the values are characters; in a list, they can
be any type. The values in a list are called elements or sometimes items.
There are several ways to create a new list; the simplest is to enclose the elements in
squarebrackets ([ and ]):
[10, 20, 30, 40]
['crunchy frog', 'ram bladder', 'lark vomit']
ww The first example is a list of four integers. The second is a list of three strings. The
elements of a list don’t have to be the same type. The following list contains a string, a float,
an integer, and (lo!) another list:
w.E
['spam', 2.0, 5, [10, 20]]
asy
A list within another list is nested. A list that contains no elements is called an empty
list; you can create one with empty brackets, [].
En
As you might expect, you can assign list values to variables:
>>> cheeses = ['Cheddar', 'Edam', 'Gouda']
>>> numbers = [17, 123] gin
>>> empty = []
>>> print cheeses, numbers, empty eer
['Cheddar', 'Edam', 'Gouda'] [17, 123] []
ing
Lists are mutable
.ne
t
The syntax for accessing the elements of a list is the same as for accessing the
characters of a string—the bracket operator. The expression inside the brackets specifies the
index.
Remember that the indices start at 0:
>>> print cheeses[0]
Cheddar
Unlike strings, lists are mutable. When the bracket operator appearsFrom
Download on the left side of
: www.EasyEngineering.net
anassignment, it identifies the element of the list that will be assigned.
>>> numbers = [17, 123]
>>> numbers[1] = 5
>>> print numbers
[17, 5]
ww
>>> 'Brie' in cheeses
False
w.E
Traversing a list
The most common way to traverse the elements of a list is with a for loop. The syntax
asy
is the same as for strings:
Although a list can contain another list, the nested list still counts as a single element.
The length of this list is four:
['spam', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]]
List operations
The + operator concatenates lists:
>>> a = [1, 2, 3]
Download From : www.EasyEngineering.net
The first example repeats [0] four times. The second example repeats the list [1, 2, 3]
three times.
ww
List slices
The slice operator also works on lists:
>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> t[1:3]
['b', 'c']
w.E
>>> t[:4]
['a', 'b', 'c', 'd']asy
>>> t[3:]
En
['d', 'e', 'f']
gin
eer
If you omit the first index, the slice starts at the beginning. If you omit the second, the
slice goes to the end. So if you omit both, the slice is a copy of the whole list.
>>> t[:]
['a', 'b', 'c', 'd', 'e', 'f'] ing
.ne
t
Since lists are mutable, it is often useful to make a copy before performing operations
that fold, spindle or mutilate lists.
A slice operator on the left side of an assignment can update multiple elements:
>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> t[1:3] = ['x', 'y']
>>> print t
['a', 'x', 'y', 'd', 'e', 'f']
List methods
Python provides methods that operate on lists. For example, append adds a new
element to the end of a list:
>>> t = ['a', 'b', 'c']
>>> t.append('d')
>>> print t
['a', 'b', 'c', 'd']
extend takes a list as an argument and appends all of the elements:Download From : www.EasyEngineering.net
>>> t1 = ['a', 'b', 'c']
>>> t2 = ['d', 'e']
>>> t1.extend(t2)
>>> print t1
['a', 'b', 'c', 'd', 'e']
ww
List Loop
List methods are all void; they modify the list and return None.
In Python lists are considered a type of iterable . An iterable is a data type that can
w.E
return its elements separately, i.e., one at a time.
for <item> in <iterable>:
Eg:
<body>
asy
En
>>>names = ["Uma","Utta","Ursula","Eunice","Unix"]
>>>for name in names:
...print("Hi "+ name +"!") gin
Map, filter and reduce eer
ing
To add up all the numbers in a list, you can use a loop like this:
def add_all(t):
total = 0
.ne
t
for x in t:
total += x
return total
total is initialized to 0. Each time through the loop, x gets one element from the list.
The += operator provides a short way to update a variable. This augmented assignment
statement:
total += x
is equivalent to:
total = total + x
As the loop executes, total accumulates the sum of the elements; a variable used this
way is sometimes called an accumulator.
Adding up the elements of a list is such a common operation that Python provides it as a
built-in function, sum:
>>> t = [1, 2, 3]
Download From : www.EasyEngineering.net
An operation like this that combines a sequence of elements into a single value is
sometimescalled reduce.
Deleting elements
There are several ways to delete elements from a list. If you know the index of the
elementyou want, you can use pop:
>>> t = ['a', 'b', 'c']
>>> x = t.pop(1)
>>> print t
['a', 'c']
>>> print x
b
ww pop modifies the list and returns the element that was removed. If you don’t provide
w.E
an index, it deletes and returns the last element.
If you don’t need the removed value, you can use the del operator:
asy
>>> t = ['a', 'b', 'c']
>>> del t[1]
>>> print t
En
['a', 'c']
gin
eer
If you know the element you want to remove (but not the index), you can use remove:
>>> t = ['a', 'b', 'c']
>>> t.remove('b')
>>> print t ing
['a', 'c']
.ne
The return value from remove is None.
To remove more than one element, you can use del with a slice index:
t
>>> t = ['a', 'b', 'c', 'd', 'e', 'f']
>>> del t[1:5]
>>> print t
['a', 'f']
As usual, the slice selects all the elements up to, but not including, the second index.
ww
>>> delimiter = '-'
>>> s.split(delimiter)
['spam', 'spam', 'spam']
w.E
join is the inverse of split. It takes a list of strings and concatenates the elements. join
is a string method, so you have to invoke it on the delimiter and pass the list as a parameter:
asy
>>> t = ['pining', 'for', 'the', 'fjords']
>>> delimiter = ' '
>>> delimiter.join(t)
En
'pining for the fjords'
gin
eer
In this case the delimiter is a space character, so join puts a space between words. To
concatenate strings without spaces, you can use the empty string, '', as a delimiter.
We know that a and b both refer to a string, but we don’t know whether they refer to
the same string. There are two possible states, in one case, a and b refer to two different
objects that have the same value. In the second case, they refer to the same object.
To check whether two variables refer to the same object, you can use the is operator.
>>> a = 'banana'
>>> b = 'banana'
>>> a is b
True
In this case we would say that the two lists are equivalent, because they have the
same elements,but not identical, because they are not the same object. If two objects are
identical, they are also equivalent, but if they are equivalent, they are not necessarily
identical. Until now, we have been using “object” and “value” interchangeably, but it is more
precise to say that an object has a value. If you execute [1,2,3], you get a list object whose
value is a sequence of integers. If another list has the same elements, we say it has the same
value, but it is not the same object.
ww
Aliasing
If a refers to an object and you assign b = a, then both variables refer to the same
object:
w.E
>>> a = [1, 2, 3]
>>> b = a
>>> b is a asy
True
En
gin
The association of a variable with an object is called a reference. In this example,
there are two references to the same object.
eer
An object with more than one reference has more than one name, so we say that the
object is aliased.
ing
If the aliased object is mutable, changes made with one alias affect the other:
.ne
t
>>> b[0] = 17
>>> print a
[17, 2, 3]
It almost never makes a difference whether a and b refer to the same string or not.
Download From : www.EasyEngineering.net
List arguments
When you pass a list to a function, the function gets a reference to the list. If the
ww
function modifies a list parameter, the caller sees the change. For example, delete_head
removes the first element from a list:
def delete_head(t):
del t[0]
w.E
asy
Here’s how it is used:
>>> letters = ['a', 'b', 'c']
>>> delete_head(letters)
En
>>> print letters
['b', 'c'] gin
eer
The parameter t and the variable letters are aliases for the same object.
ing
It is important to distinguish between operations that modify lists and operations that create
new lists. For example, the append method modifies a list, but the + operator creates a new
list:
.ne
t
>>> t1 = [1, 2]
>>> t2 = t1.append(3)
>>> print t1
[1, 2, 3]
>>> print t2
None
>>> t3 = t1 + [4]
>>> print t3
[1, 2, 3, 4]
This difference is important when you write functions that are supposed to modify
lists.
For example, this function does not delete the head of a list:
def bad_delete_head(t):
t = t[1:] # WRONG!
The slice operator creates a new list and the assignment makes t refer
Download to it,
From but none of
: www.EasyEngineering.net
that has any effect on the list that was passed as an argument.
An alternative is to write a function that creates and returns a new list. For example, tail
returns all but the first element of a list:
def tail(t):
return t[1:]
This function leaves the original list unmodified. Here’s how it is used:
>>> letters = ['a', 'b', 'c']
>>> rest = tail(letters)
>>> print rest
['b', 'c']
TUPLES
ww
Tuples are immutable
A tuple is a sequence of values. The values can be any type, and they are indexed by
w.E
integers, so in that respect tuples are a lot like lists. The important difference is that tuples are
immutable. Syntactically, a tuple is a comma-separated list of values:
asy
>>> t = 'a', 'b', 'c', 'd', 'e'
En
Although it is not necessary, it is common to enclose tuples in parentheses:
>>> t = ('a', 'b', 'c', 'd', 'e')
gin
eer
To create a tuple with a single element, you have to include a final comma:
>>> t1 = 'a',
>>> type(t1)
<type 'tuple'> ing
.ne
t
A value in parentheses is not a tuple:
>>> t2 = ('a')
>>> type(t2)
<type 'str'>
Another way to create a tuple is the built-in function tuple. With no argument, it creates an
empty tuple:
>>> t = tuple()
>>> print t
()
If the argument is a sequence (string, list or tuple), the result is a tuple with the elements of
the sequence:
>>> t = tuple('lupins')
>>> print t
('l', 'u', 'p', 'i', 'n', 's')
Download From : www.EasyEngineering.net
But if you try to modify one of the elements of the tuple, you get an error:
>>> t[0] = 'A'
TypeError: object doesn't support item assignment
ww
You can’t modify the elements of a tuple, but you can replace one tuple with another:
>>> t = ('A',) + t[1:]
>>> print t
w.E
('A', 'b', 'c', 'd', 'e')
gin
you have to use a temporary variable. For example, to swap a and b:
>>> temp = a
>>> a = b
>>> b = temp eer
ing
This solution is cumbersome; tuple assignment is more elegant:
>>> a, b = b, a
.ne
t
The left side is a tuple of variables; the right side is a tuple of expressions. Each value
is assigned to its respective variable. All the expressions on the right side are evaluated before
any of the assignments.
The number of variables on the left and the number of values on the right have to be the
same:
>>> a, b = 1, 2, 3
ValueError: too many values to unpack
More generally, the right side can be any kind of sequence (string, list or tuple). For
example, to split an email address into a user name and a domain, you could write:
>>> addr = '[email protected]'
>>> uname, domain = addr.split('@')
The return value from split is a list with two elements; the first element is assigned to
uname, the second to domain.
Download From : www.EasyEngineering.net
ww
(2, 1)
.ne
sequence. min_max computes both and returns a tuple of two values.
The gather parameter can have any name you like, but args is conventional. Here’s howthe
function works:
>>> printall(1, 2.0, '3')
(1, 2.0, '3')
The complement of gather is scatter. If you have a sequence of values and you want
to pass it to a function as multiple arguments, you can use the * operator. For example,
divmod takes exactly two arguments; it doesn’t work with a tuple:
Download From : www.EasyEngineering.net
ww
Lists and tuples
zip is a built-in function that takes two or more sequences and “zips” them into a list
of tuples where each tuple contains one element from each sequence. In Python 3, zip returns
w.E
an iterator of tuples, but for most purposes, an iterator behaves like a list.
asy
This example zips a string and a list:
>>> s = 'abc'
>>> t = [0, 1, 2]
En
>>> zip(s, t)
[('a', 0), ('b', 1), ('c', 2)] gin
eer
The result is a list of tuples where each tuple contains a character from the string and the
corresponding element from the list.
ing
If the sequences are not the same length, the result has the length of the shorter one.
>>> zip('Anne', 'Elk')
.ne
t
[('A', 'E'), ('n', 'l'), ('n', 'k')]
You can use tuple assignment in a for loop to traverse a list of tuples:
t = [('a', 0), ('b', 1), ('c', 2)]
for letter, number in t:
print number, letter
Each time through the loop, Python selects the next tuple in the list and assigns the elements
to letter and number. The output of this loop is:
0a
1b
2c
If you combine zip, for and tuple assignment, you get a useful idiom for traversing two
(or more) sequences at the same time. For example, has_match takes two sequences, t1
and t2, and returns True if there is an index i such that t1[i] == t2[i]:
Download From : www.EasyEngineering.net
If you need to traverse the elements of a sequence and their indices, you can use the built-in
function enumerate:
for index, element in enumerate('abc'):
print index, element
The output of this loop is:
0a
1b
2c
ww
Again.
asy
>>> d = {'a':0, 'b':1, 'c':2}
>>> t = d.items()
>>> print t
En
[('a', 0), ('c', 2), ('b', 1)]
gin
As you should expect from a dictionary, the items are in no particular order. In
eer
Python3, items returns an iterator, but for many purposes, iterators behave like lists. Going in
the other direction, you can use a list of tuples to initialize a new dictionary:
>>> t = [('a', 0), ('c', 2), ('b', 1)]
>>> d = dict(t) ing
>>> print d
.ne
t
{'a': 0, 'c': 2, 'b': 1}
The dictionary method update also takes a list of tuples and adds them, as key-value pairs, to
an existing dictionary. Combining items, tuple assignment and for, you get the idiom for
traversing the keys and values of a dictionary:
for key, val in d.items():
print val, key
It is common to use tuples as keys in dictionaries (primarily because you can’t use lists). For
example, a telephone directory might map from last-name, first-name pairs to telephone
numbers. Assuming that we have defined last, first and number, we could write:
directory[last,first] = number
The expression in brackets is a tuple. We could use tuple assignment to traverse this
dictionary.
ww
w.E
asy
for last, first in directory:
print first, last, directory[last,first]
En
gin
This loop traverses the keys in directory, which are tuples. It assigns the elements of
each tuple to last and first, then prints the name and corresponding telephone number. There
eer
are two ways to represent tuples in a state diagram. The more detailed version shows the
indices and elements just as they appear in a list.
ing
Comparing tuples
.ne
The relational operators work with tuples and other sequences; Python starts by
comparing the first element from each sequence. If they are equal, it goes on to the next
elements, and so on, until it finds elements that differ. Subsequent elements are not
considered (even if they are really big).
t
>>> (0, 1, 2) < (0, 3, 4)
True
>>> (0, 1, 2000000) < (0, 3, 4)
True
The sort function works the same way. It sorts primarily by first element, but in the
caseof a tie, it sorts by second element, and so on.
The first loop builds a list of tuples, where each tuple is a word preceded by its length.
ww
sort compares the first element, length, first, and only considers the second element to break
ties. The keyword argument reverse=True tells sort to go in decreasing order.
The second loop traverses the list of tuples and builds a list of words in descending order of
length.
w.E
asy PYTHON DICTIONARY
Python dictionary is an unordered collection of items. While other compound data
En
types have only value as an element, a dictionary has a key: value pair.
ing
An item has a key and the corresponding value expressed as a pair, key: value. While
values can be of any data type and can repeat, keys must be of immutable type (string,
.ne
number or tuple with immutable elements) and must be unique.
# empty dictionary
my_dict = {}
t
# dictionary with integer keys
my_dict = {1: 'apple', 2: 'ball'}
# using dict()
my_dict = dict({1:'apple', 2:'ball'})
As you can see above, we can also create a dictionary using the built-in function
Download From : dict().
www.EasyEngineering.net
# Output: Jack
print(my_dict['name'])
# Output: 26
print(my_dict.get('age'))
ww
# Trying to access keys which doesn't exist throws error
# my_dict.get('address')
w.E
# my_dict['address']
OUTPUT: Jack
26 asy
En
How to change or add elements in a dictionary?
gin
Dictionary are mutable. We can add new items or change the value of existing items
using assignment operator.
eer
If the key is already present, value gets updated, else a new key: value pair is added to the
dictionary.
my_dict = {'name':'Jack', 'age': 26}
ing
# update value
.ne
t
my_dict['age'] = 27
# add item
my_dict['address'] = 'Downtown'
ww
# Output: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
w.E
# remove an arbitrary item
# Output: (1, 1)
asy
print(squares.popitem())
# Throws Error
# print(squares)
ww
get(key[,d])
(defaults to None).
Return the value of key. If key doesnot exit, return d (defaults to None).
items()
keys()
w.E Return a new view of the dictionary's items (key, value).
Return a new view of the dictionary's keys.
pop(key[,d]) asy
Remove the item with key and return its value or d if key is not found. If
En
d is not provided and key is not found, raises KeyError.
Remove and return an arbitary item (key, value). Raises KeyError if the
popitem()
dictionary is empty.
gin
setdefault(key[,d])
eer
If key is in the dictionary, return its value. If not, insert key with a value
of d and return d (defaults to None).
update([other])
existing keys.
ing
Update the dictionary with the key/value pairs from other, overwriting
values() .ne
Return a new view of the dictionary's values
ww
cmp()
sorted()
Compares items of two dictionaries.
Return a new sorted list of keys in the dictionary.
w.E
Here are some examples that uses built-in functions to work with dictionary.
asy
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Output: 5
print(len(squares))
En
# Output: [1, 3, 5, 7, 9]
print(sorted(squares)) gin
Output: 5
[1, 3, 5, 7, 9] eer
ing
ADVANCED LIST PROCESSING
.ne
List Comprehension
List comprehension is an elegant and concise way to create new list from an existing
list in Python.
t
List comprehension consists of an expression followed by for statement inside square
brackets.
Here is an example to make a list with each item being increasing power of 2.
ww
1. SELECTION SORT PROGRAM
ILLUSTRATIVE PROGRAM
data = [] w.E
asy
print('Selection Sort :')
n = int(raw_input('Enter Number of Elements in the Array: '))
En
for i in range(0, n):
x = raw_input('Enter the Element %d :' %(i+1))
data.append(x)
print('Original Array :') gin
print(data)
print('Intermediate s :') eer
for i in range(0,n-1):
small=int(data[i]) ing
pos=i
for j in range(i+1,n): .ne
if int(data[j])<small:
small=int(data[j])
pos=j
t
temp=data[i]
data[i]=data[pos]
data[pos]=temp
print(data)
print('Sorted Array :')
print(data)
Insertion sort
2. INSERTION SORT PROGRAM
data = []
print('Insertion Sort :')
n = int(raw_input('Enter Number of Elements in the Array: '))
for i in range(0, n):
x = raw_input('Enter the Element %d :' %(i+1))
data.append(x)
Download From : www.EasyEngineering.net
ww mid = len(alist)//2
lefthalf = alist[:mid]
w.E
righthalf = alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0 asy
En
while i < len(lefthalf) and j < len(righthalf):
if int(lefthalf[i]) < int(righthalf[j]):
alist[k]=lefthalf[i]
i=i+1 gin
else:
alist[k]=righthalf[j] eer
j=j+1
k=k+1
while i < len(lefthalf): ing
alist[k]=lefthalf[i]
i=i+1 .ne
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
t
j=j+1
k=k+1
print("Merging ",alist)
data = []
print('Merge Sort :')
n = int(raw_input('Enter Number of Elements in the Array: '))
for i in range(0, n):
x = raw_input('Enter the Element %d :' %(i+1))
data.append(x)
print('Original Array :')
print(data)
print('Intermediate s :')
mergeSort(data)
print('Sorted Array is:')
print(data)
Output:
**
***
******
*****
ww
w.E
asy
En
gin
eer
ing
.ne
t
FILES
File is a named location on disk to store related information. It is used to permanently store
data in a non-volatile memory (e.g. hard disk).
Since, random access memory (RAM) is volatile which loses its data when computer is
turned off, we use files for future use of the data.
When we want to read from or write to a file we need to open it first. When we are done, it
needs to be closed, so that resources that are tied with the file are freed.
Hence, in Python, a file operation takes place in the following order.
1. Open a file
2. Read or write (perform operation)
ww
3. Close the file
Opening a file
w.E
Python has a built-in function open() to open a file. This function returns a file object, also
asy
called a handle, as it is used to read or modify the file accordingly.
>>> f = open("test.txt") # open file in current directory
En
>>> f = open("C:/Python33/README.txt") # specifying full path
gin
We can specify the mode while opening a file. In mode, we specify whether we want to read
'r', write 'w' or append 'a' to the file. We also specify if we want to open the file in text mode
or binary mode.
eer
The default is reading in text mode. In this mode, we get strings when reading from the file.
ing
On the other hand, binary mode returns bytes and this is the mode to be used when dealing
with non-text files like image or exe files.
.ne
Mode Description
Python File Modes
t
'r' Open a file for reading. (default)
Open a file for writing. Creates a new file if it does not exist or truncates the file if it
'w'
exists.
'x' Open a file for exclusive creation. If the file already exists, the operation fails.
Open for appending at the end of the file without truncating it. Creates a new file if it
'a'
does not exist.
't' Open in text mode. (default)
'b' Open in binary mode.
'+' Open a file for updating (reading and w
Hence, when working with files in text mode, it is highly recommended to specify the
encoding type.
f = open("test.txt",mode = 'r',encoding = 'utf-8')
Closing a File
When we are done with operations to the file, we need to properly close it.
Closing a file will free up the resources that were tied with the file and is done using the
close() method.
Python has a garbage collector to clean up unreferenced objects but, we must not rely on it to
close the file.
f = open("test.txt",encoding = 'utf-8')
# perform file operations
f.close()
ww
This method is not entirely safe. If an exception occurs when we are performing some
w.E
operation with the file, the code exits without closing the file.
A safer way is to use a try...finally block.
try:
asy
f = open("test.txt",encoding = 'utf-8')
# perform file operations
finally: En
f.close()
gin
eer
This way, we are guaranteed that the file is properly closed even if an exception is raised,
causing program flow to stop.
ing
The best way to do this is using the with statement. This ensures that the file is closed when
the block inside with is exited.
.ne
We don't need to explicitly call the close() method. It is done internally.
with open("test.txt",encoding = 'utf-8') as f:
# perform file operations t
Reading and writing
A text file is a sequence of characters stored on a permanent medium like a hard drive, flash
memory, or CD-ROM.
To write a file, you have to open it with mode 'w' as a second parameter:
>>> fout = open('output.txt', 'w')
>>> print fout
<open file 'output.txt', mode 'w' at 0xb7eb2410>
If the file already exists, opening it in write mode clears out the old data and starts fresh,
so be careful! If the file doesn’t exist, a new one is created.
The write method puts data into the file.
>>> line1 = "This here's the wattle,\n"
>>> fout.write(line1) Download From : www.EasyEngineering.net
When you are done writing, you have to close the file.
>>> fout.close()
Format operator
The argument of write has to be a string, so if we want to put other values in a file, we have
to convert them to strings. The easiest way to do that is with str:
>>> x = 52
>>> fout.write(str(x))
ww
An alternative is to use the format operator, %. When applied to integers, % is the modulus
operator. But when the first operand is a string, % is the format operator.
w.E
The first operand is the format string, which contains one or more format sequences, which
specify how the second operand is formatted. The result is a string.
asy
For example, the format sequence '%d' means that the second operand should be formatted as
an integer (d stands for “decimal”):
>>> camels = 42
>>> '%d' % camels En
'42'
gin
eer
The result is the string '42', which is not to be confused with the integer value 42.
A format sequence can appear anywhere in the string, so you can embed a value in a
sentence:
ing
>>> camels = 42
>>> 'I have spotted %d camels.' % camels .ne
'I have spotted 42 camels.'
t
If there is more than one format sequence in the string, the second argument has to be a tuple.
Each format sequence is matched with an element of the tuple, in order.
The following example uses '%d' to format an integer, '%g' to format a floating-point number
and '%s' to format a string:
>>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels')
'In 3 years I have spotted 0.1 camels.'
The number of elements in the tuple has to match the number of format sequences in the
string. Also, the types of the elements have to match the format sequences:
cwd stands for “current working directory.” The result in this example is /home/dinsdale,
which is the home directory of a user named dinsdale.
A string like cwd that identifies a file is called a path. A relative path starts from the current
ww
directory; an absolute path starts from the topmost directory in the file system.
The paths we have seen so far are simple filenames, so they are relative to the current
w.E
directory. To find the absolute path to a file, you can use os.path.abspath:
>>> os.path.abspath('memo.txt')
asy
'/home/dinsdale/memo.txt'
En
os.path.exists checks whether a file or directory exists:
>>> os.path.exists('memo.txt')
True
gin
eer
If it exists, os.path.isdir checks whether it’s a directory:
>>> os.path.isdir('memo.txt')
False
ing
>>> os.path.isdir('music')
True .ne
Similarly, os.path.isfile checks whether it’s a file.
os.listdir returns a list of the files (and other directories) in the given directory:
t
>>> os.listdir(cwd)
['music', 'photos', 'memo.txt']
To demonstrate these functions, the following example “walks” through a directory, prints
the names of all the files, and calls itself recursively on all the directories.
def walk(dirname):
for name in os.listdir(dirname):
path = os.path.join(dirname, name)
if os.path.isfile(path):
print path
else:
walk(path)
Download From : www.EasyEngineering.net
os.path.join takes a directory and a file name and joins them into a complete path.
Download From : www.EasyEngineering.net
EXCEPTION
Python (interpreter) raises exceptions when it encounters errors. Error caused by not
following the proper structure (syntax) of the language is called syntax error or parsing error.
>>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
Errors can also occur at runtime and these are called exceptions. They occur, for example,
when a file we try to open does not exist (FileNotFoundError), dividing a number by zero
(ZeroDivisionError), module we try to import is not found (ImportError) etc.
Whenever these type of runtime error occur, Python creates an exception object. If not
ww
handled properly, it prints a traceback to that error along with some details about why that
error occurred.
>>> 1 / 0
w.E
Traceback (most recent call last):
asy
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
En
>>> open("imaginary.txt")
Traceback (most recent call last): gin
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module> eer
ing
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
>>> locals()['__builtins__']
ww
ReferenceError
Raised when a weak reference proxy is used to access a garbage
collected referent.
RuntimeError
w.E Raised when an error does not fall under any other category.
Raised by next() function to indicate that there is no further item to
StopIteration
asy be returned by iterator.
SyntaxError
IndentationError En
Raised by parser when syntax error is encountered.
Raised when there is incorrect indentation.
TabError gin
Raised when indentation consists of inconsistent tabs and spaces.
SystemError
eer
Raised when interpreter detects internal error.
SystemExit
ing
Raised by sys.exit() function.
Raised when a function or operation is applied to an object of
TypeError
incorrect type.
.ne
UnboundLocalError
UnicodeError
Raised when a reference is made to a local variable in a function or
method, but no value has been bound to that variable.
Raised when a Unicode-related encoding or decoding error occurs.
t
UnicodeEncodeError Raised when a Unicode-related error occurs during encoding.
UnicodeDecodeError Raised when a Unicode-related error occurs during decoding.
UnicodeTranslateError Raised when a Unicode-related error occurs during translating.
Raised when a function gets argument of correct type but improper
ValueError
value.
ZeroDivisionError Raised when second operand of division or modulo operation is zero.
We can handle these built-in and user-defined exceptions in Python using try, except and
finally statements.
ww
It is up to us, what operations we perform once we have caught the exception. Here is a
simple example.
w.E
# import module sys to get the type of exception
import sys
asy
randomList = ['a', 0, 2]
The entry is 0
Oops! <class 'ZeroDivisionError' > occured.
Next entry.
The entry is 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. Download From : www.EasyEngineering.net
If no exception occurs, except block is skipped and normal flow continues. But if any
Download From : www.EasyEngineering.net
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.
try...finally
The try statement in Python can have an optional finally clause. This clause is
executed no matter what, and is generally used to release external resources.
For example, we may be connected to a remote data center through the network or working
with a file or working with a Graphical User Interface (GUI).
In all these circumstances, we must clean up the resource once used, whether it was
successful or not. These actions (closing a file, GUI or disconnecting from network) are
performed in the finally clause to guarantee execution.
Here is an example of file operations to illustrate this.
try:
ww
f = open("test.txt",encoding = 'utf-8')
w.E
# perform file operations
finally:
f.close()
asy
EnMODULES
Any file that contains Python code can be imported as a module. For example, suppose
gin
you have a file named wc.py with the following code:
def linecount(filename):
count = 0
for line in open(filename): eer
count += 1
ing
return count
print linecount('wc.py') .ne
You can also import it like this:
>>> import wc
t
If you run this program, it reads itself and prints the number of lines in the file, which is 7.
7
Now you have a module object wc:
>>> print wc
<module 'wc' from 'wc.py'>
That provides a function called linecount:
>>> wc.linecount('wc.py')
7
So that’s how you write modules in Python.
The only problem with this example is that when you import the module it executes the
test code at the bottom. Normally when you import a module, it defines new functions but
it doesn’t execute them.
Programs that will be imported as modules often use the following idiom:
if __name__ == '__main__': Download From : www.EasyEngineering.net
print linecount('wc.py')
Download From : www.EasyEngineering.net
__name__ is a built-in variable that is set when the program starts. If the program is running
as a script, __name__ has the value __main__; in that case, the test code is executed.
Otherwise, if the module is being imported, the test code is skipped.
Eg:
# import module
import calendar
yy = 2017
mm = 8
ww
# display the calendar
w.E
print(calendar.month(yy, mm))
asy PACKAGE
A package is a collection of modules. A Python package can have sub-packages and
modules.
En
A directory must contain a file named __init__.py in order for Python to consider it as a
gin
package. This file can be left empty but we generally place the initialization code for that
package in this file.
eer
Here is an example. Suppose we are developing a game, one possible organization of
packages and modules could be as shown in the figure below.
ing
.ne
t
If this construct seems lengthy, we can import the module without the package prefix as
follows.
from Game.Level import start
Yet another way of importing just the required function (or class or variable) form a module
within a package would be as follows.
from Game.Level.start import select_difficulty
ww
Now we can directly call this function.
w.E
select_difficulty(2)
asy
Although easier, this method is not recommended. Using the full namespace avoids confusion
and prevents two same identifier names from colliding.
En
While importing packages, Python looks in the list of directories defined in sys.path, similar
as for module search path.
gin
1. Word Count eer
ILLUSTRATION PROGRAM
import sys
file=open("/Python27/note.txt","r+") ing
wordcount={}
for word in file.read().split(): .ne
if word not in wordcount:
wordcount[word] = 1
else:
t
wordcount[word] += 1
file.close();
print ("%-30s %s " %('Words in the File' , 'Count'))
for key in wordcount.keys():
print ("%-30s %d " %(key , wordcount[key]))