Skip to main content

Download Python Exam Paper

Download Exam Paper


Paper - Solution ✅

Question 1(a)

1. Features of Python

Python is a versatile programming language known for its simplicity and readability. Here are some key features that make Python stand out:

  1. Easy to Learn and Read

    • Simple, clear syntax
    • Uses indentation for code blocks
    • Reads almost like English
  2. Interpreted Language

    • No compilation needed
    • Code executes line by line
    • Easier debugging
  3. High-Level Language

    • No need to manage memory
    • No need to declare variable types
    • Automatic garbage collection
  4. Platform Independent

    • Write once, run anywhere
    • Works on Windows, Mac, Linux
    • No need to modify code for different platforms
  5. Free and Open Source

    • Free to download and use
    • Large community support
    • Many free libraries available

2. Comparison between C, Java, and Python

FeatureCJavaPython
SyntaxVerbose, manual memory controlStructured, class-basedMinimalist, indentation-based
Learning CurveSteep (pointers, memory management)Moderate (OOP concepts, JVM)Gentle (readable, dynamic typing)
ExecutionCompiled to machine codeCompiled to bytecode → JVMInterpreted (with .pyc caching)
Memory ManagementManual (malloc/free)Automatic (Garbage Collector)Automatic (GC + reference counting)
SpeedFastest (native execution)Moderate (JIT optimized)Slower (interpreted, dynamic)
Typing SystemStatic, weakStatic, strongDynamic, strong
Variable DeclarationExplicit (e.g., int x;)Explicit (e.g., int x = 5;)Implicit (e.g., x = 5)
Platform IndependencePlatform-specific binariesWORA (Write Once, Run Anywhere)OS-agnostic (via interpreter)
ConcurrencyThreads/processes (OS-dependent)Multithreading (JVM-managed)Limited by GIL; async/multiprocess
Error HandlingError codes (errno)Try/catch (exceptions)Try/except (exceptions)
Standard LibraryMinimal (focus on core functions)Extensive (networking, GUI, etc.)"Batteries included" (broad scope)
Use CasesOS kernels, embedded systemsEnterprise apps, AndroidScripting, AI/ML, web development
EcosystemLimited package managersMaven/Gradle (Java-centric tools)PyPI (300k+ third-party packages)

Key Takeaways:

  1. Performance vs Productivity

    • Use C for speed-critical systems (e.g., device drivers).
    • Choose Java for cross-platform enterprise applications.
    • Opt for Python for rapid prototyping and data-centric tasks.
  2. Memory & Safety

    • C offers control but risks segmentation faults.
    • Java/Python prevent memory leaks via GC but add overhead.
  3. Concurrency Models

    • Java’s threads suit I/O-bound tasks.
    • Python’s asyncio/multiprocessing bypass GIL limitations.
  4. Typing Trade-offs

    • Static typing (C/Java) catches errors early.
    • Dynamic typing (Python) speeds up development.
  5. Community & Tools

    • Python leads in AI/ML libraries (TensorFlow, PyTorch).
    • Java dominates Android and banking systems.
    • C remains foundational for low-level programming.

### 3. Tuple with Example

A tuple is an ordered, immutable sequence of elements in Python. It is similar to a list but cannot be changed once created.

**Key Features:**
- Created using parentheses ()
- Cannot be modified after creation
- Can contain different data types
- Allows duplicate elements

**Example:**
```python
# Creating a tuple
my_tuple = (1, "Hello", 3.14, True)

# Accessing elements
print(my_tuple[0]) # Output: 1
print(my_tuple[1]) # Output: "Hello"

# Trying to modify (will raise error)
# my_tuple[0] = 2 # This will raise TypeError

# Tuple operations
print(len(my_tuple)) # Output: 4
print(my_tuple.count("Hello")) # Output: 1
print(my_tuple.index(3.14)) # Output: 2

Question 1(b)

1. Operators in Python

Operators are special symbols that perform operations on variables and values.

1. Arithmetic Operators:

# Examples of arithmetic operators
a = 10
b = 3

print(a + b) # Addition: 13
print(a - b) # Subtraction: 7
print(a * b) # Multiplication: 30
print(a / b) # Division: 3.333...
print(a % b) # Modulus: 1
print(a ** b) # Exponentiation: 1000

2. Comparison Operators:

# Examples of comparison operators
x = 5
y = 10

print(x == y) # Equal to: False
print(x != y) # Not equal to: True
print(x > y) # Greater than: False
print(x < y) # Less than: True
print(x >= y) # Greater than or equal to: False
print(x <= y) # Less than or equal to: True

2. Data Types in Python

Python has several built-in data types:

  1. Numeric Types

    • int (integers): 5, -17, 1000
    • float (decimal numbers): 3.14, -0.001, 2.0
    • complex (complex numbers): 2+3j
  2. Sequence Types

    • str (string): "Hello", 'Python'
    • list: [1, 2, 3, "hello"]
    • tuple: (1, 2, 3, "world")
  3. Boolean Type

    • bool: True, False
  4. Mapping Type

    • dict (dictionary): {"name": "John", "age": 30}
  5. Set Types

    • set: 3
    • frozenset: frozenset(3)

Example:

# Examples of different data types
integer_num = 5
float_num = 3.14
text = "Hello Python"
my_list = [1, 2, 3]
my_dict = {"name": "John", "age": 25}
is_true = True

3. Python Virtual Machine (PVM)

The Python Virtual Machine (PVM) is the runtime engine of Python. Here's how it works:

  1. Definition

    • It's the component that executes Python programs
    • Acts as an abstraction layer between Python code and computer hardware
  2. Working Process

    • Python source code (.py) is compiled to bytecode (.pyc)
    • Bytecode is executed by the PVM
    • PVM provides platform independence
  3. Key Features

    • Handles memory management
    • Manages garbage collection
    • Provides security features
    • Ensures platform independence
  4. Benefits

    • Makes Python platform-independent
    • Handles low-level operations automatically
    • Provides memory management
    • Simplifies development process

Question 2(a)

1. Difference between break and continue statements

break statement:

  • Terminates the entire loop immediately
  • Control flows to the statement after the loop
  • Used to exit a loop when a certain condition is met

continue statement:

  • Skips the rest of the current iteration
  • Control flows to the next iteration of the loop
  • Used to skip specific iterations based on a condition

Example showing both:

# Break example
for i in range(5):
if i == 3:
break # Loop stops when i is 3
print(i) # Output: 0, 1, 2

# Continue example
for i in range(5):
if i == 3:
continue # Skips printing when i is 3
print(i) # Output: 0, 1, 2, 4

2. Advantages of Array

  1. Efficient Memory Usage

    • Stores elements in contiguous memory locations
    • Fixed size helps in memory management
  2. Fast Access

    • Direct access to elements using index
    • Constant time O(1) for accessing elements
  3. Easy Iteration

    • Simple to traverse using loops
    • Supports various iteration methods
  4. Better Performance

    • Optimized for numerical operations
    • Efficient for mathematical computations

3. Python Lambda with Example

Lambda is a way to create small anonymous functions in Python. It's also known as a lambda function or anonymous function.

Syntax:

lambda arguments: expression

Examples:

# Simple lambda function
square = lambda x: x**2
print(square(5)) # Output: 25

# Lambda with multiple arguments
sum = lambda a, b: a + b
print(sum(3, 4)) # Output: 7

# Lambda with filter()
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Output: [2, 4, 6]

# Lambda with map()
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared) # Output: [1, 4, 9, 16]

Question 2(b)

1. Slicing an Array with Example

Array slicing in Python allows you to extract a portion of an array using the syntax array[start:end:step].

import numpy as np

# Create a sample array
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# Basic slicing
print(arr[2:5]) # Output: [2, 3, 4]
print(arr[:4]) # Output: [0, 1, 2, 3]
print(arr[6:]) # Output: [6, 7, 8, 9]

# Slicing with step
print(arr[1:8:2]) # Output: [1, 3, 5, 7]

# Negative indices
print(arr[-5:-2]) # Output: [5, 6, 7]

# Reverse array
print(arr[::-1]) # Output: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

2. Function and Pass by Object Reference

Function Definition:

  • A function is a reusable block of code that performs a specific task
  • It helps in organizing code and promoting reusability
  • Functions in Python are defined using the def keyword

Pass by Object Reference:

  • Python uses pass by object reference for function arguments
  • The reference to the object is passed to the function
  • Mutable objects can be modified within the function
  • Immutable objects cannot be modified within the function

Example:

# Example with mutable object (list)
def modify_list(lst):
lst.append(4) # Modifies the original list
print("Inside function:", lst)

my_list = [1, 2, 3]
modify_list(my_list)
print("Outside function:", my_list)
# Output:
# Inside function: [1, 2, 3, 4]
# Outside function: [1, 2, 3, 4]

# Example with immutable object (integer)
def modify_number(num):
num += 1 # Creates a new object
print("Inside function:", num)

x = 5
modify_number(x)
print("Outside function:", x)
# Output:
# Inside function: 6
# Outside function: 5

3. Loop Control Statements

Python provides several statements to control the flow of loops:

  1. break statement
    • Terminates the loop completely
    • Used to exit a loop when a condition is met
for i in range(5):
if i == 3:
break
print(i) # Output: 0, 1, 2
  1. continue statement
    • Skips the rest of the current iteration
    • Continues with the next iteration
for i in range(5):
if i == 3:
continue
print(i) # Output: 0, 1, 2, 4
  1. pass statement
    • Does nothing
    • Used as a placeholder
for i in range(5):
if i == 3:
pass # Do nothing
print(i) # Output: 0, 1, 2, 3, 4
  1. else clause in loops
    • Executes when loop completes normally
    • Skipped if loop is terminated by break
for i in range(3):
print(i)
else:
print("Loop completed")
# Output:
# 0
# 1
# 2
# Loop completed


## Question 3(a)

### 1. \_\_init\_\_() Function

The \_\_init\_\_() function is like a welcome setup for new objects in Python classes. Think of it as the setup instructions that run automatically when you create something new from your class.

**Simple Example:**
```python
class Student:
def __init__(self, name, age):
self.name = name # Save the student's name
self.age = age # Save the student's age

# Creating a new student
student1 = Student("John", 20)
print(student1.name) # Output: John
print(student1.age) # Output: 20

In this example:

  • __init__ runs automatically when we create a new student
  • It's like filling out a form with the student's details
  • self means "this particular student"
  • The values we pass (name, age) are stored for later use

2. Looping Using List Comprehension

List comprehension is a shorter and easier way to create lists in Python. It's like writing a loop in a single line!

Basic Format:

new_list = [expression for item in list]

Simple Examples:

# Example 1: Making a list of squares
numbers = [1, 2, 3, 4, 5]
squares = [num * num for num in numbers]
print(squares) # Output: [1, 4, 9, 16, 25]

# Example 2: Making a list of even numbers
evens = [num for num in range(10) if num % 2 == 0]
print(evens) # Output: [0, 2, 4, 6, 8]

# Example 3: Converting temperatures
celsius = [0, 10, 20, 30]
fahrenheit = [c * 9/5 + 32 for c in celsius]
print(fahrenheit) # Output: [32.0, 50.0, 68.0, 86.0]

3. Polymorphism

Polymorphism means "many forms" - it's when you can use the same function name for different types of objects, and each object responds in its own way.

Simple Example:

# Different animals make different sounds
class Dog:
def speak(self):
return "Woof!"

class Cat:
def speak(self):
return "Meow!"

# Creating animals
dog = Dog()
cat = Cat()

# Same function name, different results
print(dog.speak()) # Output: Woof!
print(cat.speak()) # Output: Meow!

# We can use them in the same way
animals = [dog, cat]
for animal in animals:
print(animal.speak()) # Each animal makes its own sound

Question 3(b)

1. Inheritance with Example

Inheritance is like passing down features from parents to children. In Python, a class can inherit (receive) properties and methods from another class.

Simple Example:

# Parent class
class Animal:
def __init__(self, name):
self.name = name

def speak(self):
return "Some sound"

# Child class inheriting from Animal
class Dog(Animal):
def speak(self):
return "Woof!"

# Another child class
class Cat(Animal):
def speak(self):
return "Meow!"

# Using the classes
dog = Dog("Buddy")
cat = Cat("Whiskers")

print(f"{dog.name} says: {dog.speak()}") # Output: Buddy says: Woof!
print(f"{cat.name} says: {cat.speak()}") # Output: Whiskers says: Meow!

In this example:

  • Animal is the parent class (base class)
  • Dog and Cat are child classes (derived classes)
  • They inherit the name property from Animal
  • Each child class has its own version of speak()

2. Files in Python

A file is a place where you can save data on your computer. Python makes it easy to work with files!

1. Creating and Writing to a File:

# Writing to a file
with open("my_file.txt", "w") as file:
file.write("Hello, this is line 1\n")
file.write("This is line 2\n")

# Adding more content (append mode)
with open("my_file.txt", "a") as file:
file.write("This is line 3\n")

2. Reading from a File:

# Reading entire file
with open("my_file.txt", "r") as file:
content = file.read()
print(content)

# Reading line by line
with open("my_file.txt", "r") as file:
for line in file:
print(line.strip()) # strip() removes extra newlines

3. Common File Operations:

# Different ways to read
with open("my_file.txt", "r") as file:
# Read all lines into a list
lines = file.readlines()
print(lines)

# Read first line
first_line = file.readline()
print(first_line)

3. Creating and Accessing Tuple Elements

Tuples are like lists, but you can't change them after creating them (they're immutable).

1. Creating Tuples:

# Different ways to create tuples
empty_tuple = ()
single_item = (1,) # Don't forget the comma!
numbers = (1, 2, 3, 4, 5)
mixed = (1, "hello", 3.14, True)

# Creating tuple without parentheses
also_tuple = 1, 2, 3, 4, 5

2. Accessing Tuple Elements:

fruits = ("apple", "banana", "orange", "grape", "mango")

# Using index (starts from 0)
print(fruits[0]) # Output: apple
print(fruits[1]) # Output: banana
print(fruits[-1]) # Output: mango (last item)

# Slicing tuples
print(fruits[1:3]) # Output: ('banana', 'orange')
print(fruits[:3]) # Output: ('apple', 'banana', 'orange')
print(fruits[2:]) # Output: ('orange', 'grape', 'mango')

# Tuple operations
print(len(fruits)) # Output: 5 (number of items)
print("apple" in fruits) # Output: True (checking if item exists)

3. Tuple Methods:

numbers = (1, 2, 3, 2, 4, 2, 5)

# count() - count occurrences
print(numbers.count(2)) # Output: 3 (2 appears three times)

# index() - find position
print(numbers.index(4)) # Output: 4 (position of 4)

# Converting to and from lists
my_tuple = (1, 2, 3)
my_list = list(my_tuple) # Tuple to list
back_to_tuple = tuple(my_list) # List to tuple

Remember:

  • Tuples are immutable (can't be changed after creation)
  • Use parentheses () to create tuples
  • Tuples are faster than lists
  • Use tuples for data that shouldn't change

Question 4(a)

1. How to Insert Data into MySQL

There are two main ways to insert data into MySQL using Python:

1. Using SQL INSERT Statement:

import mysql.connector

# Connect to database
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="school"
)

cursor = db.cursor()

# Simple INSERT
sql = "INSERT INTO students (name, age) VALUES (%s, %s)"
values = ("John", 20)
cursor.execute(sql, values)

# Insert multiple records
sql = "INSERT INTO students (name, age) VALUES (%s, %s)"
values = [
("Alice", 22),
("Bob", 21),
("Charlie", 23)
]
cursor.executemany(sql, values)

# Save changes
db.commit()

print("Data inserted successfully!")

2. What is MySQL?

MySQL is a popular database system that helps you store and manage data. Think of it like a super-organized digital filing cabinet!

Key Features:

  1. Free and Open Source

    • Anyone can use it without paying
    • Large community support
  2. Easy to Use

    • Simple commands to work with data
    • Works well with many programming languages
  3. Reliable and Secure

    • Keeps data safe
    • Password protection
    • Regular updates
  4. Widely Used

    • Used by many websites
    • Popular with Python applications
    • Good for both small and large projects

3. How to Update Data in MySQL Table

Updating data means changing existing information in your database. Here's how to do it:

import mysql.connector

# Connect to database
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="school"
)

cursor = db.cursor()

# Update single record
sql = "UPDATE students SET age = %s WHERE name = %s"
values = (23, "John")
cursor.execute(sql, values)

# Update multiple records
sql = "UPDATE students SET grade = 'A' WHERE marks >= 90"
cursor.execute(sql)

# Save changes
db.commit()

print("Data updated successfully!")

Question 4(b)

1. Exception and Exception Handling

An exception is an error that happens while your program is running. Exception handling is how we deal with these errors gracefully.

Basic Structure:

try:
# Code that might cause an error
result = 10 / 0 # This will cause an error!
except:
# What to do if an error happens
print("Oops! Something went wrong!")

Better Example with Multiple Exceptions:

try:
# Risky code
number = int(input("Enter a number: "))
result = 100 / number
print(f"Result is: {result}")

except ValueError:
# If user enters text instead of number
print("Please enter a valid number!")

except ZeroDivisionError:
# If user enters zero
print("Cannot divide by zero!")

except:
# For any other errors
print("Something else went wrong!")

else:
# If no error occurred
print("Everything worked fine!")

finally:
# This runs no matter what
print("All done!")

2. Command Line Arguments

Command line arguments are values we can pass to our Python program when we start it. They're like giving instructions to your program before it runs.

Using sys.argv:

import sys

# sys.argv[0] is the program name
# sys.argv[1] onwards are the arguments

print("Program name:", sys.argv[0])
print("Arguments:", sys.argv[1:])

Example Program:

import sys

def main():
# Check if arguments were provided
if len(sys.argv) < 2:
print("Please provide your name!")
return

# Get the name from argument
name = sys.argv[1]
print(f"Hello, {name}!")

# If age is provided
if len(sys.argv) > 2:
age = sys.argv[2]
print(f"You are {age} years old!")

# Run program
if __name__ == "__main__":
main()

To run this program:

python program.py John 25
# Output:
# Hello, John!
# You are 25 years old!

3. Types of Exceptions in Python

Python has many built-in exceptions. Here are the most common ones with examples:

  1. SyntaxError
    • When your code is written incorrectly
# Wrong syntax
if True print("Hello") # Missing colon

# Correct syntax
if True: print("Hello")
  1. TypeError
    • When you use wrong type of data
# Error: can't add string and number
result = "hello" + 5

# Correct way
result = "hello" + str(5)
  1. ValueError
    • When you use right type but wrong value
# Error: can't convert "hello" to integer
number = int("hello")

# Correct way
number = int("123")
  1. ZeroDivisionError
    • When you try to divide by zero
# Error: division by zero
result = 10 / 0

# Better way
denominator = 0
if denominator != 0:
result = 10 / denominator
else:
print("Can't divide by zero!")
  1. FileNotFoundError
    • When trying to access a file that doesn't exist
# Error: file doesn't exist
file = open("missing.txt", "r")

# Better way
try:
file = open("missing.txt", "r")
except FileNotFoundError:
print("File not found!")
  1. IndexError
    • When trying to access a list index that doesn't exist
# Error: list index out of range
my_list = [1, 2, 3]
print(my_list[5])

# Better way
my_list = [1, 2, 3]
if len(my_list) > 5:
print(my_list[5])
else:
print("Index doesn't exist!")

Remember:

  • Always try to anticipate possible errors
  • Use specific exception types when possible
  • Include helpful error messages
  • Clean up resources in finally blocks when needed