Python Programming Notes Paid
Python Programming Notes Paid
1.1 Introduction:
OUTPUT SOURCE
INTERPRETER
6 CODE
7 A compiler
reads the program and translates it into a low-level program, which can then be run.
8 In this case, the high-level program is called the source code, and the translated
program is called the object code or the executable. Once a program is compiled, you
can execute it repeatedly without further translation.
10 Many modern languages use both processes. They are first compiled into a lower
level language, called byte code, and then interpreted by a program called a virtual
machine. Python uses both processes, but because of the way programmers interact with
it, it is usually considered an interpreted language.
11 There are two ways to use the Python interpreter: shell mode and script mode. In shell mode,
you type Python statements into the Python shell and the interpreter
This example shows Python being run from a terminal (with $ representing the Unix prompt).
In other development environments, the details of executing programs may differ. IDLE
simplifies the whole process by presenting interpreter windows and a text editor within the
same application. You can run a script in IDLE by either choosing Run → Run Module or
pressing F5. Most programs are more interesting than this one. The examples in this book use
both the Python interpreter and scripts. You will be able to tell which is intended since shell
mode examples (i.e. entering lines directly into the interpreter) will always start with the
1
You can also run the python interpreter by just entering the command python in a terminal. To exit from the interpreter type exit() and hit
return, or press Ctrl-D on a new line.
2
The print statement is one of the changes between Python 2.x and Python 3.x. In Python 3.x, print is a function and not a
2
Python prompt, >>>. Working in shell mode is convenient for testing short bits of code because
you get immediate feedback. Think of it as scratch paper used to help you work out problems.
Anything longer than a few lines should be put into a script so it can be saved for future use.
2. 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 copyrighted. Like Perl, Python source code is now available under the GNU
General Public License (GPL).
• 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 1.0 was released in November 1994. In 2000, Python 2.0 was released. Python
2.7.11 is the latest edition of Python 2.
• Meanwhile, Python 3.0 was released in 2008. Python 3 is not backward compatible with
Python 2. The emphasis in Python 3 had been on the removal of duplicate programming
constructs and modules so that "There should be one -- and preferably
only one -- obvious way to do it." Python 3.5.1 is the latest version of Python 3.
3. Features of python:
• Easy-to-read: Python code is more clearly defined and visible to the eyes.
• Easy-to-maintain: Python's source code is fairly easy-to-maintain.
• A broad standard library: Python's bulk of the library is very portable and
crossplatform compatible on UNIX, Windows, and Macintosh.
• Interactive Mode: Python has support for an interactive mode, which allows interactive
testing and debugging of snippets of code.
3
• Portable: Python can run on a wide variety of hardware platforms and has the same
interface on all platforms.
• Extendable: 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. •
Databases: Python provides interfaces to all major commercial databases.
• 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. A few are
listed below- • It supports functional and structured programming methods as well as
OOP.
• It can be used as a scripting language or can be compiled to byte-code for building large
applications.
• It provides very high-level dynamic data types and supports dynamic type checking.
• It supports automatic garbage collection.
• It can be easily integrated with C, C++, COM, ActiveX, CORBA, and Java.
4. Installing Python:
Windows platform
Binaries of latest version of Python 3 (Python 3.5.1) are available on this download page The
following different installation options are available.
• Windows x86-64 embeddable zip file Windows x86-64 executable installer
Windows x86-64 web-based installer
• Windows x86 embeddable zip file Windows x86 executable installer
• Windows x86 web-based installer
Note:In order to install Python 3.5.1, minimum OS requirements are Windows 7 with SP1. For
versions 3.0 to 3.4.x, Windows XP is acceptable.
Linux platform
Different flavors of Linux use different package managers for installation of new packages. On
Ubuntu Linux, Python 3 is installed using the following command from the terminal. $sudo
5
Download Gzipped source tarball from Python's download
URL: https://www.python.org/ftp/python/3.5.1/Python-
3.5.1.tgz Extract the tarball tar xvfz Python-3.5.1.tgz Configure
and Install:
cd Python-3.5.1
./configure --prefix=/opt/python3.5.1 make
sudo make install
Mac OS
Download Mac OS installers from this URL:https://www.python.org/downloads/mac-osx/ •
Mac OS X 64-bit/32-bit installer : python-3.5.1-macosx10.6.pkg
Setting up PATH
Programs and other executable files can be in many directories. Hence, the operating
systems provide a search path that lists the directories that it searches for executables. The
important features are-
• The path is stored in an environment variable, which is a named string maintained by
the operating system. This variable contains information available to the command
shell and other programs.
• In Mac OS, the installer handles the path details. To invoke the Python interpreter from
any particular directory, you must add the Python directory to your path.
To add the Python directory to the path for a particular session in Unix- • In the csh shell:
type setenv PATH "$PATH:/usr/local/bin/python3" and press Enter.
7
To add the Python directory to the path for a particular session in Windows-
At the command prompt : type path %path%;C:\Python and press Enter.
Note: C:\Python is the path of the Python directory.
Variable Description
8
(1) Interactive Interpreter
You can start Python from Unix, DOS, or any other system that provides you a commandline
interpreter or shell window.
Enter python the command line.
Start coding right away in the interactive interpreter.
$python # Unix/Linux or
python%
# Unix/Linux or
C:>python
# Windows/DOS
-X disable class-based built-in exceptions (just use strings); obsolete starting with
version 1.6
9
$python script.py # Unix/Linux or
python% script.py
# Unix/Linux or
C:>python script.py
# Windows/DOS
10
You can run Python from a Graphical User Interface (GUI) environment as well, if you have a
GUI application on your system that supports Python. • Unix: IDLE is the very first
Unix IDE for Python.
• Windows: PythonWin is the first Windows interface for Python and is an IDE with a
GUI.
• Macintosh: The Macintosh version of Python along with the IDLE IDE is available from
the main website, downloadable as either MacBinary or BinHex'd files.
If you are not able to set up the environment properly, then you can take the help of your
system admin. Make sure the Python environment is properly set up and working perfectly
fine.
6. Debugging:
Syntax errors
Python can only execute a program if the program is syntactically correct; otherwise,
the process fails and returns an error message. Syntax refers to the structure of a
program and the rules about that structure. For example, in English, a sentence must
begin with a capital letter and end with a period. this sentence contains a syntax error.
So does this one
For most readers, a few syntax errors are not a significant problem, which is why we
can read the poetry of e. e. cummings without spewing error messages. Python is not
so forgiving. If there is a single syntax error anywhere in your program, Python will
print an error message and quit, and you will not be able to run your program.
During the first few weeks of your programming career, you will probably spend a
lot of time tracking down syntax errors. As you gain experience, though, you will
make fewer syntax errors and find them faster.
Runtime errors
The second type of error is a runtime error, so called because the error does not appear
until you run the program. These errors are also called exceptions because they
usually indicate that something exceptional (and bad) has happened. Runtime errors
are rare in the simple programs you will see in the first few chapters, so it might be a
while before you encounter one.
Semantic errors
The third type of error is the semantic error. If there is a semantic error in your
program, it will run successfully, in the sense that the computer will not generate any
error messages, but it will not do the right thing. It will do something else.
Specifically, it will do what you told it to do.
The problem is that the program you wrote is not the program you wanted to write.
The meaning of the program (its semantics) is wrong. Identifying semantic errors
can be tricky because it requires you to work backward by looking at the output of
the program and trying to figure out what it is doing.
One of the most important skills you will acquire is debugging. Although it can be
frustrating, debugging is one of the most intellectually rich, challenging, and interesting
parts of programming.
In some ways, debugging is like detective work. You are confronted with clues, and you have
to infer the processes and events that led to the results you see.
Debugging is usually a trial and error process. Once you have an idea what is going
wrong, you modify your program and try again. If your hypothesis was correct, then you
can predict the result of the modification, and you take a step closer to a working
program. If your hypothesis was wrong, you have to come up with a new one. As
Sherlock Holmes pointed out, “When you have eliminated the impossible, whatever
remains, however improbable, must be the truth.” (A. Conan Doyle, The Sign of Four )
For some people, programming and debugging are the same thing. That is, programming
is the process of gradually debugging a program until it does what you want. The idea is
that you should start with a program that does something and make small modifications,
debugging them as you go, so that you always have a working program.
For example, Linux is an operating system that contains thousands of lines of code, but it
started out as a simple program Linus Torvalds used to explore the Intel 80386 chip. According
to Larry Greenfield, one of Linus’s earlier projects was a program that would switch between
printing AAAA and BBBB. This later evolved into Linux (The Linux Users’ Guide Beta
Version 1).
10
Programming languages are formal languages that have been designed to express
computations.
Formal languages tend to have strict rules about syntax. For example, 3+3=6 is a
syntactically correct mathematical statement, but 3=+6$ is not. H 2O is a syntactically
correct chemical name, but 2Zz is not. Syntax rules come in two flavors, pertaining to
tokens and structure. Tokens are the basic elements of the language, such as words,
numbers, and chemical elements. One of the problems with 3=+6$ is that $ is not a legal
token in mathematics (at least as far as we know). Similarly, 2 Zz is not legal because there
is no element with the abbreviation Zz. The second type of syntax rule pertains to the
structure of a statement— that is, the way the tokens are arranged. The statement 3=+6$
is structurally illegal because you can’t place a plus sign immediately after an equal sign.
Similarly, molecular formulas have to have subscripts after the element name, not before.
When you read a sentence in English or a statement in a formal language, you have to
figure out what the structure of the sentence is (although in a natural language you do this
subconsciously). This process is called parsing. For example, when you hear the
sentence, “The brown dog barked”, you understand that the brown dog is the subject and
barked is the verb. Once you have parsed a sentence, you can figure out what it means, or
the semantics of the sentence. Assuming that you know what a dog is and what it means to
bark, you will understand the general implication of this sentence.
Although formal and natural languages have many features in common—tokens,
structure, syntax, and semantics—there are many differences:
ambiguity: Natural languages are full of ambiguity, which people deal with by using
contextual clues and other information. Formal languages are designed to be nearly
or completely unambiguous, which means that any statement has exactly one
meaning, regardless of context.
redundancy: In order to make up for ambiguity and reduce misunderstandings, natural
languages employ lots of redundancy. As a result, they are often verbose. Formal languages
are less redundant and more concise.
literalness: Natural languages are full of idiom and metaphor. If someone says, “The penny
dropped”, there is probably no penny and nothing dropped. Formal languages mean
exactly what they say.
People who grow up speaking a natural language—everyone—often have a hard time
adjusting to formal languages. In some ways, the difference between formal and natural
language is like the difference between poetry and prose, but more so:
Poetry: Words are used for their sounds as well as for their meaning, and the whole poem
together creates an effect or emotional response. Ambiguity is not only common but often
deliberate.
Prose: The literal meaning of words is more important, and the structure contributes
11
more meaning. Prose is more amenable to analysis than poetry but still often
ambiguous.
Programs: The meaning of a computer program is unambiguous and literal, and can be understood
entirely by analysis of the tokens and structure.
Here are some suggestions for reading programs (and other formal languages). First,
remember that formal languages are much more dense than natural languages, so it takes
longer to read them. Also, the structure is very important, so it is usually not a good idea to
read from top to bottom, left to right. Instead, learn to parse the program in your head,
identifying the tokens and interpreting the structure. Finally, the details matter. Little things
like spelling errors and bad punctuation, which you can get away with in natural languages,
can make a big difference in a formal language.
Braces are used for different purposes. If you just want a list to contain some elements and
organize them by index numbers (starting from 0), just use the [] and add elements as
necessary. {} are special in that you can give custom id's to values like a = {"John": 14}.
Now, instead of making a list with ages and remembering whose age is where, you can just
access John's age by a["John"].
The [] is called a list and {} is called a dictionary (in Python). Dictionaries are basically a
convenient form of list which allow you to access data in a much easier way.
However, there is a catch to dictionaries. Many times, the data that you put in the dictionary
doesn't stay in the same order as before. Hence, when you go through each value one by one, it
won't be in the order you expect. There is a special dictionary to get around this, but you have to
add this line from collections import OrderedDict and replace {} with OrderedDict(). But, I
don't think you will need to worry about that for now.
>>> print(4)
4
If you are not sure what type a value has, the interpreter can tell you.
>>> type("Hello, World!")
12
<class ’str’>
>>> type(17)
< class ’int’>
Strings belong to the type str and integers belong to the type int. Less obviously, numbers
with a decimal point belong to a type called float, because these numbers
are represented in a format called floating-point.
>>> type(3.2)
<class ’float’>
What about values like “17” and “3.2”? They look like numbers, but they are in
quotation marks like strings.
>>> type("17")
<class ’str’>
>>> type("3.2")
<class ’str’>
They’re strings. Strings in Python can be enclosed in either single quotes (’) or
double quotes (”):
Double quoted strings can contain single quotes inside them, as in "What’s your name?",
and single quoted strings can have double quotes inside them, as in ’The cat said
"Meow!"’.
When you type a large integer, you might be tempted to use commas between groups of three
digits, as in 1,000,000.
2. Variables:
One of the most powerful features of a programming language is the ability to manipulate
variables. A variable is a name that refers to a value. The assignment
statement creates new variables and assigns them values:
>>> message = "What’s your name?"
>>> n = 17
>>> pi = 3.14159
This example makes three assignments. The first assigns the string "What’s your
name?" to a new variable named message. The second assigns the integer 17 to n, and
the third assigns the floating-point number 3.14159 to pi. The assignment operator, =,
should not be confused with an equals sign (even though it uses the same character).
Assignment operators link a name, on the left hand side of the operator,
with a value, on the right hand side. This is why you will get an error if you enter:
>>> 17 = n
A common way to represent variables on paper is to write the name with an arrow
pointing to the variable’s value. This kind of figure is called a state diagram because it
shows what state each of the variables is in (think of it as the variable’s state of mind).
This diagram shows the result of the assignment statements:
messag "What’s your
name?"
e n pi 17
3.14159
The print statement also works with variables.
In each case the result is the value of the variable. Variables also have types; again,
we can ask the interpreter what they are.
>>> type(message)
<class ’str’>
>>> type(n)
< class ’int’>
>>> type(pi)
< class ’float’>
The type of a variable is the type (or kind) of value it refers to.
17
14
Programmers generally choose names for their variables that are meaningful—they
document what the variable is used for. Variable names can be arbitrarily long. They
can contain both letters and numbers, but they have to begin with a letter. Although it
is legal to use uppercase letters, by convention we don’t. If you do, remember that case
matters. Bruce and bruce are different variables. The underscore character ( ) can
appear in a name. It is often used in names with multiple words, such as myname or
priceofteainchina. If you give a variable an illegal name, you get a syntax error:
>>> 76trombones = "big parade"
SyntaxError: invalid syntax
>>> more$ = 1000000
SyntaxError: invalid syntax
>>> class = "COMP150"
SyntaxError: invalid syntax
76trombones is illegal because it does not begin with a letter. more$ is illegal because it
contains an illegal character, the dollar sign. But what’s wrong with class? It turns out
that class is one of the Python keywords. Keywords define the language’s rules and
structure, and they cannot be used as variable names. Python has thirty-one keywords:
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
4. Type conversion:
Sometimes, you may need to perform conversions between the built-in types. To convert
between types, you simply use the type-name as a function.
There are several built-in functions to perform conversion from one data type to another.
These functions return a new object representing the converted value.
Function Description
int(x [,base])
Converts x to an integer. The base specifies the base if x is a string.
19
chr(x) Converts an integer to a character.
16
Operators are special symbols that represent computations like addition and
multiplication. The values the operator uses are called operands. The following are
all legal Python expressions whose meaning is more or less clear:
The symbols +, -, *, /, have the usual mathematical meanings. The symbol, **, is the
exponentiation operator. The statement, 5 ** 2, means 5 to the power of 2, or 5 squared
in this case. Python also uses parentheses for grouping, so we can force operations to
be done in a certain order just like we can in mathematics.
When a variable name appears in the place of an operand, it is replaced with its value
before the operation is performed. Addition, subtraction, multiplication, and
exponentiation all do what you expect, but you might be surprised by division. The
following operation has an unexpected result:
>>> minute = 59
>>> minute / 60
0 .9833333333333333
The value of minute is 59, and 59 divided by 60 is 0.98333, not 0. The reason for the
discrepancy is that Python is performing integer division3. When both of the operands
are integers, the result must also be an integer, and by convention, integer division
always rounds down, even in cases like this where the next integer is very close. A
possible solution to this problem is to calculate a percentage rather than a fraction:
21
Operators are special symbols that represent computations like addition and multiplication.
The values the operator uses are called operands. The following are
all legal Python expressions whose meaning is more or less clear:
The symbols +, -, *, /, have the usual mathematical meanings. The symbol, **, is the
exponentiation operator. The statement, 5 ** 2, means 5 to the power of 2, or 5 squared
in this case. Python also uses parentheses for grouping, so we can force operations to
be done in a certain order just like we can in mathematics.
When a variable name appears in the place of an operand, it is replaced with its value
before the operation is performed. Addition, subtraction, multiplication, and exponentiation
all do what you expect, but you might be surprised by division. The following operation
has an unexpected result:
>>> minute = 59
>>> minute / 60
0 .9833333333333333
The value of minute is 59, and 59 divided by 60 is 0.98333, not 0. The reason for the
discrepancy is that Python is performing integer division4. When both of the operands
are integers, the result must also be an integer, and by convention, integer division
always rounds down, even in cases like this where the next integer is very close. A
possible solution to this problem is to calculate a percentage rather than a fraction:
Again the result is rounded down, but at least now the answer is approximately correct. Another
alternative is to use floating-point division.
6. Expressions:
The evaluation of an expression produces a value, which is why expressions can appear
on the right hand side of assignment statements. A value all by itself is a
simple expression, and so is a variable.
>>> 17
17
>>> x
2
Confusingly, evaluating an expression is not quite the same thing as printing a value.
>>> message = "What’s your name?"
>>> message
"What’s your name?"
>>> print(message)
What’s your name?
When the Python shell displays the value of an expression, it uses the same format you
would use to enter a value. In the case of strings, that means that it includes the
quotation marks. But the print statement prints the value of the expression, which in
this case is the contents of the string. In a script, an expression all by itself is a legal
statement, but it doesn’t do anything. The script
17
3.2
"Hello, World!"
1+1
produces no output at all. How would you change the script to display the values of these
four expressions?
19
$ python
Python 3.3.2 (default, Dec 10 2013, 11:35:01)
[GCC 4.6.3] on Linux
Type "help", "copyright", "credits", or "license" for more information. >>> On
Windows:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on
win32
Type "copyright", "credits" or "license()" for more information.
>>>
Type the following text at the Python prompt and press Enter-
If you are running the older version of Python (Python 2.x), use of parenthesis as inprint function
is optional. This produces the following result-
Hello, Python!
24
We assume that you have the Python interpreter set in PATH variable. Now, try to run this
program as follows- On Linux
$ python test.py
Hello,
Python!
On Windows
C:\Python34>Python test.py
Let us try another way to execute a Python script in Linux. Here is the modified test.py
file-
#!/usr/bin/python3 print
("Hello, Python!")
We assume that you have Python interpreter available in the /usr/bin directory. Now, try to run
this program as follows-
Hello, Python!
Order of Operations:
When more than one operator appears in an expression, the order of evaluation
depends on the rules of precedence. Python follows the same precedence rules for its
mathematical operators that mathematics does. The acronym PEMDAS is a useful way
to remember the order of operations:
1. Parentheses have the highest precedence and can be used to force an expression
to evaluate in the order you want. Since expressions in parentheses are evaluated
first, 2*(3-1) is 4, and (1+1)**(5-2) is 8. You can also use parentheses to make an
expression easier to read, as in (minute*100)/60, even though it doesn’t change
the result.
2. Exponentiation has the next highest precedence, so 2**1+1 is 3 and not 4, and
3*1**3 is 3 and not 27.
3. Multiplication and Division have the same precedence, which is higher than
Addition and Subtraction, which also have the same precedence. So 2*3-1 yields
5 rather than 4, and 2/3-1 is -1, not 1 (remember that in integer division, 2/3=0).
26
Operators with the same precedence are evaluated from left to right. So in the
expression minute*100/60, the multiplication happens first, yielding 5900/60, which
in turn yields 98. If the operations had been evaluated from right to left, the result
would have been 59 *1, which is 59, which is wrong. Similarly, in evaluating 17-4-3,
17-4 is evaluated first.
If in doubt, use parentheses.
27
The IF statement is similar to that of other languages. The if statement contains a logical
expression using which the data is compared and a decision is made based on the result of the
comparison.
Syntax if expression:
statement(s)
If the boolean expression evaluates to TRUE, then the block of statement(s) inside the if
statement is executed. In Python, statements in a block are uniformly indented after the :
symbol. If boolean expression evaluates to FALSE, then the first set of code after the end of
block is executed.
Flow Diagram
nested if statements You can use one if or else if statement inside another if or
else if statement(s).
Example
28
num = 3 if
num > 0:
print(num, "is a positive number.")
print("This is always printed.")
num = -1 if num > 0:
print(num, "is
a positive number.")
print("This is
also always
printed.")
When variable num is equal to 3, test expression is true and body inside body of if is executed.
If variable num is equal to -1, test expression is false and body inside body of if is skipped.
The print() statement falls outside of the if block (unindented). Hence, it is executed regardless
of the test expression.
2. IF ELSE Statements
An else statement can be combined with an if statement. An else statement contains a block of
code that executes if the conditional expression in the if statement resolves to 0 or a FALSE
value.
29
The else statement is an optional statement and there could be at the most only one else
statement following if.
Syntax
The syntax of the if...else statement is-
Flow Diagram
30
Example
# Program checks if the number is positive or negative
# And displays an appropriate message num
=3
if num >= 0:
print("Positive or Zero")
else:
print("Negative number")
Positive or Zero
In the above example, when num is equal to 3, the test expression is true and body of if is
executed and body of else is skipped.
If num is equal to -5, the test expression is false and body of else is executed and body
25
of if is skipped.
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)
26
Example
# !/usr/bin/python3
# In this program, we input a number
# check if the number is positive or
# negative or zero and display
# an appropriate message
# This time we use nested if
Output 1
Enter a number: 5 Positive
number
Output 2
Enter a number: -1
Negative number
Output 3
Enter a number: 0
Zero Divisible by 3 and 2
enter number5
27
not Divisible by 2 not divisible by 3
1.4 Looping:
1. For:
The for loop in Python is used to iterate over a sequence (list, tuple, string) or other iterable
objects. Iterating over a sequence is called traversal.
Body of for
Here, val is the variable that takes the value of the item inside the sequence on each iteration.
Loop continues until we reach the last item in the sequence. The body of for loop is separated
from the rest of the code using indentation.
# List of numbers
=0
29
36
sum = sum+val
The sum is 48
2. While Loop
The while loop in Python is used to iterate over a block of code as long as the test expression
(condition) is true.
We generally use this loop when we don't know beforehand, the number of times to iterate.
while test_expression:
Body of while
In while loop, test expression is checked first. The body of the loop is entered only if the
test_expression evaluates to True. After one iteration, the test expression is
checked again. This process continues until the test_expression evaluates
to False.
Body starts with indentation and the first unindented line marks the end. Python
interprets any non-zero value as True. None and 0 are interpreted as False.
# numbers upto
# sum = 1+2+3+...+n
# n = int(input("Enter n: ")) n = 10
38
31
sum = 0
i=1
while i <= n:
sum = sum + i
Enter n: 10
The sum is 55
In the above program, the test expression will be True as long as our counter variable i is less
than or equal to n (10 in our program).
We need to increase the value of counter variable in the body of the loop. This is very
important (and mostly forgotten). Failing to do so will result in an infinite loop (never ending
loop). Finally the result is displayed.
3. Nested loops:
Python programming language allows to use one loop inside another loop. Following section
shows few examples to illustrate the concept.
Python Nested if Example
Output 1
Enter a number: 5
Positive number
Output 2
Enter a number: -1
Negative number
Output 3
Enter a number: 0
Zero
The break statement terminates the loop containing it. Control of the program flows to the
statement immediately after the body of the loop.
40
If break statement is inside a nested loop (loop inside another loop), break will terminate the
innermost loop.
Syntax of break
break
Flowchart of break
41
Example: Python break
# Use of break statement inside loop
print("The end")
Output
tr
The end
42
In this program, we iterate through the "string" sequence. We check if the letter is "i", upon
which we break from the loop. Hence, we see in our output that all the letters up till "i" gets
printed. After that, the loop terminates.
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.
Syntax of Continue
continue
Flowchart of continue
The working of continue statement in for and while loop is shown below.
43
Example: Python continue
# Program to show the use of continue statement inside loops
if val == "i":
continue
print(val)
print("The end")
Output
st
44
r
ng
The end
This program is same as the above example except the break statement has been replaced with
continue.
We continue with the loop, if the string is "i", not executing the rest of the block. Hence, we
see in our output that all the letters except "i" gets printed.
45
39
UNIT 2
FUNCTIONS :
>>> print(17 + 3)
20
In reality, the addition has to happen before the printing, so the actions aren’t actually
happening at the same time. The point is that any expression involving numbers,
strings, and variables can follow print:
>>> hour = 21
>>> minute = 1
>>> print("Number of minutes since midnight: ",hour * 60 + minute)
Number of minutes since midnight: 1261
You can also put arbitrary expressions on the right-hand side of an assignment
statement:
This ability may not seem impressive now, but you will see other examples where the
composition makes it possible to express complex computations neatly and
concisely.
Warning: There are limits on where you can use certain expressions. For example,
left-hand side of an assignment statement has to be a variable name, not an expression.
So, the following is illegal:
48
3.2 Function calls
Many common tasks come up time and time again when programming. Instead of
requiring you to constantly reinvent the wheel, Python has a number of built-in
features which you can use. Including so much ready to use code is sometimes
referred to as a ’batteries included’ philosophy. Python comes with just under fifty (of
which we’ll be only using about a dozen) and the simplest way to use this prewritten
code is via function calls.
Not all functions take an argument, and some take more than one (in which case the
arguments are separated by commas).
You have already seen an example of a function call:
>>> type("Hello,World")
<class 'str'>
>>> type(17) <class 'int'>
The name of the function is type, and it displays the type of a value or variable. The
value or variable, which is called the argument of the function, has to be enclosed in
parentheses. It is common to say that a function “takes” an argument and “returns” a
result. The result is called the return value.
Another useful function is len. It takes a Python sequence as an argument. The only
Python sequence we have met so far is a string. A string is a sequence of characters.
For a string argument, len returns the number of characters the string contains.
The len function can only be used on sequences. Trying to use it on a number, for
example, results in an error.
>>> len(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
49
2.3 Type Conversion Functions :
Each Python type comes with a built-in function that attempts to convert values of
another type into that type. The int(ARGUMENT) function, for example, takes any
value and converts it to an integer, if possible, or complains otherwise:
>>> int("32")
32
>>> int("Hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'Hello'
The int function can also convert floating-point values to integers, but note that it
truncates the fractional part:
>>> int(-2.3)
-2
>>> int(3.99999)
3
>>> int("42")
42
>>> int(1.0)
1
>>> float(32)
32.0
>>> float("3.14159")
3.14159
>>> float(1)
1.0
It may seem odd that Python distinguishes the integer value 1 from the floating-point
value 1.0. They may represent the same number, but they belong to different types as
they are represented differently inside the computer.
>>> str(32)
'32'
>>> str(3.14149)
'3.14149'
50
>>> str(True)
'True'
>>> str(true)
Traceback (most recent call last): File
"<stdin>", line 1, in <module>
NameError: name 'true' is not defined
The str(ARGUMENT) function will work with any value and convert it into a string.
Note: True is a predefined value in Python; true is not.
abs(x) The absolute value of x: the (positive) distance between x and zero.
exp(x)
The exponential of x: ex
max(x1, x2,...) The largest of its arguments: the value closest to positive infinity
min(x1, x2,...) The smallest of its arguments: the value closest to negative infinity
51
x rounded to n digits from the decimal point. Python rounds away
round(x [,n]) from zero as a tie-breaker: round(0.5) is 1.0 and round(-0.5) is -1.0.
abs(-45): 45 abs(100.12)
: 100.12
Parameters
x - This is a numeric expression.
Return Value
This method returns the smallest integer not less than x.
Example
The following example shows the usage of the ceil() method.
52
math.ceil(-45.17) : -45 math.ceil(100.12)
: 101 math.ceil(100.72) : 101
math.ceil(math.pi) : 4
Note: This function is not accessible directly. Therefore, we need to import the math
module and then we need to call this function using the math static object.
Parameters
X - This is a numeric expression.
Return Value
This method returns exponential of x: ex.
Example
The following example shows the usage of exp() method.
53
Syntax
Following is the syntax for the fabs() method
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object.
Parameters
x - This is a numeric value.
Return Value
This method returns the absolute value of x.
Example
The following example shows the usage of the fabs() method.
math.fabs(-45.17) : 45.17
math.fabs(100.12) : 100.12 math.fabs(100.72)
: 100.72
math.fabs(math.pi) : 3.141592653589793
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object. Parameters
x - This is a numeric expression.
Return Value
This method returns the largest integer not greater than x.
54
The following example shows the usage of the floor() method.
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object.
Parameters
55
x - This is a numeric expression.
Return Value
This method returns natural logarithm of x, for x > 0.
Example
The following example shows the usage of the log() method.
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object.
Parameters
x - This is a numeric expression.
Return Value
This method returns the base-10 logarithm of x for x > 0.
Example
The following example shows the usage of the log10() method.
math.log10(100.12) : 2.0005208409361854
math.log10(100.72) : 2.003115717099806 math.log10(119)
: 2.0755469613925306 math.log10(math.pi) :
0.49714987269413385
47
The max() method returns the largest of its arguments i.e. the value closest to positive
infinity.
Syntax
Following is the syntax for max() method
max(x, y, z, .... )
Parameters
• x - This is a numeric expression.
• y - This is also a numeric expression.
• z - This is also a numeric expression. Return Value
This method returns the largest of its arguments. Example
The following example shows the usage of the max() method.
max(
80, 100, 1000) : 1000 max(-20, 100, 400) : 400 max(-
80, -20, -10) : -10 max(0, 100, -400) : 100
min(x, y, z, .... )
Parameters
• x - This is a numeric expression.
• y - This is also a numeric expression.
• z - This is also a numeric expression. Return Value
This method returns the smallest of its arguments.
Example
The following example shows the usage of the min() method.
48
print ("min(-20, 100, 400) : ", min(-20, 100, 400)) print
("min(-80, -20, -10) : ", min(-80, -20, -10))
print ("min(0, 100, -400) : ", min(0, 100, -400))
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object.
Parameters
x - This is a numeric expression.
Return Value
This method returns the fractional and integer parts of x in a two-item tuple. Both the
parts have the same sign as x. The integer part is returned as a float.
Example
The following example shows the usage of the modf() method.
49
import math # This will import math module
print ("math.pow(100, 2) : ", math.pow(100, 2)) print
("math.pow(100, -2) : ", math.pow(100, -2)) print
("math.pow(2, 4) : ", math.pow(2, 4))
print ("math.pow(3, 0) : ", math.pow(3, 0))
math. pow(100, 2) :
10000.0 math.pow(100, -2)
: 0.0001 math.pow(2, 4) :
16.0
math.pow(3, 0) : 1.0
round(x [, n] )
Parameters
• x - This is a numeric expression.
• n - Represents number of digits from decimal point up to which x is to be
rounded. Default is 0.
Return Value
This method returns x rounded to n digits from the decimal point.
Example
The following example shows the usage of round() method
print ("round(70.23456) : ", round(70.23456)) print
("round(56.659,1) : ", round(56.659,1)) print
("round(80.264, 2) : ", round(80.264, 2)) print
("round(100.000056, 3) : ", round(100.000056, 3))
print ("round(-100.000056, 3) : ", round(-100.000056, 3))
round(70.23456) : 70
round(56.659,1) : 56.7
round(80.264, 2) : 80.26
round(100.000056, 3) : 100.0
round(-100.000056, 3) : -100.0
50
The sqrt() method returns the square root of x for x > 0.
Syntax
Following is the syntax for sqrt() method
Note: This function is not accessible directly, so we need to import the math module
and then we need to call this function using the math static object.
Parameters
x - This is a numeric expression.
Return Value
This method returns square root of x for x > 0.
Example
The following example shows the usage of sqrt() method.
Just as with mathematical functions, Python functions can be composed, meaning that
you use the result of one function as the input to another.
In the first example, abs(-7) evaluates to 7, which then becomes the argument to print
twice. In the second example we have two levels of composition, since abs(- 11) is
first evaluated to 11 before max(3, 1, 11, 7) is evaluated to 11 and (11) print_twice
then displays the result.
51
>>> saying = "Eric,the half a bee."
>>> print_twice(saying)
Eric,the half a bee. Eric,the half a bee.
Notice something very important here. The name of the variable we pass as an
argument (saying) has nothing to do with the name of the parameter
(some_variable_name). It doesn’t matter what the argument is called; here in
print_twice, we call everybody some_variable_name.
A new function can be created in python using keyword def followed by the function
name and arguments in parathesis and statements to be executed in function
Example:
def requiredArg (str,num):
statements
2.6 Function definitions and use
As well as the built-in functions provided by Python you can define your own
functions. In the context of programming, a function is a named sequence of
statements that performs a desired operation. This operation is specified in a function
definition. In Python, the syntax for a function definition is:
def NAME( LIST OF PARAMETERS ): STATEMENTS
The ’list of parameters’ is where the arguments supplied to the function end up. You
will see more of this later.
You can make up any names you want for the functions you create, except that you
can’t use a name that is a Python keyword. The list of parameters specifies what
information, if any, you have to provide in order to use the new function.
There can be any number of statements inside the function, but they have to be you.
indented from the def. In the examples in this book, we will use the standard
indentation of four spaces3. IDLE automatically indents compound statements for
Function definitions are the first of several compound statements we will see, all
of which have the same pattern:
1. A header, which begins with a keyword and ends with a colon.
2. A body consisting of one or more Python statements, each indented the same
amount – 4 spaces is the Python standard – from the header.
In a function definition, the keyword in the header is def, which is followed by the
list name of the function and a list of parameters enclosed in parentheses. The
parameter may be empty, or it may contain any number of parameters. In either
case, the parentheses are required. The first couple of functions we are going to no
write have parameters, so the syntax looks like this:
52
>>> def new_line() :
... print()
This function is named new_line. The empty parentheses indicate that it has no
which parameters (that is it takes no arguments). Its body contains only a single
statement, outputs a newline character. (That’s what happens when you use a print
command without any arguments.)
Defining a new function does not make the function run. To do that we need a by a
function call. Function calls contain the name of the function to be executed
followed list of values, called arguments, which are assigned to the parameters in
the function definition. Our first examples have an empty parameter list, so the do
function calls not take any arguments. Notice, however, that the parentheses are
required in the function call :
First Line.
Second Line
The extra space between the two lines is a result of the new line() function call. What
if we wanted more space between the lines? We could call the same function
repeatedly:
This function contains three statements, all of which are indented by four spaces. Since
the next statement is not indented, Python knows that it is not part of the function. You
should notice a few things about this program:
• You can call the same procedure repeatedly. In fact, it is quite common and
useful to do so.
• You can have one function call another function; in this case three lines calls
new_line.
53
So far, it may not be clear why it is worth the trouble to create all of these new
functions. Actually, there are a lot of reasons, but this example demonstrates two:
1. Creating a new function gives you an opportunity to name a group of
statements. Functions can simplify a program by hiding a complex computation
behind a single command and by using English words in place of arcane code.
2. Creating a new function can make a program smaller by eliminating repetitive
code. For example, a short way to print nine consecutive new lines is to call
three lines three times.
Pulling together the code fragments from the previous section into a script named
functions.py, the whole program looks like this:
def new_line() :
print()
def three_lines() :
new_line() new_line() new_line()
This program contains two function definitions: new_line and three_lines. Function
to definitions get executed just like other statements, but the effect is to create the
new function. The statements inside the function do not get executed until the is
called, and the function definition generates no output. As you might expect, you
have create a function before you can execute it. In other words, the function
definition has to be executed before the first time it is called.
In order to ensure that a function is defined before its first use, you have to know
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. Although it is not common,
you can define one function inside another. In this case, the inner definition isn’t
executed until the outer function is called.
Function calls are like a detour in the flow of execution. Instead of going to the next
statement, the flow jumps to the first line of the called function, executes all the
statements there, and then comes back to pick up where it left off. That sounds
simple enough, until you remember that one function can call another. While in the
middle of one function, the program might have to execute the statements in another
function. But while executing that new function, the program might have to execute
yet another function! Fortunately, Python is adept at keeping track of where it is, so
64
each time a function completes, the program picks up where it left off in the function
that called it. When it gets to the end of the program, it terminates.
It is usually not helpful to read a program from top to bottom. In python programs
the top part of a file is almost always used for function definitions and it is not
necessary to read those until you want to understand what a particular function
does. The bottom part of a python file is often called the main program. This part
can be recognised because it is often not indented. It is easier to understand a the
program by following flow of execution starting at the beginning of the main
program.
Most functions require arguments. Arguments are values that are input to the function
and these contain the data that the function works on. For example, if you want to find
the absolute value of a number (the distance of a number from zero) you have to
indicate what the number is. Python has a built-in function for computing the absolute
value:
>>> abs(5)
5
>>> abs(-5)
5
In this example, the arguments to the abs function are 5 and -5.
Some functions take more than one argument. For example the built-in function pow
takes two arguments, the base and the exponent. Inside the function, the values that are
passed get assigned to variables called parameters.
>>> pow(2,3)
8
>>> pow(3,2)
9
round(), not surprisingly, rounds a number and returns the floating point value first is
rounded to n-digits digits after the decimal point. It takes one or two arguments. The
number to be rounded and the second (optional) value is the number of digits to round
to. If the second number is not supplied it is assumed to be zero.
>>> round(1.23456789)
1
>>> round(1.5)
65
2
>>> round(1.23456789,2)
1.23
>>> round(1.23456789,3)
1.235
Another built-in function that takes more than one argument is max.
>>> max(7,11)
11
>>> max(1,4,17,2,12)
17
>>> max(3*11, 5**3, 512-9, 1024**0)
503
The function max can be sent any number of arguments, separated by commas, and
will return the maximum value sent. The arguments can be either simple values or
expressions. In the last example, 503 is returned, since it is larger than 33, 125, and 1.
Here is an example of a user-defined function that has a parameter:
This function takes a single argument and assigns it to the parameter named will be) is
some_variable_name. The value of the parameter (at this point we have no idea what it
printed twice, followed by a newline. The name some_variable_name was chosen to
suggest that the name you give a parameter is up to you,but in general, you want to
choose something more descriptive than some_variable_name.
In a function call, the value of the argument is assigned to the corresponding parameter
in the function definition. In effect, it is as if some_variable_name = "Spam" is
executed when print_twice("Spam") is called; some_variable_name = 5 is executed
when print_twice(5) is called; and some_variable_name = 3.14159 is executed when
print_twice(3.14159) is called. Any type of argument that can be printed can be sent to
print_twice. In the first function call, the argument is a string. In the second, it’s an
integer. In the third, it’s a float.
As with built-in functions, we can use an expression as an argument for print twice:
>>> print_twice("Spam"*4)
SpamSpamSpamSpam SpamSpamSpamSpam
66
2.9 Variable and Parameters are Local
When print joined twice terminates, the variable joined is destroyed. If we try to print
it, we get an error:
>>> print(joined)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'joined' is not defined
When you create a local variable inside a function, it only exists inside that function,
and you cannot use it outside. Parameters are also local. For example, outside the
function print_twice, there is no such thing as phrase. If you try to use it, Python will
complain. Similarly, part1 and part2 do not exist outside print_joined_twice.
To keep track of which variables can be used where, it is sometimes useful to draw a
stack diagram. Like state diagrams, stack diagrams show the value of each variable,
but they also show the function to which each variable belongs. Each function is
represented by a frame. A frame is a box with the name of a function beside it and the
parameters and variables of the function inside it. The stack diagram for the previous
example looks like this:
67
print_twice phrase "Happy birthday, to you."
"to you."
part2
"Happy birthday, to you."
joined
_main_
line1 "Happy birthday, "
line2 "to you."
The order of the stack shows the flow of execution. print_twice was called by
print_joined_twice, and print_joined_twice was called by _main_ , which is a special
name for the topmost function. When you create a variable outside of any function, it
belongs to _main_ . Each parameter refers to the same value as its corresponding
argument. So, part1 has the same value as line1, part2 has the same value as line2, and
phrase has the same value as joined. If an error occurs during a function call, Python
prints the name of the function, and the name of the function that called it, and the
name of the function that called that, all the way back to the top most function. To see
how this works, we create a Python script named stacktrace.py that looks like this:
def print_twice(phrase):
print(phrase, phrase)
print(joined)
We’ve added the statement, print joined inside the print twice function, but joined is
not defined there. Running this script will produce an error message like this:
68
This list of functions is called a traceback. It tells you what program file the error
occurred in, and what line, and what functions were executing at the time. It also
shows the line of code that caused the error. Notice the similarity between the
traceback and the stack diagram. It’s not a coincidence. In fact, another common name
for a traceback is a stack trace.
def print_square_root(x):
if x < 0:
print("Warning: cannot take square root of a negative number.")
return result =
x**0.5
print("The square root of x is", result)
The function print square root has a parameter named x. The first thing it does is check
whether x is less than 0, in which case it displays an error message and then uses return
to exit the function. The flow of execution immediately returns to the caller, and the
remaining lines of the function are not executed.
2.11.2 Return values
The built-in functions we have used, such as abs, pow, round 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
So far, none of the functions we have written has returned a value, they have printed
values. In this lecture, 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_of_circle,
which returns the area of a circle with the given radius:
def area_of_circle(radius):
if radius < 0:
print("Warning: radius must be non-negative")
return
area = 3.14159 * radius**2
return area
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
69
and use the following expression as a return value. The expression provided can be
arbitrarily complicated, so we could have written this function more concisely:
def area_of_circle(radius):
if radius < 0:
print("Warning: radius must be non-negative")
return
return 3.14159 * radius**2
On the other hand, temporary variables like area often make debugging easier.
Sometimes it is useful to have multiple return statements, one in each branch of a
conditional. For instance, we have already seen the built-in abs, now we see how to
write our own:
def absolute_value(x):
if x < 0:
return -x
else:
return x
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 if the 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. Code
that appears any 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
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 called None:
70
>>> print(absolute_value(0)) None
>>> type(None)
<class 'NoneType'>
All Python functions return None whenever they do not return another value. So the
earlier functions we wrote that didn’t have a return statement were actually returning
values, we just never checked.
At this point, you should be able to look at complete functions and tell what they do.
Also, while completing the laboratory exercises given so far, you will have written
some small functions. As you write larger functions, you might start to have more
difficulty, especially with runtime and semantic errors. To deal with increasingly
complex programs, we are going to suggest a technique called incremental
development. The goal of incremental development is to avoid long debugging
sessions by adding and testing only a small amount of code at a time.
As an example, suppose you want to find the distance between two points, given by the
coordinates (x1, y1) and (x2, y2). By the Pythagorean theorem, the distance is:
71
Obviously, this version of the function doesn’t compute distances; it always returns
zero. But it is syntactically correct, and it will run, which means that we can test it
before we make it more complicated. To test the new function, we call it with sample
values:
>>> distance(1,2,4,6)
0.0
We chose these values so that the horizontal distance equals 3 and the vertical distance
equals 4; that way, the result is 5 (the hypotenuse of a 3-4-5 triangle). When testing a
function, it is useful to know the right answer. At this point we have confirmed that the
function is syntactically correct, and we can start adding lines of code. After each
incremental change, we test the function again. If an error occurs at any point, we
know where it must be—in the last line we added.
A logical first step in the computation is to find the differences x2 − x1 and y2 − y1.
We will store those values in temporary variables named dx and dy and print them.
If the function is working, the outputs should be 3 and 4. If so, we know that the
function is getting the right parameters and performing the first computation correctly.
If not, there are only a few lines to check.
return 0.0
Notice that we removed the print statements we wrote in the previous step. Code like
that is called scaffolding because it is helpful for building the program but is not part of
the final product. Again, we would run the program at this stage and check the output
(which should be 25). Finally, using the fractional exponent 0.5 to find the square root,
we compute and return the result:
72
def distance(x1, y1, x2, y2):
dx = x2 - x1 dy = y2 - y1
dsquared = dx**2 + dy**2
result = dsquared**0.5
return result
If that works correctly, you are done. Otherwise, you might want to print the value of
result before the return statement. When you start out, you should add only a line or
two of code at a time. As you gain more experience, you might find yourself writing
and debugging bigger chunks. Either way, the incremental development process can
save you a lot of debugging time. The key aspects of the process are:
1. Start with a working program and make small incremental changes. At any
point, if there is an error, you will know exactly where it is.
2. Use temporary variables to hold intermediate values so you can output and
check them.
3. Once the program is working, you might want to remove some of the
scaffolding or consolidate multiple statements into compound expressions, but
only if it does not make the program difficult to read.
2.11.4 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:
The second step is to find the area of a circle with that radius and return it. Again we
will use one of our earlier functions:
result = area_of_circle(radius)
We called this function area of circle two points to distinguish it from the
area_of_circle function defined earlier. There can only be one function with a given
name within a given module. The temporary variables radius and result are useful for
73
development and debugging, but once the program is working, we can make it more
concise by composing the function calls:
Functions can return boolean values, which is often convenient for hiding complicated
tests inside functions. For example:
The name of this function is is divisible. It is common to give boolean functions names
that sound like yes/no questions. is_divisible returns either True or False to indicate
whether the x is or is not divisible by y. We can make the function more concise by
taking advantage of the fact that the condition of the if statement is itself a boolean
expression. We can return it directly, avoiding the if statement altogether:
>>> is_divisible(6,4)
False
>>> is_divisible(6,3)
True
if is_divisible(x, y):
print("x is divisible by y")
else:
print("x is not divisible by y")
74
if is_divisible(x, y) == True:
print("x is divisible by y")
else:
print("x is not divisible by y")
Void functions are functions, like ‘print_twice’ (that we defined earlier), that perform
an action (either display something on the screen or perform some other action).
However, they do not return a value.
For instance, we defined the function ‘print_twice’. The function is meant to perform
the action of printing twice the parameter ‘bruce’.
In interactive mode:Python will display the result of a void function if and only if we
call a function in interactive mode.
In script mode:When we call a fruitful function all by itself in script mode, the
return value is lost forever if we do not store or display the result. For instance:
It is important to note that although Python displayed the value of result earlier, the
result displayed:
Bing Bing is lost forever since we did not store
it anywhere.
In order to transmit this idea Python created the notion of ‘None’. It is a special value
that has its own type.
>>> print(type(None))
<class 'NoneType'>
75
• Import a module object in Python:If you import math, you get a module object
named math. The module object contains constants like pi and functions like sin
and exp.
>>> import math
>>> print(math)
>>> print(math.pi)
3.141592653589793
>>> print(math.pi)
3.141592653589793
>>> print(pi)
3.141592653589793
The advantage of importing everything from the math module is that your code can be
more concise. The disadvantage is that there might be conflicts between names defined
in different modules, or between a name from a module and one of your variables.
76
function call. If a function definition fulfils the condition of recursion, we call this
function a recursive function.
Termination condition:
A recursive function has to terminate to be used in a program. A recursive function
terminates, if with every recursive call the solution of the problem is downsized and
moves towards a base case. A base case is a case, where the problem can be solved
without further recursion. A recursion can lead to an infinite loop, if the base case is
not met in the calls.
Example:
4! = 4 * 3! 3!
= 3 * 2!
2! = 2 * 1
Generally we can say: Recursion in computer science is a method where the solution to
a problem is based on solving smaller instances of the same problem.
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
We can track how the function works by adding two print() functions to the previous
function definition:
def factorial(n):
print("factorial has been called with n = " +
str(n)) if n == 1: return 1 else:
res = n * factorial(n-1)
print("intermediate result for ", n, " * factorial(" ,n-1, "): ",res)
return res
>>> print(factorial(5))
77
This Python script outputs the following results:
The built-in function isinstance is introduced in this section. The function verifies the
type of argument.
On section 2.13, we developed a function called factorial. Let us take another step
further and check the type of the argument and make sure it is positive.
def factorial(n) :
if not isinstance(n,int) : print("Factorial is only
defined for intergers.") return None;
elif n<0 :
print("Factorial is not defined for negative intergers.") return
None;
elif n == 0 :
return 1;
else :
return n * factorial(n-1)
>>> factorial('banana')
Factorial is only defined for intergers.
>>> factorial(3.5)
Factorial is only defined for intergers.
>>> factorial(-1)
Factorial is not defined for negative intergers.
>>> factorial(8)
40320
78
This program demonstrates a pattern sometimes called a guardian. The first two
conditionals act as guardians [(not isinstance) and (elif n < 0)] , protecting the code
that follows from values that might cause an error.
The guardians make it possible to prove the correctness of the code.
STRINGS
The plus (+) sign is the string concatenation operator and the asterisk (*) is the
repetition operator. For example-
Hello World!
H Llo llo
World!
Hello World!Hello World!
Hello World!TEST
Recall we said that all programming languages allowed you to perform a few basic
operations: get input, display output, do math, do conditional execution and then there
was just one more thing. The last thing we need to add to the list is repetition, the
ability to loop through a set of statements repeatedly. We will look at this in a lot more
detail later but there is a special type of loop that is particularly useful with strings (and
other compound types) which is worth introducing while we are looking at strings.
A lot of computations involve processing a string one character at a time. Often they
start at the beginning, select each character in turn, do something to it, and continue
until the end. This pattern of processing is called a traversal. Python provides a very
useful language feature for traversing many compound types— the for loop:
79
>>> fruit ='banana'
>>> for char in fruit:
print(char)
The following example shows how to use concatenation and a for loop to generate an
abecedarian series. Abecedarian refers to a series or list in which the elements appear
in alphabetical order. For example, in Robert McCloskey’s book Make Way for
Ducklings, the names of the ducklings are Jack, Kack, Lack, Mack, Nack, Ouack,
Pack, and Quack. This loop outputs these names in order:
prefixes = "JKLMNOPQ"
suffix = "ack" for
letter in prefixes:
print letter + suffix
Jack
Kack
Lack
Mack
Nack
Nack
Oack
Pack
Qack
80
>>> print(s[17:21]) Mary
The operator [n:m] returns the part of the string from the nth character to the mth
character, including the first but excluding the last. If you find this behaviour
counterintuitive it might make more sense if you imagine the indices pointing between
the characters, as in the following diagram:
fruit ’banana’
index 0 1 2 3 4 5 6
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. Thus:
Instead of producing the output Jello, world!, this code produces the runtime error
TypeError:’str’ object doesn’t support item assignment. 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:
81
The solution here is to concatenate a new first letter onto a slice of greeting. This
operation has no effect on the original string.
2.19 Searching
Syntax
str.find(str, beg=0, end=len(string))
Parameters
• str -- This specifies the string to be searched.
• beg -- This is the starting index, by default its 0.
• end -- This is the ending index, by default its equal to the length of the string.
Return Value
Index if found and -1 otherwise.
Example
15
>>> print(str1.find(str2, 40))
-1
The following program counts the number of times the letter a appears in a string and
is an example of a counter pattern :
82
In addition to the functions that we have seen so far there is also a special type of
function called a method. You can think of a method as a function which is attached to
a certain type of variable (e.g. a string). When calling a function you just need the
name of the function followed by parentheses (possibly with some arguments inside).
In contrast a method also needs to be associated with a variable (also called an object).
The syntax that is used is the variable (or object) name or a value followed by a dot
followed by the name of the method along with possibly some arguments in
parentheses like this:
VARIABLE.METHODNAME(ARGUMENTS)
You can see that it looks just like a function call except for the variable name and the
dot at the start. Compare how the len function and the upper method are used below.
The len function returns the length of the sequence which is given as an argument. The
upper method returns a new string which is the same as the string that it is called upon
except that each character has been converted to uppercase. In each case the original
string remains unchanged.
>>> my_str = "the quick brown fox jumps over the lazy dog." >>>
my_str.count("the")
2
>>> my_str.count("hello") 0
>>> my_str.count("e")
3
The count method returns the number of times the string given as an argument occurs
within the string that it is called upon. But what about the following:
>>> ms = "ahaha"
>>> ms.count("aha")
1
The str type contains useful methods that manipulate strings. To see what methods are
available, use the dir function with str as an argument.
83
>>> dir(str)
To find out more about an item in this list, we can use the help command:
>>> help(str.capitalize)
Help on method_descriptor:
capitalize(...)
S.capitalize() -> str
Return a capitalized version of S, i.e. make the first character have upper
case and the rest lower case.
>>> s = "brendan"
>>> s.capitalize()
'Brendan'
>>> help(str.find)
Help on method_descriptor:
find(...)
Return the lowest index in S where substring sub is found, such that sub is contained
within S[start:end]. Optional arguments start and end are interpreted as in slice
notation.
84
Return -1 on failure.
The parameters in square brackets are optional parameters. We can use str.find to find
the location of a character in a string:
>>> fruit.find("na")
2
It also takes an additional argument that specifies the index at which it should start:
>>> fruit.find("na",3)
4
And has a second optional parameter specifying the index at which the search should
end:
>>> "bob".find("b",1,2)
-1
In this example, the search fails because the letter b does not appear in the index range
from 1 to 2 (not including 2).
85
>>> "a" in "a"
True
>>> "apple" in "apple"
True
Combining the in operator with string concatenation using +, we can write a function
that removes all the vowels from a string:
def remove_vowels(s):
# vowels contains all the letters we want to remove
vowels = "aeiouAEIOU" s_without_vowels = ""
# scan through each letter in the input string
for letter in s:
# check if the letter is not in the disallowed list of letters
if letter not in vowels:
# the letter is allowed, add it to the result
s_without_vowels += letter return
s_without_vowels
The comparison operators work on strings. To see if two strings are equal:
You should be aware, though, that Python does not handle upper- and lowercase letters
the same way that people do. All the uppercase letters come before all the lowercase
letters. As a result:
A common way to address this problem is to convert strings to a standard format, such
as all lowercase, before performing the comparison. A more difficult problem is
making the program realize that zebras are not fruit.
86
S. No. Methods with Description
capitalize()
1 Capitalizes first letter of string
center(width, fillchar)
2
Returns a string padded with fillchar with the original string centered to
a total of width columns.
decode(encoding='UTF-8',errors='strict')
4
Decodes the string using the codec registered for encoding. encoding
defaults to the default string encoding.
encode(encoding='UTF-8',errors='strict')
5
Returns encoded string version of string; on error, default is to raise a
ValueError unless errors is given with 'ignore' or 'replace'.
87
index(str, beg=0, end=len(string))
9
Same as find(), but raises an exception if str not found.
isalnum()
10
Returns true if string has at least 1 character and all characters are
alphanumeric and false otherwise.
isalpha()
11
Returns true if string has at least 1 character and all characters are
alphabetic and false otherwise.
isdigit()
12
Returns true if the string contains only digits and false otherwise.
islower()
13
Returns true if string has at least 1 cased character and all cased
characters are in lowercase and false otherwise.
isnumeric()
14
isspace()
15
Returns true if string contains only whitespace characters and false
otherwise.
istitle()
16
Returns true if string is properly "titlecased" and false otherwise.
isupper()
17
Returns true if string has at least one cased character and all cased
characters are in uppercase and false otherwise.
88
join(seq)
18
Merges (concatenates) the string representations of elements in
sequence seq into a string, with separator string.
len(string)
19
Returns the length of the string
ljust(width[, fillchar])
20
lower()
21
Converts all uppercase letters in string to lowercase.
lstrip()
22
Removes all leading whitespace in string.
maketrans()
23
Returns a translation table to be used in translate function.
max(str)
24
Returns the max alphabetical character from the string str.
min(str)
25
Returns the min alphabetical character from the string str.
89
rfind(str, beg=0,end=len(string))
27
Same as find(), but search backwards in string.
28
Same as index(), but search backwards in string.
rjust(width,[, fillchar])
29
rstrip()
30
Removes all trailing whitespace of string.
split(str="", num=string.count(str))
31
splitlines( num=string.count('\n'))
32
Splits string at all (or num) NEWLINEs and returns a list of each line
with NEWLINEs removed.
startswith(str, beg=0,end=len(string))
strip([chars])
34
Performs both lstrip() and rstrip() on string
swapcase()
35
Inverts case for all letters in string.
90
title()
36
Returns "titlecased" version of string, that is, all words begin with
uppercase and the rest are lowercase.
translate(table, deletechars="")
37
upper()
38
Converts lowercase letters in string to uppercase.
zfill (width)
39
91
Unit 3
Lists A list is an ordered set of values, where
each value is identified by an index. The values that make up a list are called its elements .
Lists are similar to strings, which are ordered sets of characters, except that the elements of
a list can have any type. Lists and strings—and other things that behave like ordered sets—
are called sequences .
The list is the most versatile datatype available in Python, which can be written as a list of
comma-separated values (items) between square brackets. Important thing about a list is that
the items in a list need not be of the same type.
There are several ways to create a new list; the simplest is to enclose the elements in square
brackets ([ and ]):
[10, 20, 30, 40] ["spam", "bungee", "swallow"]
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 another list:
["hello", 2.0, 5, [10, 20]]
A list within another list is said to be nested . Finally, there is a special list that contains no
elements. It is called the empty list, and is denoted []. Like numeric 0 values and the empty
string, the empty list is false in a boolean expression:
>>> if []:
... print "This is true."
... else: ... print "This is false." ... This is false.
>>>
With all these ways to create lists, it would be disappointing if we couldn’t assign list values
to variables or pass lists as parameters to functions. We can:
>>> vocabulary = ["ameliorate", "castigate", "defenestrate"]
>>> numbers = [17, 5]
>>> empty = []
>>> print vocabulary, numbers, empty
[’ameliorate’, ’castigate’, ’defenestrate’] [17, 5] []
80
#!/usr/bin/python3
list = [ 'abcd', 786 , 2.23, 'john',
70.2 ] tinylist = [123, 'john'] print (list)
# Prints complete list
print (list[0]) # Prints first element of the list print
(list[1:3]) # Prints elements starting from 2nd till 3rd
print (list[2:]) # Prints elements starting from 3rd
element print (tinylist * 2) # Prints list two times
print (list + tinylist) # Prints concatenated lists
This produces the following result-
['abcd', 786, 2.23, 'john', 70.200000000000003]
abcd
[786, 2.23]
[2.23, 'john', 70.200000000000003]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john']
The bracket operator applied to a list can appear anywhere in an expression. When it
appears on the left side of an assignment, it changes one of the elements in the list, so the
first element of fruit has been changed from "banana" to "pear", and the last from
"quince" to "orange". An assignment to an element of a list is called item assignment.
81
Item assignment does not work for strings:
>>> my_string = "TEST"
>>> my_string[2] = "X"
Traceback (most recent
call last): File
"<stdin>", line 1, in
<module>
TypeError: ’str’ object does not support item assignment
We can also remove elements from a list by assigning the empty list to them:
>>> a_list = ["a", "b", "c", "d", "e", "f"]
>>> a_list[1:3] = []
>>>
print
a_list
[’a’,
’d’,
’e’,
’f’]
And we can add elements to a list by squeezing them into an empty slice at the desired
location:
>>> a_list = ["a", "d", "f"]
>>> a_list[1:1] = ["b", "c"]
>>> print a_list
[’a’, ’b’, ’c’, ’d’, ’f’]
>>> a_list[4:4] = ["e"]
>>> print a_list
[’a’, ’b’, ’c’, ’d’, ’e’,
’f’]
82
Deleting elements from List :
To remove a list element, you can use either the del statement if you know exactly which
element(s) you are deleting. You can use the remove() method if you do not know exactly
which items to delete. For example-
#!/usr/bin/python3 list = ['physics',
'chemistry', 1997,
2000] print (list)
del list[2]
print ("After deleting value at index 2 : ", list)
96
Let us understand the use of these functions. Listlen()Method
Description
The len() method returns the number of elements in the list.
Syntax
Following is the syntax for len() method-
len(list)
Parameters
list - This is a list for which, number of elements are to be counted.
Return Value
This method returns the number of elements in the list.
Example
The following example shows the usage of len() method.
#!/usr/bin/python3
list1 = ['physics', 'chemistry', 'maths'] print (len(list1))
list2=list(range(5)) #creates list of numbers between 0-4
print (len(list2))
Description
The max() method returns the elements from the list with maximum value.
Syntax
Following is the syntax for max() method-
max(list)
Parameters
list - This is a list from which max valued element are to be returned.
97
Return Value
This method returns the elements from the list with maximum value.
Example
Syntax
Following is the syntax for min() method-
min(list)
Parameters
list - This is a list from which min valued element is to be returned.
Return Value
This method returns the elements from the list with minimum value.
Example
The following example shows the usage of min() method.
#!/usr/bin/python3
list1, list2 = ['C++','Java', 'Python'], [456, 700, 200]
print ("min value element : ", min(list1))
When we run above program, it produces following result- print ("min value
element : ", min(list2))
98
min value element : C++
min value element : 200
Description
The list() method takes sequence types and converts them to lists. This is used to convert a
given tuple into list.
Note: Tuple are very similar to lists with only difference that element values of a tuple can
not be changed and tuple elements are put between parentheses instead of square bracket.
This function also converts characters in a string into a list.
Syntax
Following is the syntax for list() method-
list( seq )
Parameters
seq - This is a tuple or string to be converted into list.
Return Value
This method returns the list.
Example
The following example shows the usage of list() method.
#!/usr/bin/python3
aTuple = (123, 'C++', 'Java', 'Python') list1 = list(aTuple)
print ("List elements : ", list1) str="Hello World"
list2=list(str)
print ("List elements : ", list2)
When we run above program, it produces following result-
List elements :[123, 'C++', 'Java', 'Python']
List elements :['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r',
'l', 'd']
99
SN Methods with Description
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 obj from list
8 list.reverse()
Reverses objects of list in place
9 list.sort([func])
Sorts objects of list, use compare func if given
Description
The append() method appends a passed obj into the existing list.
Syntax
Following is the syntax for append() method-
list.append(obj)
100
Parameters
obj - This is the object to be appended in the list.
Return Value
This method does not return any value but updates existing list.
Example
The following example shows the usage of append() method. #!/usr/bin/python3
list1 = ['C++', 'Java', 'Python'] list1.append('C#')
print ("updated list : ", list1)
When we run the above program, it produces the following result-
updated list : ['C++', 'Java', 'Python', 'C#']
List count()Method
Description
The count() method returns count of how many times obj occurs in list.
Syntax
Following is the syntax for count() method-
list.count(obj)
Parameters
obj - This is the object to be counted in the list.
Return Value
This method returns count of how many times obj occurs in list.
Listextend()Method
101
Description
The extend() method appends the contents of seq to list.
Syntax
Following is the syntax for extend() method-
list.extend(seq)
Parameters
seq - This is the list of elements
Return Value
This method does not return any value but adds the content to an existing list.
Description
The index() method returns the lowest index in list that obj appears.
Syntax
Following is the syntax for index() method-
list.index(obj)
Parameters
obj - This is the object to be find out.
Return Value
102
This method returns index of the found object otherwise raises an exception indicating
that the value is not found.
Example
The following example shows the usage of index() method.
#!/usr/bin/python3
list1 = ['physics', 'chemistry', 'maths'] print ('Index of
chemistry', list1.index('chemistry'))
print ('Index of C#', list1.index('C#'))
When we run the above program, it produces the following result-
Index of chemistry 1 Traceback
(most recent call last):
File "test.py", line 3, in print ('Index of
C#', list1.index('C#'))
ValueError: 'C#' is not in list
Description
The insert() method inserts object obj into list at offset index.
Syntax
Following is the syntax for insert() method-
list.insert(index, obj)
Parameters
• index - This is the Index where the object obj need to beinserted.
Return Value
This method does not return any value but it inserts the given element at the given index.
Example
The following example shows the usage of insert() method.
#!/usr/bin/python3
list1 = ['physics', 'chemistry', 'maths'] list1.insert(1,
'Biology')
103
print ('Final list : ', list1)
When we run the above program, it produces the following result-
Final list : ['physics', 'Biology', 'chemistry', 'maths']
List pop() Method
Description
The pop() method removes and returns last object or obj from the list.
Syntax
Following is the syntax for pop() method-
list.pop(obj=list[-1])
Parameters
obj - This is an optional parameter, index of the object to be removed from the list.
Return Value
This method returns the removed object from the list.
Example
The following example shows the usage of pop() method.
#!/usr/bin/python3
list1 = ['physics', 'Biology', 'chemistry', 'maths']
list1.pop()
print ("list now : ", list1) list1.pop(1)
print ("list now : ", list1)
When we run the above program, it produces the following result-
Listremove()Method
Parameters
obj - This is the object to be removed from the list.
Return Value
This method does not return any value but removes the given object from the list. Example
104
The following example shows the usage of remove() method.
#!/usr/bin/python3
list1 = ['physics', 'Biology', 'chemistry', 'maths']
list1.remove('Biology') print ("list now : ", list1)
list1.remove('maths')
print ("list now : ", list1)
When we run the above program, it produces the following result-
Listreverse()Method
Description
The reverse() method reverses objects of list in place.
Syntax
Following is the syntax for reverse() method-
list.reverse()
Parameters
NA
Return Value
This method does not return any value but reverse the given object from the list.
Example
The following example shows the usage of reverse() method.
#!/usr/bin/python3
list1 = ['physics', 'Biology', 'chemistry', 'maths']
list1.reverse()
print ("list now : ", list1)
When we run above program, it produces following result-
list now :['maths', 'chemistry', 'Biology', 'physics']
105
List sort() Method
Description
The sort() method sorts objects of list, use compare function if given.
Syntax
Following is the syntax for sort() method-
list.sort([func])
Parameters
NA
Return Value
This method does not return any value but reverses the given object from the list.
Example
The following example shows the usage of sort() method.
#!/usr/bin/python3 list1 = ['physics', 'Biology', 'chemistry', 'maths']
list1.sort()
print ("list now : ", list1)
When we run the above program, it produces the following result-
list now : ['Biology', 'chemistry', 'maths', 'physics']
Creating a tuple is as simple as putting different comma-separated values. Optionally, you can
put these comma-separated values between parentheses also. Forexample-
tup1 = ();
106
To write a tuple containing a single value you have to include a comma, even though there is
only one value.
tup1 = (50,)
Like string indices, tuple indices start at 0, and they can be sliced, concatenated, and so on.
The left side is a tuple of variables; the right side is a tuple of values. Each value is assigned to its respective
variable. All the expressions on the right side are evaluated before any of the assignments. This feature
makes tuple assignment quite versatile. Naturally, the number of variables on the left and the number of
values on the right have to be the same:
>>> a, b, c, d = 1, 2, 3
ValueError: need more than 3 values to unpack
Such statements can be useful shorthand for multiple assignment statements, but care should be taken that
it doesn’t make the code more difficult to read.
One example of tuple assignment that improves readibility is when we want to swap the values of two
variables. With conventional assignment statements, we have to use a temporary variable. For example,
to swap aand b:
107
temp = a a
= b
b = temp
If we have to do this often, such an approach becomes cumbersome. Python provides a form of tuple
assignment that solves this problem neatly:
a, b = b, a
swap(a, b)
then aand xare aliases for the same value. Changing xinside swapmakes xrefer to a different value, but
it has no effect on a in main . Similarly, changing y has no effect on b. This function runs without
producing an error message, but it doesn’t do what we intended. This is an example of a semantic
error.
Basic tuples operations, Concatenation, Repetition, in Operator, Iteration :
Tuples respond to the + and * operators much like strings; they mean concatenation and
repetition here too, except that the result is a new tuple, not a string.
In fact, tuples respond to all of the general sequence operations we used on strings in the
previous chapter.
Python Expression Results Description
108
3 in (1, 2, 3) True Membership
1 cmp(tuple1, tuple2)
No longer available in Python 3.
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.
Tuplelen()Method
Description
The len() method returns the number of elements in the tuple.
Syntax
Following is the syntax for len() method-
len(tuple)
109
Parameters tuple - This is a tuple for which number of elements
to be counted. Return Value
Example
The following example shows the usage of len() method.
#!/usr/bin/python3
tuple1, tuple2 = (123, 'xyz', 'zara'), (456, 'abc') print
("First tuple length : ", len(tuple1))
print ("Second tuple length : ", len(tuple2))
When we run above program, it produces following result-
First tuple length : 3
Second tuple length : 2
Tuplemax()Method
Description
The max() method returns the elements from the tuple with maximum value.
Syntax
Following is the syntax for max() method-
max(tuple)
Return Value
This method returns the elements from the tuple with maximum value.
Example
The following example shows the usage of max() method.
#!/usr/bin/python3
110
tuple1, tuple2 = ('maths', 'che', 'phy', 'bio'), (456, 700,
200)
print ("Max value element : ", max(tuple1))
print ("Max value element : ", max(tuple2))
When we run the above program, it produces the following result-
Max value element : phy
Description
The min() method returns the elements from the tuple with minimum value.
Syntax
Following is the syntax for min() method-
min(tuple)
Return Value
This method returns the elements from the tuple with minimum value.
Example
The following example shows the usage of min() method.
#!/usr/bin/python3
tuple1, tuple2 = ('maths', 'che', 'phy', 'bio'), (456, 700,
200)
print ("min value element : ", min(tuple1))
print ("min value element : ", min(tuple2))
When we run the above program, it produces the following result-
min value element : bio
Tupletuple()Method
111
Description
The tuple() method converts a list of items into tuples.
Syntax
Following is the syntax for tuple() method-
tuple( seq )
Parameters
seq - This is a tuple to be converted into tuple.
Return Value
This method returns the tuple.
Example
The following example shows the usage of tuple() method.
#!/usr/bin/python3
list1= ['maths', 'che', 'phy', 'bio'] tuple1=tuple(list1)
print ("tuple elements : ", tuple1)
When we run the above program, it produces the following result-
tuple elements : ('maths', 'che', 'phy', 'bio')
Dictionary
Each key is separated from its value by a colon (:), the items are separated by
commas, and the whole thing is enclosed in curly braces. An empty dictionary
without any items is written with just two curly braces, like this: {}.
Keys are unique within a dictionary while values may not be. The values of a
dictionary can be of any type, but the keys must be of an immutable data type
such as strings, numbers, or tuples.
112
#!/usr/bin/python3
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
When the above code is executed, it produces the following result-
dict['Name']: Zara
dict['Age']: 7
If we attempt to access a data item with a key, which is not a part of the dictionary, we get an
error as follows-
#!/usr/bin/python3
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "dict['Alice']: ", dict['Alice']
When the above code is executed, it produces the following result-
dict['Zara']:
Traceback (most recent call last):
File "test.py", line 4, in <module> print
"dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'
Updating Dictionary :
You can update a dictionary by adding a new entry or a key-value pair, modifying an
existing entry, or deleting an existing entry as shown in a simple example given below.
#!/usr/bin/python3
A. More than one entry per key is not allowed. This means no duplicate key is allowed.
When duplicate keys are encountered during assignment, the last assignment wins. For
example-
#!/usr/bin/python3
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print ("dict['Name']: ", dict['Name'])
When the above code is executed, it produces the following result-
dict['Name']: Manni
B. Keys must be immutable. This means you can use strings, numbers or tuples as
dictionary keys but something like ['key'] is not allowed. Following is a simple example-
#!/usr/bin/python3
dict = {['Name']: 'Zara', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
When the above code is executed, it produces the following result-
114
Traceback (most recent call last): File
"test.py", line 3, in <module> dict
= {['Name']: 'Zara', 'Age': 7}
TypeError: list objects are unhashable
Operations in Dictionary :
The del statement removes a key-value pair from a dictionary. For example, the following
dictionary
contains the names of various fruits and the number of each fruit in stock:
>>> del inventory["pears"]
>>> print inventory
{’oranges’: 525, ’apples’: 430, ’bananas’: 312}
Or if we’re expecting more pears soon, we might just change the value associated with
pears:
>>> inventory["pears"] = 0
>>> print inventory
{’oranges’: 525, ’apples’: 430, ’pears’: 0, ’bananas’: 312}
The len function also works on dictionaries; it returns the number of key-value pairs:
>>> len(inventory)
4
Built-In Dictionary Functions & Methods :
Python includes the following dictionary functions-
1 cmp(dict1, dict2)
No longer available in Python 3.
2 len(dict)
Gives the total length of the dictionary. This would be equal to the number of items
in the dictionary.
3 str(dict)
Produces a printable string representation of a dictionary.
4 type(variable)
Returns the type of the passed variable. If passed variable is dictionary, then it
would return a dictionary type.
115
Dictionarylen()Method
Description
The method len() gives the total length of the dictionary. This would be equal to the
number of items in the dictionary.
Syntax
Following is the syntax for len() method-
len(dict)
Parameters
dict - This is the dictionary, whose length needs to be calculated.
Return Value
This method returns the length.
Example
The following example shows the usage of len() method.
#!/usr/bin/python3
dict = {'Name': 'Manni', 'Age': 7, 'Class': 'First'}
print ("Length : %d" % len (dict))
When we run the above program, it produces the following result-
Length : 3
Dictionarystr()Method
Description
The method str() produces a printable string representation of a dictionary.
Syntax
Following is the syntax for str() method −
str(dict)
Parameters
dict - This is the dictionary.
116
Return Value
This method returns string representation.
Example
The following example shows the usage of str() method.
#!/usr/bin/python3 dict = {'Name': 'Manni', 'Age': 7, 'Class': 'First'}
print ("Equivalent String : %s" % str (dict)) When we run the
above program, it produces the following result-
Description
The method type() returns the type of the passed variable. If passed variable is dictionary
then it would return a dictionary type.
Syntax
Following is the syntax for type() method-
type(dict)
Parameters
dict - This is the dictionary.
Return Value
This method returns the type of the passed variable.
Example
The following example shows the usage of type() method.
#!/usr/bin/python3 dict = {'Name': 'Manni', 'Age': 7, 'Class': 'First'}
print ("Variable Type : %s" % type (dict))
When we run the above program, it produces the following result-
Variable Type : <type 'dict'>
117
SN Methods with Description
1 dict.clear()
Removes all elements of dictionary dict.
2 dict.copy()
Returns a shallow copy of dictionary dict.
3 dict.fromkeys()
Create a new dictionary with keys from seq and values set to value.
4 dict.get(key, default=None)
For key key, returns value or default if key not in dictionary.
5 dict.has_key(key)
Removed, use the in operation instead.
6 dict.items()
Returns a list of dict's (key, value) tuple pairs.
7 dict.keys()
Returns list of dictionary dict's keys.
8 dict.setdefault(key, default=None)
Similar to get(), but will set dict[key]=default if key is not already in dict.
9 dict.update(dict2)
Adds dictionary dict2's key-values pairs to dict.
10 dict.values()
Returns list of dictionary dict's values.
Dictionaryclear()Method
118
Description
The method clear() removes all items from the dictionary.
Syntax
Following is the syntax for clear() method-
dict.clear()
Parameters
NA
Return Value
This method does not return any value.
Example
The following example shows the usage of clear() method.
#!/usr/bin/python3 dict = {'Name':
'Zara', 'Age': 7} print ("Start Len :
%d" % len(dict)) dict.clear()
print ("End Len : %d" % len(dict))
Description
The method copy() returns a shallow copy of the dictionary.
Syntax
Following is the syntax for copy() method-
dict.copy()
Parameters
NA
119
Return Value
This method returns a shallow copy of the dictionary.
Example
The following example shows the usage of copy() method.
#!/usr/bin/python3 dict1 = {'Name': 'Manni', 'Age': 7, 'Class': 'First'}
dict2 = dict1.copy()
print ("New Dictionary : ",dict2)
When we run the above program, it produces following result-
New dictionary : {'Name': 'Manni', 'Age': 7, 'Class': 'First'}
Description
The method fromkeys() creates a new dictionary with keys from seq and values set to
value.
Syntax
Following is the syntax for fromkeys() method-
dict.fromkeys(seq[, value]))
Parameters
• seq - This is the list of values which would be used for dictionary keys preparation.
• value - This is optional, if provided then value would be set to this value
Return Value
This method returns the list.
Example
The following example shows the usage of fromkeys() method.
#!/usr/bin/python3 seq =
('name', 'age', 'sex') dict
= dict.fromkeys(seq)
print ("New Dictionary : %s" % str(dict))
dict = dict.fromkeys(seq, 10)
print ("New Dictionary : %s" % str(dict)
120
When we run the above program, it produces the following result-
New Dictionary : {'age': None, 'name': None, 'sex': None}
New Dictionary : {'age': 10, 'name': 10, 'sex': 10})
Description
The method get() returns a value for the given key. If the key is not available then returns
default value None.
Syntax
Following is the syntax for get() method-
dict.get(key, default=None)
Parameters
• key - This is the Key to be searched in the dictionary.
Return Value
This method returns a value for the given key. If the key is not available, then returns
default value as None.
Example
The following example shows the usage of get() method.
#!/usr/bin/python3 dict = {'Name': 'Zara',
'Age': 27} print ("Value : %s" %
dict.get('Age'))
print ("Value : %s" % dict.get('Sex',
"NA"))
When we run the above program, it produces the following result-
Value : 27
Value : NA
121
Description
The method items() returns a list of dict's (key, value) tuple pairs.
Syntax
Following is the syntax for items() method-
dict.items()
Parameters
NA
Return Value
This method returns a list of tuple pairs.
Example
The following example shows the usage of items() method.
#!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7}
print ("Value : %s" % dict.items())
When we run the above program, it produces the following result-
Value : [('Age', 7), ('Name', 'Zara')]
Description
The method keys() returns a list of all the available keys in the dictionary.
Syntax
Following is the syntax for keys() method-
dict.keys()
Parameters
NA
Return Value
This method returns a list of all the available keys in the dictionary.
Example
122
The following example shows the usage of keys() method.
#!/usr/bin/python3 dict = {'Name': 'Zara', 'Age': 7}
print ("Value : %s" % dict.keys())
When we run the above program, it produces the following result-
Value : ['Age', 'Name']
Description
The method setdefault() is similar to get(), but will set dict[key]=default if the key is not
already in dict.
Syntax
Following is the syntax for setdefault() method-
dict.setdefault(key, default=None)
Parameters
• key - This is the key to be searched.
Return Value
This method returns the key value available in the dictionary and if given key is not
available then it will return provided default value.
Example
The following example shows the usage of setdefault() method.
#!/usr/bin/python3 dict = {'Name': 'Zara', 'Age': 7} print ("Value : %s"
% dict.setdefault('Age', None)) print ("Value : %s" %
dict.setdefault('Sex', None))
print (dict)
When we run the above program, it produces the following result-
Value : 7
Value : None
{'Name': 'Zara', 'Sex': None, 'Age': 7} Dictionary update() Method
123
Description
The method update() adds dictionary dict2's key-values pairs in to dict. This function does
not return anything.
Syntax
Following is the syntax for update() method-
dict.update(dict2)
Parameters
dict2 - This is the dictionary to be added into dict.
Return Value
This method does not return any value.
Example
The following example shows the usage of update() method.
#!/usr/bin/python3 dict = {'Name': 'Zara', 'Age': 7} dict2 =
{'Sex': 'female' } dict.update(dict2)
print ("updated dict : ", dict)
When we run the above program, it produces the following result-
Dictionaryvalues()Method
Description
The method values() returns a list of all the values available in a given dictionary.
Syntax
Following is the syntax for values() method-
dict.values()
Parameters
NA
Return Value
This method returns a list of all the values available in a given dictionary.
124
Example
The following example shows the usage of values() method.
#!/usr/bin/python3 dict = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'}
print ("Values : ", list(dict.values()))
When we run above program, it produces following result-
Values : ['female', 7, 'Zara']
Files
Python provides basic functions and methods necessary to manipulate files by default. You
can do most of the file manipulation using a file object.
Before you can read or write a file, you have to open it using Python's built-in open()
function. This function creates a file object, which would be utilized to call other support
methods associated with it.
Syntax
• access_mode: The access_mode determines the mode in which the file has to be
opened, i.e., read, write, append, etc. A complete list of possible values is given
below in the table. This is an optional parameter and the default file access mode is
read (r).
• buffering: If the buffering value is set to 0, no buffering takes place. If the buffering
value is 1, line buffering is performed while accessing a file. If you specify the
buffering value as an integer greater than 1, then buffering action is performed with
the indicated buffer size. If negative, the buffer size is the system default (default
behavior).
Here is a list of the different modes of opening a file-
125
Modes Description
r Opens a file for reading only. The file pointer is placed at the beginning of the
file. This is the default mode.
rb Opens a file for reading only in binary format. The file pointer is placed at the
beginning of the file. This is the default mode.
r+ Opens a file for both reading and writing. The file pointer placed at the
beginning of the file.
rb+ Opens a file for both reading and writing in binary format. The file pointer
placed at the beginning of the file.
w Opens a file for writing only. Overwrites the file if the file exists. If the file does
not exist, creates a new file for writing.
wb Opens a file for writing only in binary format. Overwrites the file if the file
exists. If the file does not exist, creates a new file for writing.
w+ Opens a file for both writing and reading. Overwrites the existing file if the file
exists. If the file does not exist, creates a new file for reading and writing.
wb+ Opens a file for both writing and reading in binary format. Overwrites the
existing file if the file exists. If the file does not exist, creates a new file for
reading and writing.
a Opens a file for appending. The file pointer is at the end of the file if the file
exists. That is, the file is in the append mode. If the file does not exist, it creates
a new file for writing.
ab Opens a file for appending in binary format. The file pointer is at the end of the
file if the file exists. That is, the file is in the append mode. If the file does not
exist, it creates a new file for writing.
a+ Opens a file for both appending and reading. The file pointer is at the end of the
file if the file exists. The file opens in the append mode. If the file does not exist,
it creates a new file for reading and writing.
ab+ Opens a file for both appending and reading in binary format. The filepointer is
at the end of the file if the file exists. The file opens in the append mode. If the
file does not exist, it creates a new file for reading and writing.
126
The File Object Attributes :
Once a file is opened and you have one file object, you can get various information related
to that file.
Here is a list of all the attributes related to a file object-
Attribute Description
Example
#!/usr/bin/python3
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();
127
Example
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)
# Close opened file
fo.close()
This produces the following result-
Readingand WritingFiles
The file object provides a set of access methods to make our lives easier. We would see
how to use read() and write() methods to read and write files.
The write() method writes any string to an open file. It is important to note that Python
strings can have binary data and not just text.
The write() method does not add a newline character ('\n') to the end of the string-
Syntax
fileObject.write(string);
Here, passed parameter is the content to be written into the opened file.
Example
128
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "w")
fo.write( "Python is a great language.\nYeah its great!!\n")
# Close opend
file fo.close()
The above method would create foo.txt file and would write given content in that file and
finally it would close that file. If you would open this file, it would have the following
content-
The read() method reads a string from an open file. It is important to note that Python
strings can have binary data apart from the text data.
Syntax
fileObject.read([count]);
Here, passed parameter is the number of bytes to be read from the opened file. This method
starts reading from the beginning of the file and if count is missing, then it tries to read as
much as possible, maybe until the end of file.
Example
Let us take a file foo.txt, which we created above.
#!/usr/bin/python3
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, the beginning of the file is used as the reference position. If it is set to 1,
the current position is used as the reference position. If it is set to 2 then the end of the file
would be taken as the reference position.
Example
Let us take a file foo.txt, which we created above.
#!/usr/bin/python3
Python os module provides methods that help you perform file-processing operations,
such as renaming and deleting files.
To use this module, you need to import it first and then you can call any related functions.
Therename()Method
The rename() method takes two arguments, the current filename and the new filename.
Syntax
os.rename(current_file_name, new_file_name)
Example
Following is an example to rename an existing file test1.txt-
#!/usr/bin/python3
import os
You can use the remove() method to delete files by supplying the name of the file to be
deleted as the argument.
Syntax
os.remove(file_name)
Example
Following is an example to delete an existing file test2.txt-
#!/usr/bin/python3 import os
131
# Delete file test2.txt
os.remove("text2.txt")
Directories :
All files are contained within various directories, and Python has no problem handling these
too. The os module has several methods that help you create, remove, and change
directories.
You can use the mkdir() method of the os module to create directories in the current
directory. You need to supply an argument to this method, which contains the name of the
directory to be created.
Syntax
os.mkdir("newdir")
Example
Following is an example to create a directory test in the current directory-
#!/usr/bin/python3
import os
You can use the chdir() method to change the current directory. The chdir() method takes
an argument, which is the name of the directory that you want to make the current
directory.
Syntax
os.chdir("newdir")
Example
Following is an example to go into "/home/newdir" directory-
132
#!/usr/bin/python3
import os
Syntax
os.getcwd()
Example
Following is an example to give current directory-
#!/usr/bin/python3
import os
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 beremoved.
Syntax
os.rmdir('dirname')
Example
Following is an example to remove the "/tmp/test" directory. It is required to give fully
qualified name of the directory, otherwise it would search for that directory in thecurrent
directory.
133
#!/usr/bin/python3
import os
# This would remove "/tmp/test" directory.
os.rmdir( "/tmp/test" )
Exceptions
An exception is an event, which occurs during the execution of a program that disrupts the
normal flow of the program's instructions. In general, when a Python script encounters a
situation that it cannot cope with, it raises an exception. An exception is a Python object
that represents an error.
When a Python script raises an exception, it must either handle the exception immediately
otherwise it terminates and quits.
Built-in Exceptions :
Here is a list of Standard Exceptions available in Python.
EXCEPTION DESCRIPTION
NAME
StopIteration Raised when the next() method of an iterator does not point to any
object.
StandardError Base class for all built-in exceptions except StopIteration and
SystemExit.
ArithmeticError Base class for all errors that occur for numeric calculation.
ZeroDivisonError Raised when division or modulo by zero takes place for all numeric
types.
134
AssertionError Raised in case of failure of the Assert statement.
EOFError Raised when there is no input from either the raw_input() or input()
function and the end of file is reached.
KeyError Raised when the specified key is not found in the dictionary.
EnvironmentError Base class for all exceptions that occur outside the Python
environment.
IOError Raised when an input/ output operation fails, such as the print
statement or the open() function when trying to open a file that does
not exist.
SystemError Raised when the interpreter finds an internal problem, but when this
error is encountered the Python interpreter does not exit.
135
SystemExit Raised when Python interpreter is quit by using the sys.exit()
function. If not handled in the code, causes the interpreter to exit.
ValueError Raised when the built-in function for a data type has the valid type
of arguments, but the arguments have invalid values specified.
RuntimeError Raised when a generated error does not fall into any category.
Syntax
Here is simple syntax of try....except...else blocks-
try:
You do your operations here
......................
except ExceptionI:
If there is ExceptionI, then execute this block.
except ExceptionII:
If there is ExceptionII, then execute this block.
......................
else:
If there is no exception then execute this block.
Here are few important points about the above-mentioned syntax-
• A single try statement can have multiple except statements. This is useful when the
try block contains statements that may throw different types of exceptions.
• You can also provide a generic except clause, which handles any exception.
• After the except clause(s), you can include an else-clause. The code in the else-
block executes if the code in the try: block does not raise an exception.
• The else-block is a good place for code that does not need the try: block's
protection.
Example
136
This example opens a file, writes content in the file and comes out gracefully because
there is no problem at all.
#!/usr/bin/python3
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()
Example
This example tries to open a file where you do not have the write permission, so it raises an
exception-
#!/usr/bin/python3 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")
137
try:
You do your operations here
...................... except
ExceptionType as Argument:
You can print value of Argument here...
If you write the code to handle a single exception, you can have a variable follow the name
of the exception in the except statement. If you are trapping multiple exceptions, you can
have a variable follow the tuple of the exception.
This variable receives the value of the exception mostly containing the cause of the
exception. The variable can receive a single value or multiple values in the form of a tuple.
This tuple usually contains the error string, the error number, and an error location.
Example
Following is an example for a single exception-
#!/usr/bin/python3
138
try: raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
139
UNIT 4
(2)Various types of regular expressions: Basic patterns that match single chars
• a, X, 9, < -- ordinary characters just match themselves exactly.
• . (a period) -- matches any single character except newline '\n' • \w --
matches a "word" character: a letter or digit or underbar [a-zA-Z0- 9_].
• \W -- matches any non-word character.
• \b -- boundary between word and non-word
• \s -- matches a single whitespace character -- space, newline, return, tab
• \S -- matches any non-whitespace character.
• \t, \n, \r -- tab, newline, return
• \d -- decimal digit [0-9]
• ^ = matches start of the string
• $ = match the end of the string
• \ -- inhibit the "specialness" of a character.
Flag Meaning
140
(3)Using match function.:
This function attempts to match RE pattern to string with optional flags. Here is the syntax
for this function-
Parameter Description
flags You can specify different flags using bitwise OR (|). These are
modifiers, which are listed in the table below.
The re.match function returns a match object on success, None on failure. We use
group(num) or groups() function of match object to get matched expression.
141
groups() This method returns all matching subgroups in a tuple
(empty if there weren't any)
142
Example
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print
("matchObj.group() : ", matchObj.group()) print ("matchObj.group(1) : ",
matchObj.group(1)) print ("matchObj.group(2) : ", matchObj.group(2))
else: print ("No match!!")
144
class Employee:
'Common base class for all employees'
empCount = 0
• The variable empCount is a class variable whose value is shared among all the
instances of a in this class. This can be accessed as Employee.empCount from inside
the class or outside the class.
• The first method init () is a special method, which is called class constructor or
initialization method that Python calls when you create a new instance of this class.
• You declare other class methods like normal functions with the exception that the
first argument to each method is self. Python adds the self argument to the list for
you; you do not need to include it when you call the methods.
Accessing Attributes
You access the object's attributes using the dot operator with object. Class variable
would be accessed using class name as follows-
145
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
In the following example, the variables self.name and self.grades are instance variables,
whereas the variable NUM_GRADES is a class variable:
class Student:
s = Student('Mary')
The constructor method always expects at least one argument, self. When the method is
called, the object being instantiated is passed here and thus is bound to self throughout
the code. Other arguments may be given to supply initial values for the object’s data.
146
class Numbers:
MULTIPLIER=None def
init (self,x,y):
self.x=x self.y=y
def add(self):
return (self.x+self.y)
print("Enter two numbers for
addition") x=int(input()) y=int(input())
n=Numbers(x,y)
print("addition is : ",n.add())
147
class Employee:
'Common base class for all employees'
empCount = 0
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary)
When the above code is executed, it produces the following result- Employee. doc : Common
base class for all employees
Employee. name : Employee
Employee. module : main
Employee. bases : (<class 'object'>,)
Employee. dict : {' module ': ' main ', ' doc ': 'Common base class for all employees',
'empCount': 2, ' init ': <function Employee. init at 0x00F14270>, 'displayCount': <function
Employee.displayCount at 0x0304C0C0>,
'displayEmployee': <function Employee.displayEmployee at 0x032DFE88>,
' dict ': <attribute ' dict ' of 'Employee' objects>, ' weakref ': <attribute
' weakref ' of 'Employee' objects>}
(7) Inheritance:
Instead of starting from a scratch, you can create a class by deriving it from a pre-
existing class by listing the parent class in parentheses after the new class name. The
child class inherits the attributes of its parent class, and you can use those attributes as
if they were defined in the child class. A child class can also override data members and
methods from the parent.
148
Syntax
Derived classes are declared much like their parent class; however, a list of base classes
to inherit from is given after the class name –
class SubClassName (ParentClass1[, ParentClass2, ...]):
'Optional class documentation string' class_suite
Example
class Parent: # define parent class
parentAttr = 100 def init (self):
print ("Calling parent constructor")
def parentMethod(self):
print ('Calling parent method')
def getAttr(self):
print ("Parent attribute :", Parent.parentAttr)
def childMethod(self):
print ('Calling child method')
149
In a similar way, you can drive a class from multiple parent classes as follows-
You can use issubclass() or isinstance() functions to check a relationship of two classes
and instances.
• The issubclass(sub, sup) boolean function returns True, if the given
subclass sub is indeed a subclass of the superclass sup.
(8)Method Overriding:
You can always override your parent class methods. One reason for overriding parent's
methods is that you may want special or different functionality in your subclass.
Example
class Parent: # define parent class def
myMethod(self):
print ('Calling parent method')
150
151
(9)Data Encapsulation:
Simplifying the script by identifying the repeated code and placing it in a function. This
is called ’encapsulation’.
Encapsulation is the process of wrapping a piece of code in a function, allowing you to
take advantage of all the things functions are good for.
Generalization means taking something specific, such as printing the multiples of 2, and
making it more general, such as printing the multiples of any integer. This function
encapsulates the previous loop and generalizes it to print multiples of n:
To encapsulate, all we had to do was add the first line, which declares the name of the
function and the parameter list. To generalize, all we had to do was replace the value 2 with
the parameter n. If we call this function with the argument 2, we get the same output as
before. With the argument 3, the output is:
3 6 9 12 15 18
4 8 12 16 20 24
By now you can probably guess how to print a multiplication table—by calling print multiples
repeatedly with different arguments. In fact, we can use another loop:
i = 1
while i <= 6:
152
More encapsulation
To demonstrate encapsulation again, let’s take the code from the last section and wrap it up in
a function:
def print_mult_table():
i = 1
while i <= 6:
This process is a common development plan. We develop code by writing lines of code
outside any function, or typing them in to the interpreter. When we get the code working, we
extract it and wrap it up in a function. This development plan is particularly useful if you
don’t know how to divide the program into functions when you start writing. This approach
lets you design as you go along.
153
When the above code is executed, it produces the following result-
1
2
Traceback (most recent call last):
File "C:/Users/USER/AppData/Local/Programs/Python/Python36-32/try2.py", line 9, in
<module>
print (counter. secretCount)
AttributeError: 'JustCounter' object has no attribute ' secretCount'
Python protects those members by internally changing the name to include the class name.
You can access such attributes as object._className attrName. If you would replace your last
line as following, then it works for you-
.........................
print (counter._JustCounter secretCount)
1
2
2
• threading.enumerate(): Returns a list of all the thread objects that are currently
active.
In addition to the methods, the threading module has the Thread class that implements
threading. The methods provided by the Thread class are as follows:
• run(): The run() method is the entry point for a thread.
• start(): The start() method starts a thread by calling the run method.
• join([time]): The join() waits for threads to terminate.
• isAlive(): The isAlive() method checks whether a thread is still executing.
• getName(): The getName() method returns the name of a thread.
154
• setName(): The setName() method sets the name of a thread.
Example:
import threading import time
exitFlag = 0 class myThread
(threading.Thread):
def init (self, threadID, name, counter):
threading.Thread. init (self)
self.threadID = threadID self.name =
name self.counter = counter
def run(self): print ("Starting " +
self.name) print_time(self.name,
self.counter, 5) print ("Exiting " +
self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print ("%s: %s" % (threadName,
time.ctime(time.time()))) counter -= 1 # Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print ("Exiting Main Thread")
155
When we run the above program, it produces the following result-
Starting Thread-1Starting Thread-2
156
import threading import time class
myThread (threading.Thread):
def init (self, threadID, name, counter):
threading.Thread. init (self)
self.threadID = threadID self.name =
name self.counter = counter
def run(self): print ("Starting " +
self.name) # Get lock to
synchronize threads
threadLock.acquire()
print_time(self.name, self.counter, 3) #
Free lock to release next thread
threadLock.release()
def print_time(threadName, delay, counter):
while counter:
time.sleep(delay)
print ("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
threadLock = threading.Lock() threads
= []
# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
# Add threads to thread list
threads.append(thread1)
threads.append(thread2)
# Wait for all threads to complete for
t in threads:
t.join() print ("Exiting
Main Thread")
157
Thread-2: Sun Jun 18 13:50:13 2017
Thread-2: Sun Jun 18 13:50:15 2017
Exiting Main Thread
Example
import queue import threading import time exitFlag = 0 class myThread
(threading.Thread): def init (self, threadID, name, q): threading.Thread. init (self)
self.threadID = threadID self.name = name
self.q = q
def run(self):
print ("Starting " + self.name) process_data(self.name, self.q) print ("Exiting " +
self.name)
def process_data(threadName, q):
while not exitFlag:
queueLock.acquire() if not workQueue.empty():
data = q.get() queueLock.release()
158
print ("%s processing %s" % (threadName, data))
else:
queueLock.release() time.sleep(1) threadList
= ["Thread-1", "Thread-2", "Thread-3"] nameList =
["One", "Two", "Three", "Four", "Five"] queueLock
= threading.Lock()
workQueue =
queue.Queue(10) threads = []
threadID = 1
# Create new threads
for tName in threadList:
thread = myThread(threadID, tName,
workQueue) thread.start() threads.append(thread)
threadID += 1 # Fill the queue queueLock.acquire()
for word in nameList:
workQueue.put(word)
queueLock.release() # Wait
for queue to empty while not
workQueue.empty(): pass
# Notify threads it's time to exit exitFlag
=1
# Wait for all threads to complete for
t in threads:
t.join() print ("Exiting
Main Thread")
159
4.4Modules:
A module allows you to logically organize your Python code. Grouping related code into a
module makes the code easier to understand and use. A module is a Python object with
arbitrarily named attributes that you can bind and reference.
Simply, a module is a file consisting of Python code. A module can define functions, classes
and variables. A module can also include runnable code. Example
The Python code for a module named aname normally resides in a file namedaname.py.
Here is an example of a simple module, support.py
When the interpreter encounters an import statement, it imports the module if the module
is present in the search path. A search path is a list of directories that the interpreter
searches before importing a module. For example, to import the module hello.py, you need
to put the following command at the top of the script-
Hello : Zara
A module is loaded only once, regardless of the number of times it is imported. This
prevents the module execution from happening repeatedly, if multiple imports occur.
160
The from...import Statement
Python's from statement lets you import specific attributes from a module into the current
namespace. The from...import has the following syntax-
161
From modname import name1[, name2[, ... nameN]]
For example, to import the function fibonacci from the module fib, use the following
statement-
This statement does not import the entire module fib into the current namespace; it just
introduces the item fibonacci from the module fib into the global symbol table of the
importing module.
This provides an easy way to import all the items from a module into the current
namespace; however, this statement should be used sparingly.
162
>>> import urllib
>>> dir(urllib)
[' builtins ', ' cached ', ' doc ', ' file ', ' loader ', ' name ', ' package ',
' path ', ' spec ', 'parse']
math.ceil(x)
Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
math.copysign(x, y)
Return x with the sign of y. On a platform that supports signed zeros, copysign(1.0, -
0.0) returns -1.0.
New in version 2.6.
math.fabs(x)
Return the absolute value of x.
math.factorial(x)
Return x factorial. Raises ValueError if x is not integral or is negative. New
in version 2.6.
math.floor(x)
Return the floor of x as a float, the largest integer value less than or equal to x.
math.fmod(x, y)
Return fmod(x, y), as defined by the platform C library. Note that the Python expression x
% y may not return the same result. The intent of the C standard is that fmod(x, y) be
163
exactly (mathematically; to infinite precision) equal to x - n*y for some integer n such
that the result has the same sign as x and magnitude less than abs(y).
Python’s x % y returns a result with the sign of y instead, and may not be exactly computable
for float arguments. For example, fmod(-1e-100, 1e100) is -1e-100, but the result of Python’s
- 1e-100 % 1e100 is 1e100-1e-100, which cannot be represented exactly as a float, and rounds
to the surprising 1e100. For this reason, function fmod() is generally preferred when working
with floats, while Python’s x % y is preferred when working with integers.
math.frexp(x)
Return the mantissa and exponent of x as the pair (m, e). m is a float and e is an integer such
that x == m * 2**e exactly. If x is zero, returns (0.0, 0), otherwise 0.5 <= abs(m) < 1. This is
used to “pick apart” the internal representation of a float in a portable way.
math.fsum(iterable)
Return an accurate floating point sum of values in the iterable. Avoids loss of precision by
tracking multiple intermediate partial sums:
>>>
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0
The algorithm’s accuracy depends on IEEE-754 arithmetic guarantees and the typical case
where the rounding mode is half-even. On some non-Windows builds, the underlying C
library uses extended precision addition and may occasionally double-round an intermediate
sum causing it to be off in its least significant bit.
For further discussion and two alternative approaches, see the ASPN cookbook recipes for
accurate floating point summation.
New in version 2.6.
math.isinf(x)
Check if the float x is positive or negative infinity. New
in version 2.6.
math.isnan(x)
Check if the float x is a NaN (not a number). For more information on NaNs, see the IEEE
754 standards. New in version 2.6.
math.ldexp(x, i)
Return x * (2**i). This is essentially the inverse of function frexp().
math.modf(x)
Return the fractional and integer parts of x. Both results carry the sign of x and are floats.
math.trunc(x)
164
Return the Real value x truncated to an Integral (usually a long integer). Uses the
trunc method.
New in version 2.6.
Note that frexp() and modf() have a different call/return pattern than their C equivalents: they
take a single argument and return a pair of values, rather than returning their second return
value through an ‘output parameter’ (there is no such thing in Python).
For the ceil(), floor(), and modf() functions, note that all floating-point numbers of
sufficiently large magnitude are exact integers. Python floats typically carry no more than
53 bits of precision (the same as the platform C double type), in which case any float x with
abs(x) >= 2**52 necessarily has no fractional bits.
math.exp(x)
Return e**x.
math.expm1(x)
Return e**x - 1. For small floats x, the subtraction in exp(x) - 1 can result in a significant loss
of precision; the expm1() function provides a way to compute this quantity to full precision:
>>>
>>> from math import exp, expm1
>>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05
>>> expm1(1e-5) # result accurate to full precision
1.0000050000166668e-05 New
in version 2.7. math.log(x[,
base])
With one argument, return the natural logarithm of x (to base e).
With two arguments, return the logarithm of x to the given base, calculated as
log(x)/log(base). Changed in version 2.3: base argument added. math.log1p(x)
Return the natural logarithm of 1+x (base e). The result is calculated in a way which is
accurate for x near zero.
New in version 2.6.
math.log10(x)
Return the base-10 logarithm of x. This is usually more accurate than log(x, 10).
math.pow(x, y)
Return x raised to the power y. Exceptional cases follow Annex ‘F’ of the C99 standard as far
as possible. In particular, pow(1.0, x) and pow(x, 0.0)always return 1.0, even when x is a zero
or a NaN. If both x and y are finite, x is negative, and y is not an integer then pow(x, y) is
undefined, and raises ValueError.
Unlike the built-in ** operator, math.pow() converts both its arguments to type float.
Use ** or the built-in pow() function for computing exact integer powers.
165
Changed in version 2.6: The outcome of 1**nan and nan**0 was undefined.
math.sqrt(x)
Return the square root of x.
math.acos(x)
Return the arc cosine of x, in radians.
math.asin(x)
Return the arc sine of x, in radians.
math.atan(x)
Return the arc tangent of x, in radians.
math.atan2(y, x)
Return atan(y / x), in radians. The result is between -pi and pi. The vector in the plane from
the origin to point (x, y) makes this angle with the positive X axis. The point of atan2() is that
the signs of both inputs are known to it, so it can compute the correct quadrant for the angle.
For example, atan(1) and atan2(1, 1) are both pi/4, but atan2(-1, -1) is -3*pi/4.
math.cos(x)
Return the cosine of x radians.
math.hypot(x, y)
Return the Euclidean norm, sqrt(x*x + y*y). This is the length of the vector from the origin to
point (x, y).
math.sin(x)
Return the sine of x radians.
math.tan(x)
Return the tangent of x radians.
math.radians(x)
Convert angle x from degrees to radians.
166
(e)Hyperbolic functions
math.acosh(x)
Return the inverse hyperbolic cosine of x.
New in version 2.6.
math.asinh(x)
Return the inverse hyperbolic sine of x.
New in version 2.6.
math.atanh(x)
Return the inverse hyperbolic tangent of x.
New in version 2.6.
167
math.cosh(x)
Return the hyperbolic cosine of x.
math.sinh(x)
Return the hyperbolic sine of x.
math.tanh(x)
Return the hyperbolic tangent of x.
math.erf(x)
Return the error function at x.
New in version 2.7.
math.erfc(x)
Return the complementary error function at x.
New in version 2.7.
math.gamma(x)
Return the Gamma function at x.
New in version 2.7.
math.lgamma(x)
Return the natural logarithm of the absolute value of the Gamma function at x. New
in version 2.7.
(g). Constants
math.pi
The mathematical constant π = 3.141592..., to available precision.
math.e
The mathematical constant e = 2.718281..., to available precision.
Warning
The pseudo-random generators of this module should not be used for security
purposes. For security or cryptographic uses, see thesecrets module.
random.getrandbits(k)
Returns a Python integer with k random bits. This method is supplied with the
MersenneTwister generator and some other generators may also provide it as an
optional part of the API. When available, getrandbits() enables randrange() to handle
arbitrarily large ranges.
random.randint(a, b)
Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).
random.shuffle(x[, random])
Shuffle the sequence x in place.
The optional argument random is a 0-argument function returning a random float in
[0.0, 1.0); by default, this is the function random().
To shuffle an immutable sequence and return a new shuffled list, use
sample(x, k=len(x)) instead.
Note that even for small len(x), the total number of permutations of x can quickly grow
larger than the period of most random number generators. This implies that most
permutations of a long sequence can never be generated. For example, a sequence of
length 2080 is the largest that can fit within the period of the Mersenne Twister random
number generator.
random.sample(population, k)
Return a k length list of unique elements chosen from the population sequence or set.
Used for random sampling without replacement.
Returns a new list containing elements from the population while leaving the original
population unchanged. The resulting list is in selection order so that all sub-slices will
also be valid random samples. This allows raffle winners (the sample) to be partitioned
into grand prize and second place winners (the subslices).
Members of the population need not be hashable or unique. If the population contains
repeats, then each occurrence is a possible selection in the sample.
To choose a sample from a range of integers, use a range() object as an argument. This
is especially fast and space efficient for sampling from a large population:
sample(range(10000000), k=60).
If the sample size is larger than the population size, a ValueError is raised.
random.random()
Return the next random floating point number in the range [0.0, 1.0).
random.uniform(a, b)
Return a random floating point number N such that a
<= N <= b for a <= b and b <= N <= a for b < a.
171
The end-point value b may or may not be included in the range depending on floating-
point rounding in the equation a + (b-a) * random().
random.expovariate(lambd)
Exponential distribution. lambd is 1.0 divided by the desired mean. It should be
nonzero. (The parameter would be called “lambda”, but that is a reserved word in
Python.) Returned values range from 0 to positive infinity if lambd is positive, and from
negative infinity to 0 if lambd is negative.
random.gammavariate(alpha, beta)
Gamma distribution. (Not the gamma function!) Conditions on the parameters are
alpha > 0 and beta > 0.
The probability distribution function is: x
** (alpha - 1) * math.exp(-x / beta)
pdf(x) = --------------------------------------
math.gamma(alpha) * beta ** alpha
random.gauss(mu, sigma)
Gaussian distribution. mu is the mean, and sigma is the standard deviation. This is
slightly faster than the normalvariate() function defined below.
random.lognormvariate(mu, sigma)
Log normal distribution. If you take the natural logarithm of this distribution, you’ll get
a normal distribution with mean mu and standard deviation sigma. mu can have any
value, and sigma must be greater than zero.
random.normalvariate(mu, sigma)
Normal distribution. mu is the mean, and sigma is the standard deviation.
random.vonmisesvariate(mu, kappa)
mu is the mean angle, expressed in radians between 0 and 2*pi, and kappa is the
concentration parameter, which must be greater than or equal to zero. If kappa is equal
to zero, this distribution reduces to a uniform random angle over the range 0 to 2*pi.
random.paretovariate(alpha)
172
Pareto distribution. alpha is the shape parameter.
random.weibullvariate(alpha, beta)
Weibull distribution. alpha is the scale parameter and beta is the shape parameter.
1 time.altzone
The offset of the local DST timezone, in seconds west of UTC, if one is defined.
This is negative if the local DST timezone is east of UTC (as in Western Europe,
including the UK). Use this if the daylight is nonzero.
2 time.asctime([tupletime])
Accepts a time-tuple and returns a readable 24-character string such as 'Tue Dec
11 18:07:14 2008'.
173
3 time.clock( )
4 time.ctime([secs])
5 time.gmtime([secs])
Accepts an instant expressed in seconds since the epoch and returns a time-tuple
t with the UTC time. Note : t.tm_isdst is always 0
174
6 time.localtime([secs])
Accepts an instant expressed in seconds since the epoch and returns a time-tuple
t with the local time (t.tm_isdst is 0 or 1, depending on whether DST applies to
instant secs by local rules).
7 time.mktime(tupletime)
8 time.sleep(secs)
9 time.strftime(fmt[,tupletime])
Parses str according to format string fmt and returns the instant in time-tuple
format.
11 time.time( )
Returns the current time instant, a floating-point number of seconds since the
epoch.
12 time.tzset()
Resets the time conversion rules used by the library routines. The environment
variable TZ specifies how this is done.
157
158
PYTHON
PROGRAMMING
UNIT 5 NOTES
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 2 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
CHAPTER I:CREATING THE GUI FORM AND ADDING WIDGETS
Topics covered: Widgets: Button, Canvas,Checkbutton, Entry, Frame, Label, Listbox, Menubutton, Menu,
Message, Radiobutton, Scale, Scrollbar, text, Toplevel, Spinbox, PanedWindow, LabelFrame, tkMessagebox.
Handling Standard attributes and Properties of Widgets.
Layout Management: Designing GUI applications with proper Layout Management features.
Look and Feel Customization:Enhancing Look and Feel of GUI using different appearances of widgets.
python provides various options for developing graphical user interfaces (GUIs). Most important are listed
below.
Tkinter − Tkinter is the Python interface to the Tk GUI toolkit shipped with Python. We would look
this option in this chapter.
wxPython − This is an open-source Python interface for wxWind ows http://wxpython.org.
JPython − JPython is a Python port for Java which gives Python scripts seamless access to Java
class libraries on the local machine http://www.jython.org.
There are many other interfaces available, which you can find them on the net.
Tkinter Programming
Tkinter is the standard GUI library for Python. Python when combined with Tkinter provides a fast and
easy way to create GUI applicat ions. Tkinter provides a powerful object -oriented interface to the Tk GUI
toolkit.
Creating a GUI application using Tkinter is an easy task. All you need to do is perform the following steps
−
Import the Tkinter module.
Create the GUI application main window.
Add one or more of the above -mentioned widgets to the GUI application.
Enter the main event loop to take action against each event triggered by the user.
Example
#!/usr/bin/python
import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()
This would create a following window −
Page 3 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Tkinter Widgets
Tkinter provides various controls, such as buttons, labels and text boxes used in a GUI application. These
controls are commonly called widgets.
There are currently 15 types of widgets in Tkinter. We present these widgets as well as a brief description
in the following table –
Page 4 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 5 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 6 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 7 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 8 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Try the following example yourself −
Page 9 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
import Tkinter
importtkMessageBox top
= Tkinter.Tk()
def helloCallBack():
B.pack()
top.mainloop()
The Canvas is a rectangular area intended for drawing pictures or other complex layouts. You can place
graphics, text, widgets or frames on a Canvas.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
Page 10 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
1 Bd
Page 11 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 12 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
12 yscrollincrement
13 yscrollcommand
If the canvas is scrollable, this attribute should be the .set() method of the vertical
scrollbar.
arc − Creates an arc item, which can be a chord, a pieslice or a simple arc.
image − Creates an image item, which ca n be an instance of either the BitmapImage or the PhotoImage
classes.
oval − Creates a circle or an ellipse at the given coordinates. It takes two pairs of coordinates; the top
left and bottom right corners of the bounding rectangle for the oval.
polygon − Creates a polygon item that must have at least three vertices.
Example
import Tkinter
top = Tkinter.Tk()
Page 13 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
When the above code is executed, it produces the following result −
The Checkbutton widget is used to disp lay a number of options to a user as toggle buttons. The user can
then select one or more options by clicking the button corresponding to each option.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
1 activebackground
2 activeforeground
3 bg
Page 14 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 15 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 16 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 17 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
3 invoke()
You can call this method to get the same actions that would occur if the user clicked
on the checkbutton to change its state.
4 select()
5 toggle()
Example
importtkMessageBox
import Tkinter
top = Tkinter.Tk()
CheckVar1 = IntVar()
CheckVar2 = IntVar()
width = 20)
width = 20)
C1.pack()
C2.pack()
top.mainloop()
Page 18 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 19 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 20 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 21 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 22 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
scroll by character widths, or PAGES, to scroll by chunks the size of the entry widget.
The number is positive to scroll left to right, negative to scroll right to left.
Example
Try the following example yourself −
top = Tk()
E1 = Entry(top, bd =5)
E1.pack(side = RIGHT)
top.mainloop()
Frame :
The Frame widget is very important for the process of grouping and organizing other widgets in a
somehow friendly way. It works like a container, which is responsible for arranging the position of other
widgets.
It uses rectangular areas in the screen to o rganize the layout and to provide padding of these widgets. A
frame can also be used as a foundation class to implement complex widgets.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
Page 23 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 24 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
frame = Frame(root)
frame.pack() bottomframe
= Frame(root)
root.mainloop()
Label:
This widget implements a display box wh ere you can place text or images. The text displayed by this
widget can be updated at any time you want.
It is also possible to underline part of the text (like to identify a keyboard shortcut) and span the text
across multiple lines.
Syntax
Parameters
• options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
Page 25 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 26 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 27 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Try the following example yourself −
Page 28 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 29 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 30 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 31 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Scrolls the listbox vertically. For the what argument, use either UNITS to scroll by lines,
or PAGES to scroll by pages, that is, by the height of the listbox. The number argument
tells how many to scroll.
Example
importtkMessageBox
import Tkinter
top = Tk()
Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
Lb1.pack()
top.mainloop()
------------------------------------------------------------------------------------------------------
Menubutton:
Page 32 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
A menubutton is the part of a drop-down menu that stays on the screen all the time. Every menubutton is
associated with a Menu widget that can display the choices for that menubutton when the user clicks on it.
Page 33 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Syntax
Page 34 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 35 of 113
PYTHON
19 State
Normally, menubuttons respond to the mouse. Set state=DISABLED to gray out the
menubutton and make it unresponsive.
20 T ext
To display text on the menubutton, set this option to the string containing the desired
text. Newlines ("\n") within the string will cause line breaks.
21 textvariable
You can associate a control variable of class StringVar with this menubutton. Setting
that control variable wi ll change the displayed text.
22 underline
Normally, no underline appears under the text on the menubutton. To underline one
of the characters, set this option to the index of that character.
23 Width
24 wraplength
Normally, lines are not wrapped. You can set this option to a number of characters
and all lines will be broken into pieces no longer than that number.
Example
importtkMessageBox
import Tkinter
Page 36 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
top = Tk() mb= Menubutton ( top, text="condiments",
0)
mb["menu"] = mb.menu
mayoVar = IntVar()
ketchVar = IntVar()
mb.menu.add_checkbutton( label="mayo",
variable=mayoVar )
mb.menu.add_checkbutton( label="ketchup",variable=ketchVar )
mb.pack()
top.mainloop()
Menu:
The goal of this widget is to allow us to create all kinds of menus that can be used by our applications. The
core functionality prov ides ways to create three menu types: pop -up, toplevel and pull-down.
It is also possible to use other extended widgets to implement new types of menus, such as
the OptionMenu widget, which implements a special type that generates a pop -up list of items wi thin a
selection.
Syntax
Parameters
Page 37 of 113
PYTHON
Sr.No. Description
1 activebackground
The background color that will appear on a choice when it is under the mouse.
Page 38 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 39 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 40 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
5 add_separator()
Adds a separator line to the menu.
Allows you to modify a menu item, which is identified by the index, and change its
options.
9 index(item)
10 insert_separator ( index )
11 invoke ( index )
Calls the command callback associated with the choice at position index. If a
checkbutton, its state is toggled between set and cleared; if a radiobutton, that choice
is set.
12 type ( index )
Returns the type of the choice specified by index: either "cascade", "checkbutton",
"command", "radiobutton", "separator", or "tearoff".
Example
defdonothing(): filewin
= Toplevel(root) button
= Button(filewin,
Page 41 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
text="Do nothing
button") button.pack()
root = Tk()
menubar = Menu(root)
filemenu.add_command(label="New", command=donothing)
filemenu.add_command(label="Open", command=donothing)
filemenu.add_command(label="Save", command=donothing)
filemenu.add_command(label="Close", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
editmenu.add_command(label="Undo", command=donothing)
editmenu.add_separator()
editmenu.add_command(label="Cut", command=donothing)
editmenu.add_command(label="Copy", command=donothing)
editmenu.add_command(label="Paste", command=donothing)
editmenu.add_command(label="Delete", command=donothing)
menubar.add_cascade(label="Edit", menu=editmenu)
helpmenu.add_command(label="About...", command=donothing)
Page 42 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
menubar.add_cascade(label="Help", menu=helpmenu)
root.config(menu=menubar) root.mainloop()
Page 43 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 44 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 45 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 46 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 47 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Try the following example yourself −
Page 48 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
from Tkinter import *
defsel():
selection = "Value = " + str(var.get())
label.config(text = selection)
root = Tk()
var = DoubleVar()
scale.pack(anchor=CENTER)
button.pack(anchor=CENTER)
label = Label(root)
label.pack()
root.mainloop()
Radiobutton:
This widget implements a multiple-choice button, which is a way to offer many possible selections to the
user and lets user choose only one of them.
In order to implement this functionality, each group of radiobuttons must be associated to the same variable
and each one of the buttons must symbolize a single value. You can use the Tab key to switch from one
radionbutton to another.
Page 49 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Syntax
Page 50 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 51 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 52 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
IntVar()
R2.pack( anchor = W )
command=sel)
R3.pack( anchor = W)
label = Label(root)
label.pack()
root.mainloop()
Scrollbar:
This widget provides a slide controller that is used to implement vertical scrolled widgets, such as Listbox,
Text and Canvas. Note that you can also create horizontal scrollbars on Entry widgets.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These options can be used
as key-value pairs separated by commas.
Page 54 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 55 of 113
PYTHON
PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 56 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Example
root = Tk()
scrollbar = Scrollbar(root)
mainloop()
Text:
Text widgets provide advanced capabilities that allow you to edit a multiline text and format the way it has
to be displayed, such as changing its color and font.
You can also use elegant structures like tabs and marks to locate specific sections of the text, and apply
changes to those areas. Moreover, you can embed windows and images in the text because this widget
was designed to handle both plain and formatted text.
Syntax
• options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
Page 58 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 59 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 60 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 61 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
1 index(mark)
Page 62 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 63 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Example
Tkinter import *
def onclick():
pass
root = Tk()
text = Text(root)
text.insert(INSERT, "Hello.....")
text.pack()
root.mainloop()
-------------------------------------------------------------------------------------------------------
Toplevel :
Toplevel widgets work as windows that are directly managed by the window manager. They do not
necessarily have a parent widget on top of them.
Syntax
Page 64 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Here is the simple syntax to create this widget − w
Parameters
• options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
Page 65 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
9 width
Page 66 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Methods
1 deiconify()
Displays the window, after using either the iconify or the withdraw methods.
2 frame()
3 group(window)
Adds the window to the window group administered by the given window.
4 iconify()
5 protocol(name, function)
Page 67 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 68 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Example
= Tk()
Page 69 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
top = Toplevel()
top.mainloop()
Spinbox:
The Spinbox widget is a variant of the standard Tkinter Entry widget, which can be used to select from a
fixed number of values.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These opt ions can be
used as key-value pairs separated by commas.
1 activebackground
The color of the slider and arrowheads when the mouse is over them.
2 bg
The color of the slider and arrowheads when the mouse is not over them.
Page 70 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 71 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
23 width
Page 72 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 73 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Example
from Tkinter import * master = Tk() w
Page 74 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
w.pack()
mainloop()
A PanedWindow is a container widget that may contain any number of panes, arranged horizontally or
vertically.
Each pane contains one widget and each pair of panes is separated by a movable (via mouse movements)
sash. Moving a sash causes the widgets on eith er side of the sash to be resized.
Syntax
Parameters
options − Here is the list of most commonly used options for this widg et. These options can be
used as key-value pairs separated by commas.
1 bg
The color of the slider and arrowheads when the mouse is not over them.
2 bd
The width of the 3 -d borders around the entire perimeter of the trough, and also the
width of the 3 -d effects on the arrowheads and slider. Default is no border around the
trough, and a 2 -pixel border around the arrowheads and slider. Page 75 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
3 borderwidth
Page 76 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
14 width
No default value.
Page 77 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Methods
1 add(child, options)
2 get(startindex [,endindex])
3 config(options)
Modifies one or more widget options. If no options are given, the method returns a
dictionary containing all current option values.
Example
m1 = PanedWindow()
m1.pack(fill=BOTH, expand=1)
m1.add(left)
m2 = PanedWindow(m1, orient=VERTICAL)
m1.add(m2)
Page 78 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
mainloop()
LabelFrame:
A labelframe is a simple container widget. Its primary purpose is to act as a spacer or container for
complex window layouts.
This widget has the features of a frame plus the ability to display a label.
Syntax
Parameters
options − Here is the list of most commonly used options for this widget. These options can be
used as key-value pairs separated by commas.
1 bg
The normal background color displayed behind the label and indicator.
2 bd
3 cursor
If you set this option to a cursor name ( arrow, dot etc.), the mouse cursor will change
to that pattern when it is over the checkbutton.
Page 79 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Page 80 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
left = Label(labelframe, text="Inside the LabelFrame")
left.pack() root.mainloop()
tkMessageBox:
The tkMessageBox module is used to display message boxes in your applications. This module provides a
number of functions that you can use to display an appropriate message.
Some of these functions are showin fo, showwarning, showerror, askquestion, askokcancel, askyesno, and
askretryignore.
Syntax
Parameters
title − This is the text to be displayed in the title bar of a message box.
options − options are alternative choices that you may use to tailor a standard message box. Some of
the options that you can use are default and parent. The default option is used to specify the default
button, such as ABORT, RETRY, or IGNORE in the message box. The parent option is used to specify the
window on top of which the message box is to be dis played.
You could use one of the following functions with dialogue box −
showinfo()
showwarning()
showerror ()
• askquestion()
• askokcancel()
• askyesno ()
Page 81 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
• askretrycancel ()
Example
import Tkinter
import tkMessageBox
top = Tkinter.Tk()
def hello():
B1.pack()
top.mainloop()
-----------------------------------------------------------------------------------------------------
Handling Standard attributes:
Dimensions
Colors
Fonts
Anchors
Relief styles
Bitmaps
Cursors
Page 82 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Dimensions:
Various lengths, widths, and other dimensions of widgets can be described in many different units.
• If you set a dimension to an integer, it is assumed to be in pixels.
• You can specify units by setting a dimension to a string containing a number followed by.
• activebackground − Background color for the widget when the widget is active.
• activeforeground − Foreground color for the widget when the widget is active.
Page 83 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
• background − Background color for the widget. This can also be represented as bg.
• disabledforeground − Foreground color for the widget when the widget is disabled.
• foreground − Foreground color for the widget. This can also be represented as fg.
• highlightbackground − Background color of the highlight region when the widget has focus.
• highlightcolor − Foreground color of the highlight region when the widget has focus.
• selectbackground − Background color for the selected items of the widget.
• selectforeground − Foreground color for the selected items of the widget.
Fonts:
As a tuple whose first element is the font family, followed by a size in points, optionally followed by a
string containing one or more of the style modifiers bold, italic, underline and overstrike.
Example
("Helvetica", "16") for a 16-point Helvetica regular.
("Times", "24", "bold italic") for a 24-point Times bold italic.
You can create a "font object" by importing the tkFont module and using its Font class constructor −
import tkFont
Example
helv36 = tkFont.Font(family="Helvetica",size=36,weight="bold")
X Window Fonts
If you are running under the X Window System, you can use any of the X font names.
Page 84 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Anchors:
Anchors are used to define where text is positioned relative to a reference point.
Here is list of possible constants, which can be used for Anchor attribute.
Page 85 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
NW
N
NE
W
CENTER
E
SW
S
SE
For example, if you use CENTER as a text anchor, the text will be centered horizontally and vertically
around the reference point.
Anchor NW will position the text so that the reference point coincides with the northwest (top left)
corner of the box containing the text.
Anchor W will center the text vertically around the reference point, with the left edge of the text box
passing through that point, and so on.
If you create a small widget inside a large frame and use the anchor=SE option, the widget will be
placed in the bottom right corner of the frame. If you used anchor=N instead, the widget would be
centered along the top edge.
Example
Relief styles
The relief style of a widget refers to certain simulated 3-D effects around the outside of the widget.
Here is a screenshot of a row of buttons exhibiting all the possible relief styles −
Page 86 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Here is list of possible constants which can be used for relief attribute.
FLAT
RAISED
SUNKEN
GROOVE
RIDGE
Example
import Tkinter
top = Tkinter.Tk()
B1.pack()
B2.pack()
B3.pack()
B4.pack()
B5.pack()
top.mainloop()
Page 87 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Bitmaps:
This attribute to displays a bitmap. There are following type of bitmaps available −
"error"
"gray75"
"gray50"
"gray25"
"gray12"
"hourglass"
"info"
"questhead"
"question"
"warning"
Example
import Tkinter
top = Tkinter.Tk()
bitmap="error")
bitmap="hourglass")
Page 88 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
bitmap="info")
B4 = Tkinter.Button(top, text ="question", relief=RAISED,\
bitmap="question")
bitmap="warning")
B1.pack()
B2.pack()
B3.pack()
B4.pack()
B5.pack()
top.mainloop()
Cursors:
Python Tkinter supports quite a number of different mouse cursors available. The exact graphic may vary
according to your operating system.
Here is the list of interesting ones −
"arrow"
"dotbox"
"exchange"
"fleur"
• "circle"
• "clock"
• "cross"
Page 89 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
• "heart"
• "heart"
• "man"
• "mouse"
• "pirate"
• "plus"
• "shuttle"
• "sizing"
• "spider"
• "spraycan"
"star"
"target"
"tcross"
Example
from Tkinter import *
import Tkinter
top = Tkinter.Tk()
• "trek"
• "watch" CHAPTER II: LAYOUT MANAGEMENT
Page 90 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Geometry Management
All Tkinter widgets have access to specific geometry management methods, which have the purpose of
organizing widgets throughout the parent widget area. Tkinter exposes the following geometry manager
classes: pack, grid, and place.
• The pack() Method − This geometry manager organizes widgets in blocks before placing them in
the parent widget.
The grid() Method − This geometry manager organizes widgets in a table -like structure in the
parent widget.
The place() Method − This geometry manager organizes widgets by placing them in a specific
position in the parent widget.
---------------------------------------------------------------------------------------------------------------------
The pack() Method
This geometry manager organizes widgets in blocks before placing them in the parent widget.
widget.pack( pack_options )
Here is the list of possible options −
expand − When set to true, widget expands to fill any space not otherwise used in widget's
parent.
fill − Determines whether widget fills any extra space allocated to it by the packer, or keeps its
own minimal dimensions: NONE (default), X (fill only horizontally), Y (fill only vertically), or BOTH
(fill both horizontally and vertically).
side − Determines which side of the parent widget packs against: TOP (default), BOTTOM, LEFT,
or RIGHT.
Example
Try the following example by moving cursor on different buttons −
from Tkinter import *
root = Tk()
frame = Frame(root)
frame.pack()
bottomframe = Frame(root)
bottomframe.pack( side = BOTTOM )
Syntax
Page 91 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
root.mainloop()
When the above code is executed, it produces the following result −
----------------------------------------------------------------------------------------------------------------------
Page 92 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
The grid() Method
This geometry manager organizes widgets in a table-like structure in the parent widget.
Syntax
widget.grid( grid_options )
Here is the list of possible options −
column − The column to put widget in; default 0 (leftmost column).
columnspan − How many columns widgetoccupies; default 1.
ipadx, ipady − How many pixels to pad widget, horizontally and vertically, inside widget's
borders.
padx, pady − How many pixels to pad widget, horizontally and vertically, outside v's borders.
row − The row to put widget in; default the first row that is still empty.
rowspan − How many rowswidget occupies; default 1.
sticky − What to do if the cell is larger than widget. By default, with sticky='', widget is centered
in its cell. sticky may be the string concatenation of zero or mo re of N, E, S, W, NE, NW, SE, and
SW, compass directions indicating the sides and corners of the cell to which widget sticks.
Example
import Tkinter
root = Tkinter.Tk( )
for r in range(3):
for c in range(4):
Tkinter.Label(root, text='R%s/C%s'%(r ,c),
borderwidth=1 ).grid(row=r,column=c)
root.mainloop( )
This would produce the following result displaying 12 labels arrayed in a 3 × 4 grid −
Page 93 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
from Tkinter import *
import tkMessageBox
import Tkinter
top = Tkinter.Tk()
def helloCallBack():
tkMessageBox.showinfo( "Hello Python", "Hello World")
B = Tkinter.Button(top, text ="Hello", co mmand = helloCallBack)
B.pack()
B.place(bordermode=OUTSIDE, height=100, width=100)
top.mainloop()
When the above code is executed, it produces the following result −
Page 94 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
A message box is a pop-up window that gives feedback to the user. It can be informational,hinting at
potential problems as well as catastrophic errors.
We will add functionality to the Help | About menu item we created in the previous chapter, in the
Creating tabbed widgets recipe.
The code is from GUI_tabbed_all_widgets_both_tabs.py. The typical feedback to the user when clicking
the Help | About menu in most applications is informational. We start with this information and then vary
the design pattern to show warnings and errors.
Add the following line of code to the top of the module where the import statements live:
Page 95 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Next, create a callback function that will display a message box. We have to locate the code
of the callback above the code where we attach the callback to the me nu item, because this
Add the following code just above the lines where we create the help menu:
GUI_message_box.py
Clicking Help | About now causes the following pop-up window to appear:
Let's transform this code into a warning message box pop-up window, instead. Comment out the previous
line and add the following code:
Running the preceding code will now result in the following slightly modified message box:
Page 96 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Displaying an error message box is simple and usually warns the user of a serious problem.
As we did in the previous code snippet, comment out the previous line and add the following code, as we
have done here:
Running this GUI code results in a popup whose user response can be used to branch on the answer of
this event-driven GUI loop, by saving it in the answer variable:
GUI_message_box_yes_no_cancel.py
Page 97 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
The console output using E clipse shows that clicking the Yes button results in the Boolean
value of True being assigned to the answer variable:
This does not look like what we had in mind. Now, we have two windows, one undesired and the second
with its text displayed as its title.
Oops!
Let's solve this now. We can change the Python code by adding a single or double quote, followed by a
comma:
Page 98 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
Now, we do not have a title but our text ended up inside the popup, as we had intended:
GUI_independent_msg_info.py
Page 99 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
The first parameter is the title and the second is the text displayed in the pop -up message box. By adding
an empty pair of single or double quotes, followed by a comma, we can move our text from the title into
the pop-up message box.
We still need a title and we definitely want to get rid of this unnecessary second window. The second
window is caused by a Windows event loop. We can get rid of it by suppressing it.
Add th e following code:
Now, we have only one window. The withdraw() function removes the debug window
that we are not interested in having floating around:
GUI_independent_msg_one_window.py
In order to add a title, all we have to do is place some string int o our empty first argument.
Getting ready
Instead of a pop-up dialog window, we create the main root window and give it a title.
The following code creates the main window and adds a title to it. We have already done
in the previous recipes, for example, in Creating tabbed widgets , in Chapter 2, Layout
Management. Here we just focus on this aspect of our GUI:
import tkinter as tk
win = tk.Tk() # Create instance
win.title("Python GUI") # Add a title
This gives a title to the main root window by using the built -in tkinter title property.
After we create a Tk() instance, we can use all the built-in tkinter properties to customize
our GUI.
Place the following code somewhere above the main event loop:
# Change the main windows icon
win.iconbitmap('pyc.ico')
Note how the feather default icon in the top-left corner of the GUI changed:
GUI_icon.py
----------------------------------------------------------------------------------------------------------------------
------------------------------------
Using a spin box control
In this recipe, we will use a Spinbox widget, and we will als o bind the Enter key on the keyboard to one of
our widgets.
Getting ready
We will use our tabbed GUI and add a Spinbox widget above the ScrolledText control.
This simply requires us to increment the ScrolledText row value by one and to insert our new Spinb ox
control in the row above the Entry widget.
First, we add the Spinbox control. Place the following code above the ScrolledText
widget:
# Adding a Spinbox widget
spin = Spinbox(mighty, from_=0, to=10)
spin.grid(column=0, row=2)
Next, we add another property to customize our widget further; bd is a short-hand notation
for the borderwidth property:
spin = Spinbox(mighty, from_=0, to=10, width=5 , bd=8)
Running the preceding code results in the following GUI:
GUI_spinbox_small_bd.py
Here, we add functionality to the widget by creating a callback and linking it to the control.
This will print the selection of the Spinbox into ScrolledText as well as onto stdout.
The variable named scrol is our reference to the ScrolledText widget:
# Spinbox callback
def _spin():
value = spin.get()
print(value)
scrol.insert(tk.INSERT, value + 'n')
spin = Spinbox(mighty, from_=0, to=10, width=5, bd=8,
command=_spin)
Running the preceding code results in the following GUI:
GUI_spinbox_small_bd_scrol.py
We will add one more Spinbox control to demonstrate the available appe arances of widgets, using the
relief property of the Spinbox control.
First, let's increase the borderwidth to distinguish our second Spinbox from the first
Spinbox:
# Adding a second Spinbox widget
spin = Spinbox(mighty, values=(0, 50, 100), width=5, bd=2 0,
command=_spin)
spin.grid(column=1, row=2)
This will create the following GUI output:
GUI_spinbox_two_sunken.py
Both our preceding Spinbox widgets have the same relief style. The only difference is that our new widget
to the right of the first Spinbox has a much larger border width.
In our code, we did not specify which relief property to use, so the relief defaulted to
tk.SUNKEN.
We imported tkinter as tk. This is why we can call the relief property as
tk.SUNKEN.
Here are the available relief property options that can be set:
tk.SUNKEN tk.RAISED tk.FLAT tk.GROOVE tk.RIDGE
By assigning the different available options to the relief property, we can create different appearances for
this widget.
Assigning the tk.RIDGE relief and reducing the border width to the same value as our first
Spinbox widget results in the following GUI:
GUI_spinbox_two_ridge.py
First, we created a second Spinbox aligned in the second column (index == 1). It defaults to
SUNKEN, so it looks similar to our first Spinbox. We distinguished the two widgets by
increasing the border width of the second control (the one on the right).
Next, we explicitly set the relief property of the Spinbox widget. We made the border width the same as
our first Spinbox because, by giving it a different relief, the differences became visible without having to
change any other properties.
Here is an example of the different options:
In an Object Oriented Programming (OOP) approach, we create a new class in our Python module.
Python allows us to place more than one class into the same Python module and it also enables us to mix-
and-match classes and regular functions in the same module.
The preceding code does exactly this.
The ToolTip class is a Python class, and in order to use it, we have to instantiate it.
We call the function that creates the ToolTip, and then we pass in a reference to the widget and the text
we wish to display when we hover the mouse over the widget.
The rest of the recipes in this book will use OOP when it makes sense. Here, we've shown the simp lest
OOP example possible. As a default, every Python class we create inherits from the object base class.
Python, being the pragmatic programming language that it truly is, simplifies the class creation process.
We can write the following syntax:
class To olTip(object):
pass
We can also simplify it by leaving the default base class out:
class ToolTip():
pass
Similarly, we can inherit and expand any tkinter class.
We connect each of our four new buttons to a new callback function, which we assign to their command
property:
Clicking the Run Progressbar button will run the Progressbar from the
left to the right, then the Progressbar will stop there, and the green bar
will disappear.
Here is the code:
Clicking the Start Progressbar button will start the Progressbar. The Progressbar will
run to the end, and then it will start all over from the left, in an endless loop:
def start_progressbar():
progress_bar.start()
In order to stop this endless loop of our progressbar widget, we simply create another
callback function and assign it to one of our buttons:
def stop_progressbar():
progress_bar.stop()
As soon as we click the Stop Progressbar button, our Progressbar will stop and it will
reset itself to the beginning, making it invisible. We no longer see a green bar inside
the Progressbar.
If we click the Run Progressbar button and then click the Stop
After we have created the new tab, we place a regular tk.Frame into it and assign it a background color of
blue. In the loop, we create two tk.Canvas widgets, making their color orange and assigning them to grid
coordinates 0,0 and 1,1. This also makes the blue background color of the tk.Frame visible in the two
other grid locations.
The following screenshot shows the result created by running the preceding code and clicking on the new
Tab 3. It really is orange and blue when you run the code. In a noncolored printed book, this might not be
visually obvious, but those colors are true; you can trust me on this.
You can check out the graphing and drawing capabilities by searching online. I will not go deeper into this
widget in this book (but it is very cool):
GUI_canvas.py
CHAPTER IV: STORING DATA IN OUR MYSQL DATABASE VIA OUR GUI
Topics covered: Connecting to a MySQL database from Python, Configuring the MySQL connection,
Designing the Python GUI database, Using the INSERT command, Using the UPDATE command, Using the
DELETE command, Storing and retrieving data from MySQL database.
----------------------------------------------------------------------------------------------------------------------
-----------------------------------
Before using mysql with python we need to install mysql first and mysqlconnector for python.
You will need to have access to a running MySQL Server instance and you also need to
have administrator privileges in order to crea te databases and tables.
There is a free MySQL Community Edition available from the official MySQL website. You
can download and install it on your local PC from h t t p ://d e v . m y s q l . c o m /d o w n l o a d s /w i n
d o w s /i n s t a l l e r /5. 7. h t m l :
During the installation process, you will choose a password for the Root user, and you can also add more
users. I recommend you add yourself as a DB Admin and choose a password as well:
Note: if you set password during installation remember that for further use.
Note : you can add user account to mysql , or you can use its inbuilt root user account.
After installing mysql we need to install mysql connector for python .
Before installing python connector first check version of your python .so no compatibility
issues will be there .
In order to connect to MySQL, we first need to install a special Python connector driver.
This driver will enable us to talk to the MySQL server from Python. There is a freely available driver on the
MySQL website and it comes with a very nice online tutorial:
h t t p ://d e v . m y s q l . c o m /d o c /c o n n e c t o r - p y t h o n /e n /i n d e x . h t m l
At the time of writing this book, this MySQL connector has not yet been updated to Python 3.6, so we wil l
follow a slightly different approach.
From h t t p ://w w w . l f d . u c i . e d u /~g o h l k e /p y t h o n l i b s /#m y s q l c l i e n t , we can
download apackage that lets us talk to our MySQL server via Python 3.6:
One way to verify that we have installed the correct driver and that it lets Python talk to
MySQL, is by looking into the Python site-packages directory. If your site-packages directory
First, let's verify that our MySQL server installation works by using the MySQL Command
Line Client. At the mysql> prompt, type SHOW DATABASES; then press Enter:
If you are not able to connect to the MySQL server via the Command Line Client or the
Python mysqlclient, then something probably went wrong during the installation. If this is
the case, try uninstalling, rebooting your PC, and then running the installation again.
A cursor is usually a place in a specific row in a database table, which we move up or down the table, but
here, we use it to create the database itself. We wra p the Python code into a try...except block and use
the built-in error codes of MySQL to tell us if anything went wrong.
We can verify that this block works by executing the database -creating code twice. The first time, it will
create a new database in MySQL, and the second time, it will print out an error message stating that this
database already exists:
MySQL_create_DB.py
This results in the same successful connection to the MySQL server, but the difference is that
the connection method no longer exposes any mission-critical information:
We can verify which databases exist by executing the following MySQL command using the
very same cursor object syntax. Instead of issuing the CREATE DATABASE command we create
a cursor and use it to execute the SHOW DATABASES command, the result of which we fetch
and print to the console output:
We will create two SQL tables to hold our data. The first will hold the data for the book title and book
page, and then, we will join with the second table, which will hold the book quotation. We will link the two
tables together via primary to foreign key relations.
So, let's create the first database table now. Before we do that, let's verify first that our database does,
indeed, have no tables. According to the online MySQL documentation, the command to view the tables
that exist in a database is as follows:
It is important to note that, in the preceding syntax, arguments in square brackets, such as FULL, are
optional while arguments in curly braces, such as FROM, are required for the SHOW TABLES command.
The pipe symbol between FROM and IN means that the MySQL syntax requires one or the other:
# unpack dictionary credentials
conn = mysql.connect(**guiConf.dbConfig)
# create cursor
cursor = conn.cursor()
# execute command
cursor.execute("SHOW TABLES FROM guidb")
print(cursor.fetchall())
# close connection to MySQL
conn.close()
When we execute the SQL command in Python, we get the expected result, which is an empty tuple
showing us that our database currently has no tables:
GUI_MySQL_class.py
We can also first select the database by executing the USE <DB> command and then we
don't have to pass it into the SHOW TABLES command because we have already selected the
database we want to talk to. The following code creates the same true result as the previous
one:
cursor.execute("USE guidb")
cursor.execute("SHOW TABLES")
Now that we know how to verify that our database has no tables, let's create some. After we have created
two tables, we will verify that they have truly made it into our database by using the same commands as
before.
We create the first table, named Books, by executing the following code:
If you remember the password you assigned to the root user during the installation, you
can then run the SHOW COLUMNS FROM books; command, as shown in the following
screenshot. This will display the columns of our books table from our guidb:
#select DB
cursor.execute("USE guidb")
# create second Table inside DB
cursor.execute("CREATE TABLE Quotations (
Quote_ID INT,
Quotation VARCHAR(250),
Books_Book_ID INT,
FOREIGN KEY (Books_Book_ID)
REFERENCES Books(Book_ID)
ON DELETE CASCADE
) ENGINE=InnoDB")
Executing the SHOW TABLES command now shows that our database has two tables:
GUI_MySQL_class.py
We can see the columns by executing the SQL command using Python:
GUI_MySQL_class.py
Using the MySQL client might present the data in a better format. We could also use Python's
pretty print (pprint) feature:
GUI_MySQL_class.py
----------------------------------------------------------------------------------------------------------------------
Using the SQL INSERT command
After creating the database and tables, we will insert data into the two tables.
import MySQLdb as mysql
import Ch07_Code.GuiDBConfig as guiConf
class MySQL():
# class variable
GUIDB = 'GuiDB'
#------------------------------------------------------
def connect(self):
# connect by unpacking dictionary credentials
conn = mysql.connector.connect(**guiConf.dbConfig)
# create cursor
cursor = conn.cursor()
return conn, cursor
#------------------------------------------------------
def close(self, cursor, conn):
# close cursor
#------------------------------------------------------
def showDBs(self):
# connect to MySQL
#------------------------------------------------------
def createGuiDB(self):
# connect to MySQL
#------------------------------------------------------
def dropGuiDB(self):
# connect to MySQL
#------------------------------------------------------
def useGuiDB(self, cursor):
'''Expects open connection.'''
# select DB
#------------------------------------------------------
def createTables(self):
# connect to MySQL
# create Table inside DB
#------------------------------------------------------ def
dropTables(self):
# connect to MySQL
#------------------------------------------------------
def showTables(self):
----------------------------------------------------------------------------------------------------------------------
Using the SQL UPDATE command
This recipe will use the code from the previous recipe, Using the SQL INSERT command, explain it in more
detail, and then extend the code to update our data. In order to update the data that we previously
inserted into our MySQL database tables, we use the SQL UPDATE command.
We might not agree with the Gang of Four, so let's change their famous programming
The Gang of Four are the four authors who created the world -famous book called Design Patterns, which
strongly influenced our entire software industry to recognize, think, and code using software design
patterns.
We will do this by updating our database of favorite quotes. First, we retrieve the primary key value by
searching for the book title and then we pass that value into our search for the quote:
#------------------------------------------------------
def updateGOF(self):
# connect to MySQL
conn, cursor = self.connect()
self.useGuiDB(cursor)
# execute command
cursor.execute("SELECT Book_ID FROM books WHERE Book_Title =
'Design Patterns'")
primKey = cursor.fetchall()[0][0]
print("Primary key=" + str(primKey))
cursor.execute("SELECT * FROM quotations WHERE Books_Book_ID =
(%s)", (primKey, ))
print(cursor.fetchall())
# close cursor and connection
self.close(cursor, conn)
#==========================================================
if __name__ == '__main__':
mySQL = MySQL() # Create class instance
mySQL.updateGOF()
quote.
o/p:
Now that we know the primary key of the quote, we can update the quote by executing the
following commands:
#------------------------------------------------------
def showDataWithReturn(self):
# connect to MySQL
conn, cursor = self.connect()
self.useGuiDB(cursor)
# execute command
cursor.execute("SELECT Book_ID FROM bo oks WHERE Book_Title =
'Design Patterns'")
primKey = cursor.fetchall()[0][0]
print(primKey)
cursor.execute("SELECT * FROM quotations WHERE Books_Book_ID =
(%s)", (primKey, ))
print(cursor.fetchall())
cursor.execute("UPDATE quotations SET Quotation =
(%s) WHERE Books_Book_ID = (%s)",
("Pythonic Duck Typing: If it walks like a duck and
talks like a duck it probably is a duck...",
primKey))
# commit transaction
conn.commit ()
cursor.execute("SELECT * FROM quotations WHERE Books_Book_ID =
(%s)", (primKey, ))
print(cursor.fetchall())
# close cursor and connection
self.close(cursor, conn)
#==========================================================
if __name__ == '__main__':
# Create class instance
mySQL = MySQL()
#------------------------
mySQL.updateGOF()
book, quote = mySQL.showDataWithReturn()
print(book, quote)
After inserting data into the books and quotations tables, if we execute a DELETE
statement, we are only deleting the book with Book_ID 1 while the related quotation
with the Books_Book_ID 1 is left behind.
This in an orphaned record. There no longer exists a book record that has a Book_ID of 1:
This situation can create a mess, which we avoid by using cascading deletes.
We do this in the creation of the tables by adding certain d atabase constraints. When we
created the table that holds the quotations in a previous recipe, we created our quotations
table with a foreign key constraint that explicitly references the primary key of the books
table, linking the two:
Because of this design, no orphan records will be left behind, which is what we want.
In MySQL, we have to specify ENGINE=InnoDB on both t he related tables
in order to use primary to foreign key relations.
Let's display the data in our database:
#==========================================================
if __name__ == '__main__': # Create class instance mySQL = MySQL() mySQL.showData()
This shows us the following data in our database tables:
Page 126 of 113
PYTHON PROGRAMMING SYIT SEM III UNIT V NOTES BY: PROF.AJAY PASHANKAR
GUI_MySQL_class.py
This shows us that we have two records that are related via primary to foreign key relationships.
When we now delete a record in the books table, we expect the related record in the quotations
table to also be deleted by a cascading delete. Let's try this by executing the following SQL
commands in Python:
import MySQLdb as mysql
import Ch07_Code.GuiDBConfig as guiConf
class MySQL():
#--------------------------------------------------- ---
def deleteRecord(self):
# connect to MySQL
conn, cursor = self.connect()
self.useGuiDB(cursor)
# execute command
cursor.execute("SELECT Book_ID FROM books WHERE Book_Title =
'Design Patterns'")
primKey = cursor.fetchall()[0][0]
# print(primKey)
cursor. execute("DELETE FROM books WHERE Book_ID = (%s)",
(primKey, ))
# commit transaction
conn.commit ()
# close cursor and connection
self.close(cursor, conn)
#==========================================================
if __name__ == '__main__':
# Create class instance
mySQL = MySQL()
#------------------------
mySQL.deleteRecord()
mySQL.showData()
database
We will use our Python GUI to insert data into our MySQL database tables. We have already
refactored the GUI we built in the previous recipes in our preparation for connecting and
using a database.
We will also use a ScrolledText widget to type our favorite book quotations into, which we will then store in
In order to make the buttons do something, we will connect them to callback functions as
we did in the previous recipes. We will display the data in the ScrolledText widget
In order to do this, we will import the MySQL.py module, as we did before. The entire code
that talks to our MySQL server instance and database resides in this module, which is a
# Adding a Button
command=self.insertQuote)
self.action.grid(column=2, row=1)
insertQuote(self):
= self.quote.get(1.0, tk.END)
print(title)
print(quote)
When we now run our code, we can insert data from our Python GUI into our MySQL
database:
GUI_MySQL.py
After entering a book title and book page plus a quotation from the book or movie, we insert the data into
our database by clicking the Insert Quote button.
Our current design allows for titles, pages, and a quotation. We can also insert our favorite quotations
from movies. While a movie does not have pages, we can use the page column to insert the approximate
time when the quotation occurred within the movie.
After inserting the data, we can verify that it made it into our two MySQL tab les by clicking
the Get Quotes button, which then displays the data we inserted into our two MySQL
Clicking the Get Quotes button invokes the callback method we associated with the button
click event. This gives us the data that we display in our ScrolledText widget:
# Adding a Button
command=self.getQuote)
self.action1.grid(column=2, row=2)
# Button callback
def getQuote(self):
allBooks = self.mySQL.showBooks()
print(allBooks)
self.quote.insert(tk.INSERT, allBooks)
We use the self.mySQL class instance variable to invoke the showBooks() method, which is a part of the
MySQL class we imported:
__init__(self):
class MySQL():
#------------------------------------------------------
def showBooks(self):
# connect to MySQL
self.useGuiDB(cursor)
# print results
allBooks = cursor.fetchall()
print(allBooks)
self.close(cursor, conn)
return allBooks