PWP Assignment 1
PWP Assignment 1
Q. List data types used in Python. Explain any two with example.
Ans: Data types in Python programming includes:
● Numbers: Represents numeric data to perform mathematical operations.
● String: Represents text characters, special symbols or alphanumeric data.
● List: Represents sequential data that the programmer wishes to sort, merge etc.
● Tuple: Represents sequential data with a little difference from list.
● Dictionary: Represents a collection of data that associate a unique key with each value.
● Boolean: Represents truth values (true or false).
1. Integers (int Data Type): An integer is a whole number that can be positive (+) or negative (−).
Integers can be of any length, it is only limited by the memory available.
Example:
>>>a = 18 > 5
>>>print(a)
True
>>>b = 2 > 3
>>>print(b)
False
Tokens: Tokens in python are building blocks of the Python programming language. The role letters
and words play for the English language, Similar to role token play for a python programming
language.
Tokens Example
Keywords: Words that are already defined False, True, if, elif, else, for, while, pass,
and convey a special meaning to the continue, lambda, return, finally, import, def
language compiler/interpreter
Identifiers: names given to different parts of def square, num = 20, a_lst=[1,2,3]
program like variables, functions,object, here square, num and a_lst are identifiers.
class, names given to different datatypes.
1. Integers (int Data Type): An integer is a whole number that can be positive (+) or negative (−).
Integers can be of any length, it is only limited by the memory available.
2. Boolean (Bool Data Type): The simplest build-in type in Python is the bool type, it represents the
truth values False and True. Internally the true value is represented as 1 and false is 0.
Example:
>>>a = 18 > 5
>>>print(a)
True
>>>b = 2 > 3
>>>print(b)
False
4. Complex Numbers (Complex Data Type): Complex numbers are written in the form, x +
yj, where x is the real part and y is the imaginary part.
Example:
Complex number.
>>>x = 3+4j
>>>print(x.real)
3.0
>>>print(x.imag)
4.0
5. String Data Type: String is a collection of group of characters. Strings are identified as a
contiguous set of characters enclosed in single quotes (' ') or double quotes (" "). Any letter, a
number or a symbol could be a part of the string. Strings are unchangeable (immutable).
Once a string is created, it cannot be modified.
7. Tuple Data Type: Tuple is an ordered sequence of items same as list. The only difference
is that tuples are immutable. Tuples once created cannot be modified. It is defined within
parentheses ( ) where items are separated by commas ( , ). A tuple data type in python
programming is similar to a list data type, which also contains heterogeneous items/elements.
UNIT 2
For example, a = 5 is a simple assignment operator that assigns the value 5 on the right to
the variable a on the left.
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.
Following table shows assignment operators in Python programming:
Syntax-1: Syntax-2:
if condition: if condition:
Statement(s) if_Block
else: else:
Statement(s) else_Block
Example:
i = 20
if i < 15:
print("less than 15")
else:
print("greater than 15")
Output:
greater than 15
Conceptual Diagram:
if-elif-else (ladder) statements: Here, a user can decide among multiple options. The if
statements are executed from the top down. As soon as one of the conditions controlling the
if is true, the statement associated with that if is executed, and the rest of the ladder is
bypassed. If none of the conditions is true, then the final else statement will be executed.
Syntax:
if (condition-1):
statement
elif (condition-2):
statements
.
.
elif(condition-n):
statements
else:
statements
Example:
i = 20
if i == 10:
print("i is 10")
elif i == 15:
print("i is 15")
elif i == 20:
print("i is 20")
else:
print("i is not present")
Output:
i is 20
Concept Diagram:
Operator Meaning
== Equal to
!= Not Equal to
< Less than
Output:
i is 20
i=0
while i < 10:
i += 1
if i == 5:
continue
print("i =", i)
Output:
i=1
i=2
i=3
i=4
i=6
i=7
i=8
i=9
i=10
Q. Write a Python program to find the factorial of a number provided by the user.
Ans:
num = int(input("Enter Number: "))
fact = 1
if num < 0:
print("Sorry, factorial does not exist for negative numbers")
elif num == 0:
print("The factorial of 0 is 1")
else:
for i in range(1, num + 1):
fact *= i
print("The factorial of", num, "is", fact)
Output:
Enter Number: 5
The factorial of 5 is 120
Example:
a = 5 # binary: 0101
b = 3 # binary: 0011
result = a & b # binary result: 0001 (decimal 1)
Example:
a = 5 # binary: 0101
b = 3 # binary: 0011
result = a | b # binary result: 0111 (decimal 7)
3. Bitwise XOR (^): Performs a bitwise XOR (exclusive OR) operation on each pair of
corresponding bits. It returns 1 if the bits are different, otherwise 0.
Example:
a = 5 # binary: 0101
b = 3 # binary: 0011
result = a ^ b # binary result: 0110 (decimal 6)
4. Bitwise NOT (~): Performs a bitwise NOT operation, which inverts all the bits. It
turns 0s into 1s and vice versa.
Example:
a = 5 # binary: 0101
result = ~a # binary result: 1010 (decimal -6 due to two's complement
representation)
5. Left Shift (<<): Shifts the bits of the left operand to the left by the number of
positions specified by the right operand.
Example:
a = 5 # binary: 0101
result = a << 2 # binary result: 10100 (decimal 20)
6. Right Shift (>>): Shifts the bits of the left operand to the right by the number of
positions specified by the right operand. Depending on the number's sign, it fills the
vacant positions with 0s (logical right shift) or the most significant bit (arithmetic
right shift).
Example:
a = 16 # binary: 10000
result = a >> 2 # binary result: 00100 (decimal 4)
UNIT 3
List Tuple
ii) Lists consume more memory ii) Tuple consume less memory as compared
to the list
iii) Lists have several built-in methods iii) Tuple does not have many built-in
methods.
iv) The unexpected changes and errors are iv) In tuple, it is hard to take place.
more likely to occur.
v) The List has the variable length. v) The tuple has a fixed length.
vi) List operations are more error prone. vi) Tuples operations are safe.
vii) Lists can be used to store homogeneous vii) Tuples are used to store only
and heterogeneous elements. heterogeneous elements.
viii) List is useful for insertion and deletion viii) Tuple is useful for readonly operations
operations. like accessing elements.
ix) List iteration is slower and is time ix) Tuple iteration is faster.
consuming.
● Example:
my_tuple = (1, 2, 2, 3, 4, 2)
count = my_tuple.count(2)
print(count) # Output: 3 (2 appears three times)
2. index():
● The index() method returns the index of the first occurrence of a specified element in
the tuple.
● Example:
my_tuple = (1, 2, 3, 4, 5)
index = my_tuple.index(3)
print(index) # Output: 2 (3 is at index 2)
3. len():
● The len() function returns the number of elements in the tuple.
● Example:
my_tuple = (1, 2, 3, 4, 5)
length = len(my_tuple)
print(length) # Output: 5 (there are 5 elements in the tuple)
4. max():
● The max() function returns the maximum value from a tuple of numbers or the
maximum element based on the default or a specified key function.
● Example:
num_tuple = (10, 20, 5, 30)
max_value = max(num_tuple)
print(max_value) # Output: 30 (maximum value in the tuple)
5. min():
● The min() function returns the minimum value from a tuple of numbers or the
minimum element based on the default or a specified key function.
● Example:
num_tuple = (10, 20, 5, 30)
min_value = min(num_tuple)
print(min_value) # Output: 5 (minimum value in the tuple)
6. sorted():
● The sorted() function returns a new sorted list from the elements of the tuple. Tuples
themselves are immutable, so a new list is created with the sorted order.
● Example:
my_tuple = (3, 1, 2, 4)
sorted_list = sorted(my_tuple)
print(sorted_list) # Output: [1, 2, 3, 4]
● Example:
bool_tuple = (True, False, True)
any_true = any(bool_tuple) # Returns True if any element is True
all_true = all(bool_tuple) # Returns False if any element is False
1. List Index: We can use the index operator [] to access an item in a list. Index starts from 0.
So, a list having 5 elements will have index from 0 to 4.
2. Negative Indexing: Python allows negative indexing for its sequences. The index of -1
refers to the last item, −2 to the second last item and so on.
3. List Slicing: Slicing is an operation that allows us to extract elements from units. The
slicing feature used by Python to obtain a specific subset or element of the data structure
using the colon (:) operator. The slicing operator returns a subset of a list called slice by
specifying two indices, i.e. start and end.
Syntax: list_variable[start_index:end_index]
This will return the subset of the list starting from start_index to one index less than that of
the ending
Example: For slicing list.
>>> l1=([10,20,30,40,50])
>>> l1[1:4]
[20, 30, 40]
>>>l1[2:5]
[30,40,50]
Q. Write a program to create a dictionary of students that includes their ROLL NO. and
NAME.
i) Add three students in above dictionary
ii) Update name = ‘Shreyas’ of ROLL NO = 2
iii) Delete information of ROLL NO = 1
Ans:
1)
>>> dict1={1:"Vijay",2:"Santosh",3:"Yogita"}
>>>print(dict1)
{1: 'Vijay', 2: 'Santosh', 3: 'Yogita'}
ii)
>>>dict1[2]="Shreyas"
>>>print(dict1)
{1: 'Vijay', 2: 'Shreyas', 3: 'Yogita'}
iii)
>>>dict1.pop(1)
‘Vijay'
>>>print(dict1)
{2: 'Shreyas', 3: 'Yogita'}
>>> b=["Hello","Good"]
>>> b.append("python")
>>>print(b)
Output: ['Hello', 'Good', 'python']
>>>t1=[3,5,6,7]
>>>print(t1[2])
>>>print(t1[-1])
>>>print(t1[2:])
>>>print(t1[:])
Output:
6
7
[6, 7]
[3, 5, 6, 7]
UNIT 4
Q. Explain Local and Global variable.
Ans:
Local Variables: Local variables are those which are initialized inside a function and belongs
only to that particular function. It cannot be accessed anywhere outside the function.
Example:
def f():
# local variable
s = "I love Python Programming"
print(s)
# Driver code
f()
Output:
I love Python Programming
Global Variables: The global variables are those which are defined outside any function and
which are accessible throughout the program i.e. inside and outside of every function.
Example:
# This function uses global variable s
def f():
print("Inside Function", s)
# Global scope
s = "I love Python Programming"
f()
print("Outside Function", s)
Output:
Inside Function I love Python Programming
Outside Function I love Python Programming
Example:
# Define a user-defined function
def greet(name):
"""This function greets the person passed in as a parameter."""
print(f"Hello, {name}!")
Parameterized function: The function may take arguments(s) also called parameters as
input within the opening and closing parentheses, just after the function name followed by a
colon.
Syntax:
def function_name(argument1, argument2, ...):
statements
.
.
Example:
def square( x ):
print("Square=",x*x)
# Driver code
square(2)
Output:
Square= 4
Q. Write a program for importing module for addition and subtraction of two numbers.
Ans:
#math_operations.py
def add(a, b):
return a + b
# Perform subtraction
result = math_operations.subtract(10, 5)
print(result) # Output: 5
Syntax
string.format(value1, value2...)
Example:
# named indexes:
>>>txt1 = ("My name is {fname}, I'm {age}".format(fname = "abc", age = 36))
>>>print(txt1)
My name is abc, I'm 36
# numbered indexes:
>>>txt2 =( "My name is {0}, I'm {1}".format("xyz",36))
>>>print(txt2)
My name is xyz, I'm 36
# empty placeholders:
>>>txt3 = ("My name is {}, I'm {}".format("pqr",36))
>>>print(txt3)
My name is pqr, I'm 36
If the pkg directory resides in a location where it can be found, you can refer to the two modules with
dot notation(pkg.mod1, pkg.mod2) and import them with the
Syntax:
Syntax-1
import <module_name>[, <module_name> ...]
Example:
>>>import pkg.mod1, pkg.mod2
>>> pkg.mod1.m1()
first module
Syntax-2:
from <module_name> import <name(s)>
Example:
>>> from pkg.mod1 import m1
>>> m1()
First module
>>>
Syntax-3:
from <module_name> import <name> as <alt_name>
Example:
>>> from pkg.mod1 import m1 as module
>>> module()
first module
You can import modules with these statements as well:
from <package_name> import <modules_name>[,
<module_name> ...]
from <package_name> import <module_name> as <alt_name>
Example:
>>> from pkg import mod1
>>> mod1.m1()
First module
Execute Following command to install numpy in window, Linux and MAC OS:
python -m pip install numpy
Example:
import numpy as np
UNIT 5
Q. Write a program to create class EMPLOYEE with ID and NAME and display its
contents.
Ans:
class Employee:
name = ""
department = ""
salary = 0
def accept(self):
self.name = input("Enter employee name: ")
self.department = input("Enter employee department: ")
self.salary = float(input("Enter employee salary: "))
def display(self):
print("Employee Name:", self.name)
print("Department:", self.department)
print("Salary:", self.salary)
emp = Employee()
emp.accept()
print("\nEmployee Information:")
emp.display()
TypeError: area() takes exactly 1 argument (2 given) Python does not support method
overloading, that is, it is not possible to define more than one method with the same name in
a class in Python.
This is because method arguments in python do not have a type. A method accepting one
argument can be called with an integer value, a string or a double as shown in next example.
class Demo:
def method(self, a):
print(a)
obj= Demo()
obj.method(50)
obj.method('Meenakshi')
obj.method(100.2)
Output:
50
Meenakshi
100.2
Same method works for three different data types. Thus, we cannot define two methods with
the same name and same number of arguments but having different type as shown in the
above example. They will be treated as the same method.
It is clear that method overloading is not supported in python but that does not mean that we
cannot call a method with a different number of arguments. There are a couple of alternatives
available in python that make it possible to call the same method but with different number of
arguments.
Syntax:
class A:
# properties of class A
class B(A):
# class B inheriting property of class A
# more properties of class B
Output:
Name= Maruti
Price=$ 2000
Output:
Name= Maruti
Price=$ 2000
Name= BMW
Price=$ 5000
UNIT 6
Q. Write a program to open a file in write mode and append some content at the end of
file.
Ans:
file1 = open("myfile.txt", "w")
L = ["This is Delhi \n", "This is Paris \n", "This is London"]
file1.writelines(L)
file1.close()
# Append-adds at last
# append mode
file1 = open("myfile.txt", "a")
Output:
Output of Readlines after appending
This is Delhi
This is Paris
This is London
TodayTomorrow
1. try Block: A set of statements that may cause error during runtime are to be written in
the try block.
2. except Block: It is written to display the execution details to the user when a certain
exception occurs in the program. The except block is executed only when a certain
type of exception occurs in the execution of statements written in the try block.
3. finally Block: This is the last block written while writing an exception handler in the
program which indicates the set of statements that many use to clean up resources
used by the program.
Syntax:
try:
Do the operations here
……………..
except Exception1:
If there is Exception1, then execute this block.
except Exception2:
If there is Exception2, then execute this block.
else:
If there is no exception then execute this block.
Example:
try:
# Code that might raise an exception
num1 = int(input("Enter a number: "))
num2 = int(input("Enter another number: "))
result = num1 / num2
print("Result:", result)
except ZeroDivisionError:
print("Division by zero is not allowed!")
except ValueError:
print("Invalid input. Please enter valid numbers.")
except Exception as e:
print("An error occurred:", e)
else:
print("No exceptions occurred. Goodbye!")
finally:
print("Finally block executed.")