Unit 1 and 2 Notes
Unit 1 and 2 Notes
PYTHON PROGRAMMING
UNIT I
Python interpreter and interactive mode; values and types: int, float, boolean, string, and list;
variables, expressions, statements, tuple assignment, precedence of operators, comments;
modules and functions, function definition and use, flow of execution, parameters and
arguments; Illustrative programs: exchange the values of two variables, circulate the values of n
variables, distance between two points.
What is a program?
A program is a sequence of instructions that specifies how to perform a computation.
The computation might be something mathematical, such as solving a system of equations or
finding the roots of a polynomial, but it can also be a symbolic computation, such as searching
and replacing text in a document or (strangely enough) compiling a program.
There are few basic instructions appear in every programming language:
input: Get data from the keyboard, a file, or some other device.
output: Display data on the screen or send data to a file or other device.
math: Perform basic mathematical operations like addition and multiplication.
conditional execution: Check for certain conditions and execute the appropriate code.
repetition: Perform some action repeatedly, usually with some variation.
semantic error: An error in a program that makes it do something other than what the
programmer intended.
VARIABLES, EXPRESSIONS AND STATEMENTS
Values and types
A value is one of the basic things a program. There are different values integers, float and
strings. The numbers with a decimal point belong to a type called float. The values written in
quotes will be considered as string, even it’s an integer. If type of value is not known it can be
interpreted as
Eg:
>>> type('Hello, World!')
<type 'str'>
>>> type(17)
<type 'int'>
>>> type('17')
<type 'str'>
>>> type('3.2')
<type 'str'>
Variables
A variable is a name that refers to a value. A variable is a location in memory used to store some
data (value). They are given unique names to differentiate between different memory locations.
The rules for writing a variable name are same as the rules for writing identifiers in Python. The
assignment operator (=) to assign values to a variable. An assignment statement creates new
variables and gives them values:
Eg:
>>> message = 'And now for something completely different'
>>> n = 17
>>> pi = 3.1415926535897932
The type of a variable is the type of the value it refers to.
Eg:
>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>
Eg:
>>> 76trombones = 'big parade'
SyntaxError: invalid syntax
>>> more@ = 1000000
SyntaxError: invalid syntax
>>> class = 'Advanced Theoretical
Zymurgy' SyntaxError: invalid syntax
The interpreter uses keywords to recognize the structure of the program, and they cannot be used
as variable names. Python 2 has 31 keywords. In Python 3, has 33 keywords.
and del from not while
as elif global or with
assert else if pass yield
break except import print nonlocal
class exec in raise false
continue finally is return
def for lambda try
Python Identifiers
Identifier is the name given to entities like class, functions, variables etc. in Python. It
helps differentiating one entity from another.
Rules for writing identifiers
1. Identifiers can be a combination of letters in lowercase (a to z) or uppercase (A to Z) or
digits (0 to 9) or an underscore (_). Names like myClass, var_1 and print_this_to_screen,
all are valid example.
2. An identifier cannot start with a digit. 1variable is invalid, but variable1 is perfectly fine.
3. Keywords cannot be used as identifiers.
4. We cannot use special symbols like !, @, #, $, % etc. in our identifier.
5. Identifier can be of any length.
Lists
List is an ordered sequence of items. Python knows a number of compound data types,
used to group together other values. The most versatile is the list, which can be written as a list
of comma-separated values (items) between square brackets. List items need not all have the
same type.
Eg:
>>> a = [’spam’, ’eggs’, 100, 1234]
>>> a
Output: [’spam’, ’eggs’, 100, 1234]
Page 3
GE8151-Problem Solving and Python Programming Unit-I
Python Indentation
Most of the programming languages like C, C++, Java use braces { } to define a block of
code. Python uses indentation.
A code block (body of a function, loop etc.) starts with indentation and ends with the first
unindented line. The amount of indentation is up to you, but it must be consistent throughout that
block.
Generally four whitespaces are used for indentation and is preferred over tabs. Here is an
example.
Python Tuple
Tuple is an ordered sequence of items same as list.The only difference is that tuples are
immutable. Tuples once created cannot be modified.
Tuples are used to write-protect data and are usually faster than list as it cannot change
dynamically.
It is defined within parentheses () where items are separated by commas.
Eg:
>>> t = (5,'program', 1+3j)
>>> a=(5,7.9,10)
Page 4
GE8151-Problem Solving and Python Programming Unit-I
Python Strings
String is sequence of Unicode characters. We can use single quotes or double quotes to
represent strings. Multi-line strings can be denoted using triple quotes, ''' or """. Eg:
Comments
Comments indicate Information in a program that is meant for other programmers (or
anyone reading the source code) and has no effect on the execution of the program. In Python,
we use the hash (#) symbol to start writing a comment. Eg:
#This is a comment
#print out Hello
print('Hello')
print (“Statement”,variable_name)
print (‘Statement’,variable_name)
print (“Statement %formatting function”%variable_name)
After all values are printed, end is printed. It defaults into a new line.
The file is the object where the values are printed and its default value is sys.stdout (screen)
Eg:
print ('This sentence is output to the screen')
# Output: This sentence is output to the screen
a=5
Python Input
The syntax for input() is
input([prompt])
raw_input([prompt])
where prompt is the string we wish to display on the screen. It is optional.
Eg:
>>> num = input('Enter a number: ')
Page 5
GE8151-Problem Solving and Python Programming Unit-I
Enter a number: 10
>>> num
'10'
>>>a=raw_input(‘Enter a number’)
10
Modules
A module is a file containing Python definitions and statements. The file name is the
module name with the suffix .py appended. A module can contain executable statements as well
as function definitions. Each module has its own private symbol table, which is used as the
global symbol table by all functions defined in the module. Modules can import other modules.
Python Import
A module is a file containing Python definitions and statements. Python modules have a
filename and end with the extension .py.
Definitions inside a module can be imported to another module or the interactive
interpreter in Python. We use the import keyword to do this.
Python provides two ways to import modules.
Page 6
GE8151-Problem Solving and Python Programming Unit-I
Precedence Of Operators
The order of evaluation depends on the rules of precedence. The acronym PEMDAS is
a useful way to remember the rules:
Parentheses have the highest precedence
Exponentiation has the next highest precedence, so 2**1+1 is 3, not 4, and 3*1**3 is 3,
not 27.
Multiplication and Division have the same precedence, which is higher than Addition and
Subtraction, which also have the same precedence. So 2*3-1 is 5, not 4, and 6+4/2 is 8,
not 5.
Operators with the same precedence are evaluated from left to right.
Arithmetic operators
Arithmetic operators are used to perform mathematical operations like addition,
subtraction, multiplication etc.
Arithmetic operators in Python
Operator Meaning Example
+ Add two operands or unary plus x+y
- Subtract right operand from the left or unary minus x-y
* Multiply two operands x*y
/ Divide left operand by the right one (always results into float) x/y
% Modulus - remainder of the division of left operand by the right x % y (remainder of
x/y)
// Floor division - division that results into whole number adjusted x // y
to the left in the number line
** Exponent - left operand raised to the power of right x**y (x to the power y)
Example: Arithmetic operators in Python
x = 15
y=4
# Output: x + y = 19
print('x + y =',x+y)
# Output: x - y = 11
print('x - y =',x-y)
# Output: x * y = 60
print('x * y =',x*y)
# Output: x / y = 3.75
print('x / y =',x/y)
# Output: x // y = 3
print('x // y =',x//y)
# Output: x ** y = 50625
print('x ** y =',x**y)
When you run the program, the output will be:
x + y = 19
x - y = 11 x
* y = 60 x /
y = 3.75 x
// y = 3
x ** y = 50625
Comparison operators
Comparison operators are used to compare values. It either returns True or False
according to the condition.
Operator Meaning Example
> Greater that - True if left operand is greater than the right x>y
< Less that - True if left operand is less than the right x<y
== Equal to - True if both operands are equal x == y
# Output: x == y is False
print('x == y is',x==y)
# Output: x != y is True
print('x != y is',x!=y)
Logical operators
# Output: x or y is True
print('x or y is',x or y)
Output:
x and y is False
x or y is True
not x is False
Bitwise operators
Bitwise operators act on operands as if they were string of binary digits. It operates bit by
bit, hence the name.
For example, 2 is 10 in binary and 7 is 111.
In the table below: Let x = 10 (0000 1010 in binary) and y = 4 (0000 0100 in binary)
Assignment operators
Assignment operators are used in Python to assign values to variables. a = 5 is a simple
assignment operator that assigns the value 5 on the right to the variable a on the left.
Page 10
GE8151-Problem Solving and Python Programming Unit-I
There are various compound operators in Python like a += 5 that adds to the variable and
later assigns the same. It is equivalent to a = a + 5.
x = 15
y=4
x-=y
# Output: x - y =
11 print('x - y =',x)
x = 15
y=4
x*=y
# Output: x * y =
60 print('x * y =',x)
Page 11
GE8151-Problem Solving and Python Programming Unit-I
x = 15
y=4
x/=y
# Output: x / y = 3.75
print('x / y =',x)
x = 15
y=4
x//=y
# Output: x // y =
3 print('x // y =',x)
x = 15
y=4
x**=y
# Output: x ** y =
50625 print('x ** y =',x)
Special operators
Python language offers some special type of operators like the identity operator or the
membership operator.
Identity operators
is and is not are the identity operators in Python. They are used to check if two values (or
variables) are located on the same part of the memory. Two variables that are equal does not
imply that they are identical.
Identity operators in Python
Operator Meaning Example
is True if the operands are identical (refer to the same object) x is True
is not True if the operands are not identical (do not refer to the same object) x is not True
# Output: False
Page 12
GE8151-Problem Solving and Python Programming Unit-I
# Output: True
print(x2 is y2)
# Output: False
print(x3 is y3)
Output:
False
True
False
Here, we see that x1 and y1 are integers of same values, so they are equal as well as
identical. Same is the case with x2 and y2 (strings).
But x3 and y3 are list. They are equal but not identical. Since list are mutable (can be
changed), interpreter locates them separately in memory although they are equal.
Membership operators
in and not in are the membership operators in Python. They are used to test whether a
value or variable is found in a sequence (string, list, tuple, set and dictionary). In a dictionary we
can only test for presence of key, not the value.
# Output: True
print('H' in x)
# Output: True
print('hello' not in x)
# Output: True
print(1 in y)
# Output: False
Page 13
GE8151-Problem Solving and Python Programming Unit-I
print('a' in y)
Output:
True
True
True
False
Here, 'H' is in x but 'hello' is not present in x (remember, Python is case sensitive).
Similary, 1 is key and 'a' is the value in dictionary y. Hence, 'a' in y returns False.
Functions
Function Definitions
In Python each function definition is of the form
def name of function (list of formal
parameters):
body of function
Page 14
GE8151-Problem Solving and Python Programming Unit-I
Function Call
A function is a named sequence of statements that performs a computation. When you
define a function, you specify the name and the sequence of statements. Later, you can “call” the
function by name.
>>> type(32)
<type 'int'>
The name of the function is type. The expression in parentheses is called the argument
of the function. The resultis called the return value.
This statement can contain expression which gets evaluated and the value is returned. If there is
no expression in the statement or the return statement itself is not present inside a function, then
the function will return the None object.
For example:
>>> print(greet("May"))
Hello, May. Good
morning! None
Here, None is the returned value.
Types of Functions
Basically, we can divide functions into the following two types:
1. Built-in functions - Functions that are built into Python.
2. User-defined functions - Functions defined by the users themselves.
Page 15
GE8151-Problem Solving and Python Programming Unit-I
>>> int('32')
32
>>> int('Hello')
ValueError: invalid literal for int(): Hello
int can convert floating-point values to integers, but it doesn’t round off; it chops off
the fraction part:
>>> int(3.99999)
3
>>> int(-2.3)
-2
Math functions
Python has a math module that provides mathematical functions.
The module object contains the functions and variables defined in the module. To access
one of the functions, you have to specify the name of the module and the name of the function,
separated by a dot (also known as a period). This format is called dot notation.
Page 16
GE8151-Problem Solving and Python Programming Unit-I
Eg:
>>> math.sqrt(2) / 2.0
0.707106781187
Flow of execution
The order in which statements are executed, which is called the flow of execution.
Execution always begins at the first statement of the program. Statements are executed one at a
time, in order from top to bottom. Function definitions do not alter the flow of execution of the
program, but remember that statements inside the function are not executed until the function is
called.
Parameter Passing
Parameter passing is the process of passing arguments to a function. There are two types
of arguments: Actual arguments and formal arguments. Actual arguments are the values passed
to a function’s formal parameters to be operated on. Eg:
Output:
Hello Kate, Good morning!
Hello Bruce, How do you do?
Page 18
GE8151-Problem Solving and Python Programming Unit-I
Eg:
def my_func():
x = 10
print("Value inside function:",x)
x = 20
my_func()
print("Value outside function:",x)
Output:
Value inside function: 10
Value outside function: 20
Variable max is defi ned outside func1 and func2 and therefore “global” to each.
Page 19
GE8151-Problem Solving and Python Programming Unit-I
Programs
def print_border():
print ("+", "- " * 4, "+", "- " * 4, "+")
def print_row():
print ("|", " " * 8, "|", " " * 8, "|")
def block():
print_border()
print_row()
print_row()
print_row()
print_row()
block()
block()
print_border()
(OR)
list=[10,20,30,40,50]
n=2 #Shift 2 location
list[n:]+list[:n]
Output: [30,40,50,10,20]
Page 21
1
UNIT II
Conditionals: Boolean values and operators, conditional (if), alternative (if-else), chained
conditional (if-elif-else); Iteration: state, while, for, break, continue, pass; Fruitful functions:
return values, parameters, local and global scope, function composition, recursion; Strings: string
slices, immutability, string functions and methods, string module; Lists as arrays. Illustrative
programs: square root, gcd, exponentiation, sum an array of numbers, linear search, binary
search.
Modulus operator
The modulus operator works on integers and yields the remainder when the first
operand is divided by the second. In Python, the modulus operator is a percent sign (%). The
syntax is the same as for other operators:
>>> quotient = 7 / 3
>>> print quotient
2
>>> remainder = 7 % 3
>>> print remainder
1
So 7 divided by 3 is 2 with 1 left over.
The modulus operator turns out to be surprisingly useful. For example, you can check
whether one number is divisible by another—if x % y is zero, then x is divisible by y.
Also, you can extract the right-most digit or digits from a number. For example, x % 10
yields the right-most digit of x (in base 10). Similarly x % 100 yields the last two digits.
Boolean expressions
A boolean expression is an expression that is either true or false. The following
examples use the operator ==, which compares two operands and produces True if they are equal
and False otherwise:
>>> 5 == 5
True
>>> 5 == 6
False
True and False are special values that belong to the type bool; they are not strings:
>>> type(True)
<type 'bool'>
>>> type(False)
<type 'bool'>
2
Logical operators
There are three logical operators: and, or, and not. The semantics (meaning) of these
operators is similar to their meaning in English. For example, x > 0 and x < 10 is true only if x is
greater than 0 and less than 10. n%2 == 0 or n%3 == 0 is true if either of the conditions is true,
that is, if the number is divisible by 2 or 3.
Finally, the not operator negates a boolean expression, so not (x > y) is true if x > y is
false, that is, if x is less than or equal to y. The operands of the logical operators should be
boolean expressions. Any nonzero number is interpreted as “true.”
>>> 17 and True
True
Keyboard input
Python 2 provides a built-in function called raw_input that gets input from the keyboard.
In Python 3, it is called input.
>>> text = raw_input()
What are you waiting for?
>>> print text
What are you waiting for?
>>> name = raw_input('What...is your name?\n')
What...is your name?
Arthur, King of the Britons!
>>> print name
Arthur, King of the Britons!
The sequence \n at the end of the prompt represents a newline, which is a special
character that causes a line break.
>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
if <test_expression>:
<body>
Eg:
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.")
The boolean expression after if is called the condition. If it is true, then the indented
statement gets executed. If not, nothing happens.
if <test_expression>:
<body_1>
else:
<body_2>
4
Eg:
# Program checks if the number is positive or
negative num = 3
if num >= 0:
print("Positive or Zero")
else:
print("Negative number")
If the remainder when x is divided by 2 is 0, then we know that x is even, and the
program displays a message to that effect. If the condition is false, the second set of statements is
executed.
Chained conditionals
Sometimes there are more than two possibilities and we need more than two branches.
The syntax looks like this:
if <test_expression_1>:
<body1>
elif <test_expression_2>:
<body2>
elif <test_expression_3>:
<body3>
….
…..
else:
<bodyN>
5
Eg:
# In this program,
# we check if the number is positive or
# negative or zero and
# display an appropriate message
num = 3.4
if num > 0:
print("Positive number")
elif num == 0:
print("Zero")
else:
print("Negative number")
6
elif is an abbreviation of “else if.” Again, exactly one branch will be executed. There is no limit
on the number of elif statements. If there is an else clause, it has to be at the end, but there
doesn’t have to be one.
if choice == 'a':
draw_a()
elif choice == 'b':
draw_b()
elif choice == 'c':
draw_c()
Each condition is checked in order. If the first is false, the next is checked, and so on. If
one of them is true, the corresponding branch executes, and the statement ends. Even if more
than one condition is true, only the first true branch executes.
Nested conditionals
One conditional can also be nested within another. We could have written the trichotomy
example like this:
# 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
The outer conditional contains two branches. The first branch contains a simple
statement. The second branch contains another if statement, which has two branches of its own.
Those two branches are both simple statements, although they could have been conditional
statements as well.
Although the indentation of the statements makes the structure apparent, nested
conditionals become difficult to read very quickly.
Logical operators often provide a way to simplify nested conditional statements. For
example, we can rewrite the following code using a single conditional:
if 0 < x:
if x < 10:
print 'x is a positive single-digit number.'
The print statement is executed only if we make it past both conditionals, so we can get
the same effect with the and operator:
7
Recursion
Recursion is the process of calling the function that is currently executing. It is legal for
one function to call another; it is also legal for a function to call itself. An example of recursive
function to find the factorial of an integer.
Factorial of a number is the product of all the integers from 1 to that number. For
example, the factorial of 6 (denoted as 6!) is 1*2*3*4*5*6 = 720.
num = 4
print("The factorial of", num, "is", calc_factorial(num))
Output:
The factorial of 4 is 24
Iteration
The while statement
The keyword while followed by a test expression (which can be any valid expression),
and a colon. Following the header is an indented body. The test expression is evaluated. If it
8
evaluates to True, then the body of the loop is executed. After executing the body, the test
expression is evaluated again. While test expression evaluates to True, the body of the loop is
executed. When the test expression evaluates to False, the loop is terminated and execution
continues with the statement following the body.
while
<test_expression>:
<body>
Eg:
def sequence(n):
while n != 1:
print n,
if n%2 == 0: # n is even
n = n/2
else: # n is odd
n = n*3+1
The condition for this loop is n != 1, so the loop will continue until n is 1, which
makes the condition false.
Each time through the loop, the program outputs the value of n and then checks whether
9
it is even or odd. If it is even, n is divided by 2. If it is odd, the value of n is replaced with n*3+1.
For example, if the argument passed to sequence is 3, the resulting sequence is 3,10, 5, 16, 8, 4,
2, 1.
Eg:
Eg:
# Prints out the numbers
0,1,2,3,4 for x in range(5):
print(x)
This function does not store all the values in memory, it would be inefficient. So it
remembers the start, stop, step size and generates the next number on the go.
Eg:
# Prints out
0,1,2,3,4 count = 0
while True:
print(count)
count += 1 if
count >= 5:
break
11
The continue statement is used to skip the rest of the code inside a loop for the current
iteration only. Loop does not terminate but continues on with the next iteration.
The working of continue statement in for and while loop is shown below.
Eg:
# Prints out only odd numbers - 1,3,5,7,9
for x in range(10):
# Check if x is even
if x % 2 == 0:
continue
print(x)
FRUITFUL FUNCTIONS
Return values
The built-in functions we have used, such as abs, pow, and max, have produced results.
Calling each of these functions generates a value, which we usually assign to a variable or use as
part of an expression.
biggest = max(3, 7, 2, 5)
x = abs(3 - 11) + 10
But so far, none of the functions we have written has returned a value. In this chapter, we
are going to write functions that return values, which we will call fruitful functions, for want of a
better name. The first example is area, which returns the area of a circle with the given radius:
def area(radius):
temp = 3.14159 * radius**2
return temp
We have seen the return statement before, but in a fruitful function the return statement
includes a return value. This statement means: Return immediately from this function and use the
following expression as a return value. The expression provided can be arbitrarily complicated,
so we could have written this function more concisely:
def area(radius):
return 3.14159 * radius**2
On the other hand, temporary variables like temp often make debugging easier.
Sometimes it is useful to have multiple return statements, one in each branch of a conditional.
We have already seen the built-in abs, now we see how to write our own:
def absolute_value(x):
if x < 0:
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 the if
condition by the second return statement.
def absolute_value(x):
if x < 0:
return -x
return x
Think about this version and convince yourself it works the same as the first one.
13
Code that appears after a return statement, or any other place the flow of execution can
never reach, is called dead code.
In a fruitful function, it is a good idea to ensure that every possible path through the
program hits a return statement. The following version of absolute_value fails to do this:
def
absolute_value(x):
if x < 0:
return -x
elif x > 0:
return x
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:
>>> print absolute_value(0)
None
All Python functions return None whenever they do not return another value.
Eg:
def my_func():
x = 10
print("Value inside function:",x)
x = 20
my_func()
print("Value outside function:",x)
Output:
Value inside function: 10
Value outside function: 20
14
Variable max is defi ned outside func1 and func2 and therefore “global” to
each. Function Composition
As you should expect by now, you can call one function from within another. This ability
is called composition.
As an example, we’ll write a function that takes two points, the center of the circle and a
point on the perimeter, and computes the area of the circle.
Assume that the center point is stored in the variables xc and yc, and the perimeter point
is in xp and yp. The first step is to find the radius of the circle, which is the distance between the
two points. Fortunately, we’ve just written a function, distance, that does just that, so now all we
have to do is use it:
15
We called this function area2 to distinguish it from the area 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 development and debugging, but once the program is
working, we can make it more concise by composing the function calls:
def area2(xc, yc, xp, yp):
return area(distance(xc, yc, xp, yp))
STRINGS
A string is a sequence of characters. You can access the characters one at a time with the
bracket operator:
>>> fruit = 'banana'
>>> letter = fruit[1]
The second statement selects character number 1 from fruit and assigns it to letter.
The expression in brackets is called an index. The index indicates which character in the
sequence you want (hence the name).
But you might not get what you expect:
>>> print letter
a
For most people, the first letter of 'banana' is b, not a. But for computer scientists, the
index is an offset from the beginning of the string, and the offset of the first letter is zero.
>>> letter = fruit[0]
>>> print letter
b
So b is the 0th letter (“zero-eth”) of 'banana', a is the 1th letter (“one-eth”), and n is
the 2th(“two-eth”) letter.
You can use any expression, including variables and operators, as an index, but the
value of the index has to be an integer. Otherwise you get:
>>> letter = fruit[1.5]
TypeError: string indices must be integers, not float
16
len
len is a built-in function that returns the number of characters in a string:
>>> fruit = 'banana'
>>> len(fruit)
6
To get the last letter of a string, you might be tempted to try something like this:
>>> length = len(fruit)
>>> last = fruit[length]
IndexError: string index out of range
The reason for the IndexError is that there is no letter in 'banana' with the index 6. Since
we started counting at zero, the six letters are numbered 0 to 5. To get the last character, you
have to subtract 1 from length:
>>> last = fruit[length-1]
>>> print last
a
Alternatively, you can use negative indices, which count backward from the end of
the string. The expression fruit[-1] yields the last letter, fruit[-2] yields the second to last, and
so on.
String slices
A segment of a string is called a slice. Selecting a slice is similar to selecting a character:
>>> s = 'Monty Python'
>>> print s[0:5]
Monty
>>> print s[6:12]
Python
The operator [n:m] returns the part of the string from the “n-eth” character to the “m-eth”
character, including the first but excluding the last. This behavior is counterintuitive, but it
might help to imagine the indices pointing between the characters, as in Figure 8.1.
If you omit the first index (before the colon), the slice starts at the beginning of the string.
If you omit the second index, the slice goes to the end of the string:
>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'
If the first index is greater than or equal to the second the result is an empty string,
represented by two quotation marks:
>>> fruit = 'banana'
>>> fruit[3:3]
''
17
An empty string contains no characters and has length 0, but other than that, it is the
same as any other string.
This example concatenates a new first letter onto a slice of greeting. It has no effect
on the original string.
String methods
A method is similar to a function—it takes arguments and returns a value—but the syntax
is different. For example, the method upper takes a string and returns a new string with all
uppercase letters:
Instead of the function syntax upper(word), it uses the method syntax word.upper().
>>> word = 'banana'
>>> new_word =
word.upper()
>>> print new_word
BANANA
This form of dot notation specifies the name of the method, upper, and the name of
the string to apply the method to, word. The empty parentheses indicate that this method
takes no argument.
A method call is called an invocation; in this case, we would say that we are
invoking upper on the word.
As it turns out, there is a string method named find that is remarkably similar to
the function we wrote:
>>> word = 'banana'
>>> index = word.find('a')
>>> print index
1
18
In this example, we invoke find on word and pass the letter we are looking for as
a parameter.
Actually, the find method is more general than our function; it can find substrings, not
just characters:
>>> word.find('na')
2
String comparison
The relational operators work on strings. To see if two strings are equal:
if word == 'banana':
print 'All right, bananas.'
Other relational operations are useful for putting words in alphabetical order:
if word < 'banana':
print 'Your word,' + word + ', comes before
banana.' elif word > 'banana':
print 'Your word,' + word + ', comes after
banana.' else:
print 'All right, bananas.'
Python does not handle uppercase and lowercase letters the same way that people do.
All the uppercase letters come before all the lowercase letters, so:Your word, Pineapple, comes
before banana.
A common way to address this problem is to convert strings to a standard format, such as
all lowercase, before performing the comparison. Keep that in mind in case you have to defend
yourself against a man armed with a Pineapple.
19
Program
1. Python program to find the factorial of a number provided by the user.
def recur_factorial(n):
"""Function to return the factorial
of a number using recursion"""
if n == 1:
return n
else:
return n*recur_factorial(n-1)
3. Python program to find the largest number among the three input numbers
4. Python program to find the sum of natural numbers up to n where n is provided by user
if num < 0:
print("Enter a positive number")
else:
sum = 0
# use while loop to iterate un till
zero while(num > 0):
sum += num
num -= 1
print("The sum is",sum)
21
6. Program to display the Fibonacci sequence up to n-th term where n is provided by the
user
# initialize sum
sum = 0
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
Y = [[5,8,1],
[6,7,3],
[4,5,9]]
result = [[0,0,0],
[0,0,0],
[0,0,0]]
for r in result:
print(r)
# 3x3 matrix
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
[6,7,3,0],
[4,5,9,1]]
# result is 3x4
24
result = [[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
for r in result:
print(r)
X = [[12,7],
[4 ,5], [3
,8]]
result = [[0,0,0],
[0,0,0]]
for r in result:
print(r)
12. Program to sort alphabetically the words form a string provided by the user
# define a function
def computeHCF(x, y):
return hcf
num1 = 54
num2 = 24
list = [4,1,2,5,3]
#set up array
26
print(binary_search([1,2,3,5,8], 6))
print(binary_search([1,2,3,5,8], 5))