Python coding
53 subscribers
24 files
11 links
​A technical hub dedicated to Python programming, web development, and software engineering. Learn core syntax, build full-stack projects, and master backend development.
Download Telegram
Python coding
Basic_Python_Intro_Notes.pdf
Introduction to Programming with Python

---

What is Python?

Python is a popular programming language created by Guido van Rossum in 1991.

It is known for:
- Simplicity
- Readability
- Flexibility
- Powerful libraries

Python is beginner-friendly while still being powerful enough for AI, web development, and automation.

---

What is Python Used For?

- Web Development
- Software Development
- Data Science & Mathematics
- Automation & System Scripting

Python works on multiple platforms:
- Windows
- Linux
- Mac
- Raspberry Pi

---

Important Concept: Indentation

Unlike many programming languages that use { }, Python uses indentation (spaces) to define code blocks.

Example:

if 5 > 2:
print("Five is greater than two")

Proper indentation is required in Python.

---

Your First Python Program

print("Hello World")

This prints text to the screen.

---

Reading User Input

Use the input() function to get data from users.

name = input("Please enter your name: ")

print(f"Hi {name}, nice to meet you!")

---

Variables in Python

Variables are containers used to store data.

x = 5
y = "John"

Python automatically detects the data type.

---

Casting

Casting is used to force a variable into a specific data type.

str(3)      # '3'
int(3.8) # 3
float(3) # 3.0

---

Variable Naming Rules

- Must start with a letter or underscore _
- Cannot start with a number
- Can contain letters, numbers, and underscores
- Case-sensitive (age, Age, and AGE are different)
- Cannot use Python keywords like:
- if
- while
- print

---

Naming Conventions

Camel Case:

myVariableName

Pascal Case:

MyVariableName

Snake Case (Recommended in Python):

my_variable_name

---

Built-in Data Types

Python includes several built-in data types:

- Text → str
- Numeric → int, float, complex
- Sequence → list, tuple, range
- Mapping → dict
- Boolean → bool

Check a variable type using type():

print(type(5))

Output:

<class 'int'>

---

Comments in Python

Comments make code easier to understand.

Single-line comment:

# This is a comment

Multi-line comment:

"""
This is a multi-line comment
"""
Python coding
Basic_Python_Control_Structures.pdf
Control Structures and Loops in Python

---

Conditional Statements

Conditional statements allow programs to make decisions based on conditions.

They help control the flow of a program by executing different code depending on whether a condition is True or False.

---

Comparison Operators

| Operator | Meaning |
|----------|----------|
| == | Equal to |
| != | Not equal to |
| < | Less than |
| <= | Less than or equal to |
| > | Greater than |
| >= | Greater than or equal to |

---

If, Elif, and Else

- if → checks the first condition
- elif → checks another condition if previous ones are False
- else → runs if none of the conditions are True

Example:

a = 200
b = 33

if b > a:
print("b is greater than a")

elif a == b:
print("a and b are equal")

else:
print("a is greater than b")

---

Logical Operators

Logical operators combine multiple conditions.

---

AND Operator

Returns True only if both conditions are True.

a = 200
b = 33
c = 500

if a > b and c > a:
print("Both conditions are satisfied")

---

OR Operator

Returns True if at least one condition is True.

if a > b or a > c:
print("At least one condition is True")

---

NOT Operator

Reverses the result.

a = 33
b = 200

if not a > b:
print("a is NOT greater than b")

---

Loops in Python

Loops repeat code multiple times while a condition is met.

Python mainly uses:
- while loop
- for loop

---

The While Loop

Executes repeatedly while the condition remains True.

i = 1

while i < 6:
print(i)
i += 1

Important:
Always update the loop variable to avoid infinite loops.

---

Break Statement

Stops the loop immediately.

i = 1

while i < 6:
print(i)

if i == 3:
break

i += 1

---

Continue Statement

Skips the current iteration and continues with the next one.

i = 0

while i < 6:
i += 1

if i == 3:
continue

print(i)

---

Else with Loops

The else block runs once when the loop condition becomes False.

i = 1

while i < 6:
print(i)
i += 1

else:
print("Loop finished")

---

The For Loop

A for loop is used to iterate through sequences such as:
- Lists
- Tuples
- Strings

Example:

fruits = ["apple", "banana", "cherry"]

for x in fruits:
print(x)

---

Practice Exercises

1. Write a program to check whether a number is positive, negative, or zero.

2. Print all even numbers from 1 to 20 using a loop.

3. Create a loop that stops when the number 5 is reached.

4. Loop through a string and print each character separately.
Python coding
Basic_Python_Functions_Recursion.pdf
Functions and Recursion in Python

---

Working with Functions

A function is a reusable block of code that runs only when it is called.

Functions help:
- Organize code
- Avoid repetition
- Make programs easier to manage

---

Default Parameter Values

A function can use a default value if no argument is provided.

def my_function(country="Norway"):
print("I am from " + country)

my_function("Sweden")
my_function()

Output:

I am from Sweden
I am from Norway

---

Passing Sequences as Arguments

Functions can receive lists, tuples, dictionaries, and other data types.

def my_list_function(food):
for x in food:
print(x)

fruits = ["apple", "banana", "cherry"]

my_list_function(fruits)

---

Return Values

Use the return statement to send data back from a function.

def multiply_by_five(x):
return 5 * x

result = multiply_by_five(3)

print(result)

Output:

15

---

Recursion

Recursion is when a function calls itself.

It is useful for:
- Mathematical problems
- Repeated calculations
- Breaking problems into smaller parts

---

Important Note

Recursive functions must have a stopping condition (base case).

Without it, the function may run forever and crash the program.

---

Recursion Example

def tri_recursion(k):

if k > 0:
result = k + tri_recursion(k - 1)
return result

else:
return 0

print(tri_recursion(6))

This function adds numbers from 6 down to 0.

---

Lambda Functions

A lambda function is a small anonymous function.

Syntax:

lambda arguments : expression

Example:

x = lambda a, b: a * b

print(x(5, 6))

Output:

30

---

Why Use Lambda Functions?

Useful for:
- Short operations
- One-line functions
- Functional programming techniques

---

Practice Exercises

1. Create a Fibonacci sequence program.

The sequence starts with:
0, 1, 1, 2, 3, 5, 8...

Each number equals the sum of the previous two numbers.

---

2. Write a function that accepts a positive integer and calculates the sum of all numbers down to 0.

Example:

Input: 5
Output: 15
❤1
Python coding
Basic_Python_Data_Structures_Lists.pdf
Data Structures: Lists in Python

---

Introduction to Lists

Lists are used to store multiple items in a single variable.

They are one of the main built-in collection data types in Python.

---

Key Characteristics of Lists

- Ordered → Items keep their position
- Changeable → Items can be modified
- Allow Duplicates → Same value can appear multiple times

---

Creating a List

thislist = ["apple", "banana", "cherry"]

print(thislist)

---

Accessing List Items

Lists use indexes.

thislist = ["apple", "banana", "cherry"]

print(thislist[0])
print(thislist[1])

Output:

apple
banana

---

List Indexing

"apple"   "banana"   "cherry"
0 1 2
-3 -2 -1

- Positive indexes start from the beginning
- Negative indexes start from the end

---

Negative Indexing

thislist = ["apple", "banana", "cherry"]

print(thislist[-1])

Output:

cherry

---

Range of Indexes

The start index is included, but the end index is excluded.

thislist = ["apple", "banana", "cherry", "orange", "kiwi"]

print(thislist[2:4])

Output:

['cherry', 'orange']

---

Changing List Items

Use the index number to modify an item.

thislist = ["apple", "banana", "cherry"]

thislist[1] = "blackcurrant"

print(thislist)

---

List Length

Use len() to count items.

print(len(thislist))

---

Essential List Methods

---

append()

Adds an item to the end.

fruits = ["apple", "banana"]

fruits.append("orange")

print(fruits)

---

insert()

Adds an item at a specific position.

fruits.insert(1, "cherry")

print(fruits)

---

remove()

Removes a specific item.

fruits.remove("banana")

print(fruits)

---

pop()

Removes the last item.

fruits.pop()

print(fruits)

---

Membership Test

Use in to check if an item exists.

if "apple" in fruits:
print("Yes, it is in the list!")

---

Practice Exercises

1. Create a list of 5 favorite movies and print the third item.

2. Replace the second item in a list with a new value.

3. Add two new items to a list using:
- append()
- insert()

4. Check if "banana" exists in a list.
Python coding
Basic_Python_Advanced_Lists.pdf
Advanced List Operations in Python

---

Adding List Items

Python provides multiple ways to add items to a list.

---

append()

Adds an item to the end of the list.

fruits = ["apple", "banana"]

fruits.append("orange")

print(fruits)

Output:

['apple', 'banana', 'orange']

---

insert()

Adds an item at a specific index.

fruits = ["apple", "banana"]

fruits.insert(1, "cherry")

print(fruits)

---

extend()

Adds elements from another iterable.

fruits = ["apple", "banana"]
tropical = ["mango", "pineapple"]

fruits.extend(tropical)

print(fruits)

---

Removing List Items

Python provides different methods for removing items.

---

remove()

Removes the first matching value.

fruits = ["apple", "banana", "banana"]

fruits.remove("banana")

print(fruits)

---

pop()

Removes an item by index.

fruits = ["apple", "banana", "cherry"]

fruits.pop(1)

print(fruits)

Without an index, pop() removes the last item.

---

del Keyword

Delete a specific item:

fruits = ["apple", "banana", "cherry"]

del fruits[0]

print(fruits)

Delete the entire list:

del fruits

---

clear()

Removes all items but keeps the list object.

fruits = ["apple", "banana", "cherry"]

fruits.clear()

print(fruits)

---

List Comprehension

A shorter and cleaner way to create lists.

Traditional way:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = []

for x in fruits:
if "a" in x:
newlist.append(x)

print(newlist)

List comprehension way:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)

---

Sorting Lists

Sort alphabetically:

fruits = ["orange", "mango", "kiwi", "banana"]

fruits.sort()

print(fruits)

Reverse sorting:

fruits.sort(reverse=True)

print(fruits)

---

Important Note

Sorting is case-sensitive.

Capital letters come before lowercase letters.

---

Copying Lists

Wrong way:

list2 = list1

This only creates a reference.

---

Correct Ways to Copy

Using .copy():

new_copy = fruits.copy()

Using `list():

``
python
another_copy = list(fruits)

---

Joining Two Lists

Using `+` operator:

python
list1 = ["a", "b"]
list2 = [1, 2]

list3 = list1 + list2

print(list3)

Using a loop:

python
for x in list2:
list1.append(x)

print(list1)
`

---

Practice Exercises

1. Use list comprehension to convert all items in a list to uppercase.

2. Sort a list based on how close numbers are to 50.

3. Reverse a list using `.reverse()`.
Python coding
Basic_Python_Tuples.pdf
Basic Python Course
Data Structures: Tuples

By Yehya Oumer
(Certificate from Mizan Institute of Technology)

Issued: 2026

---

1. Introduction to Tuples

Tuples are used to store multiple items in a single variable.

They are one of the 4 built-in collection data types in Python.

---

Characteristics of Tuples

- Ordered → Items keep their position
- Unchangeable (Immutable) → Items cannot be modified after creation
- Allow Duplicates → Multiple items can have the same value

---

Creating a Tuple

thistuple = ("apple", "banana", "cherry")

print(thistuple)

---

One-Item Tuple Trick

To create a tuple with only one item, you must include a comma.

Correct:

thistuple = ("apple",)

Wrong:

thistuple = ("apple")

Without the comma, Python treats it as a string.

---

2. Updating Tuples (The Workaround)

Tuples are immutable, meaning they cannot be changed directly.

However, there is a common workaround:

1. Convert tuple to list
2. Modify the list
3. Convert back to tuple

Example:

x = ("apple", "banana", "cherry")

y = list(x) # Convert to list
y[1] = "kiwi" # Modify the list

x = tuple(y) # Convert back to tuple

print(x)

---

3. Unpacking Tuples

Packing means storing values into a tuple.

Unpacking means extracting tuple values into variables.

fruits = ("apple", "banana", "cherry")

(green, yellow, red) = fruits

print(green)

Output:

apple

---

Using the Asterisk (*)

If variables are fewer than values, use * to collect the remaining values.

fruits = ("apple", "banana", "cherry", "orange")

(green, yellow, *others) = fruits

print(others)

Output:

['cherry', 'orange']

---

4. Join and Multiply Tuples

Join Tuples

Use + to combine tuples.

tuple1 = ("a", "b")
tuple2 = (1, 2)

tuple3 = tuple1 + tuple2

print(tuple3)

---

Multiply Tuples

Use * to repeat tuple content.

fruits = ("apple", "banana")

print(fruits * 2)

Output:

('apple', 'banana', 'apple', 'banana')

---

5. Why Use Tuples?

You may ask:
Why use tuples if lists already exist?

Here are two important reasons:

---

Performance

Tuples are slightly faster than lists because they are immutable.

---

Data Safety

Tuples protect data from accidental modification.

Useful for:
- Coordinates
- Days of the week
- Months of the year
- Fixed configuration data

---

Practice Exercises

1. Reverse this tuple:

mytuple = ("apple", "banana", "cherry")

2. Check if "banana" exists inside the tuple using in.

3. Use .count() to count how many times a value appears in a tuple.
Python coding
Basic_Python_Sets.pdf
Basic Python Course
Data Structures: Sets

By Yehya Oumer
(Certificate from Mizan Institute of Technology)

Issued: 2026

---

1. Understanding Sets

Sets are used to store multiple items in a single variable.

They are written using curly brackets {}.

---

Characteristics of Sets

- Unordered → Items do not have a fixed order
- Unchangeable → Items themselves cannot be modified directly
- Unindexed → No index numbers like lists
- No Duplicates → Duplicate values are automatically removed

---

Example

thisset = {"apple", "banana", "cherry", "apple"}

print(thisset)

Output:

{'apple', 'banana', 'cherry'}

Notice:
"apple" appears only once.

---

2. Modifying a Set

Adding One Item

Use .add():

thisset = {"apple", "banana", "cherry"}

thisset.add("orange")

print(thisset)

---

Adding Multiple Items

Use .update():

thisset.update(["mango", "kiwi"])

print(thisset)

---

Removing Items

Using remove():

thisset.remove("banana")

Important:
remove() raises an error if the item does not exist.

---

Using discard()

thisset.discard("banana")

Difference:
discard() does NOT raise an error if the item is missing.

---

3. Set Operations (Logic)

Sets are powerful because they support mathematical operations.

---

Union (Combine All Items)

Method:

set1.union(set2)

Operator:

set1 | set2

Example:

set1 = {"a", "b"}
set2 = {1, 2}

print(set1 | set2)

---

Intersection (Common Items Only)

Method:

set1.intersection(set2)

Operator:

set1 & set2

---

Difference (Items in Set1 but NOT in Set2)

Method:

set1.difference(set2)

Operator:

set1 - set2

---

Symmetric Difference

Keeps items that exist in either set, but NOT both.

Method:

set1.symmetric_difference(set2)

Operator:

set1 ^ set2

---

Boolean Note

In Python sets:

True == 1
False == 0

So these are treated as duplicate values.

Example:

myset = {True, 1, False, 0}

print(myset)

Output:

{False, True}

---

4. Why Use Sets?

Removing Duplicates Instantly

Sets are perfect for cleaning repeated data.

Example:

names = ["Ali", "Sara", "Ali", "Hana", "Sara"]

unique_names = set(names)

print(unique_names)

Output:

{'Ali', 'Sara', 'Hana'}

---

Practice Exercises

1. Disjoint Check

Write a program to check if two sets have no common items without using built-in functions.

---

2. Unique Counter

Given a list of student names, count the number of unique names.

---

3. Symmetric Difference

Use the ^ operator to find items that exist in either Set A or Set B, but not both.
Python coding
Basic_Python_Sets.pdf
Basic Python Course
Data Structures: Sets

By Yehya Oumer
(Certificate from Mizan Institute of Technology)

Issued: 2026

---

1. Understanding Sets

A Set is a collection used to store multiple unique items in a single variable.

Sets are written using curly brackets {}.

Example:

thisset = {"apple", "banana", "cherry"}

print(thisset)

---

Characteristics of Sets

- Unordered → Items do not keep a fixed order
- Unindexed → No index numbers
- No Duplicates → Repeated values are automatically removed
- Mutable → You can add or remove items

---

Duplicate Values are Ignored

thisset = {"apple", "banana", "cherry", "apple"}

print(thisset)

Output:

{'apple', 'banana', 'cherry'}

Even though "apple" appears twice, it is stored only once.

---

2. Modifying a Set

Adding One Item

Use .add():

thisset = {"apple", "banana"}

thisset.add("orange")

print(thisset)

---

Adding Multiple Items

Use .update():

thisset.update(["mango", "kiwi"])

print(thisset)

---

Removing Items

Using remove():

thisset.remove("banana")

Important:
If the item does not exist, Python raises an error.

---

Using discard()

thisset.discard("banana")

Difference:
discard() does not raise an error if the item is missing.

---

3. Set Operations (Logic)

Sets support mathematical operations.

These operations are extremely useful in programming and data analysis.

---

Union

Combines all unique values from both sets.

Method:

set1.union(set2)

Operator:

set1 | set2

Example:

set1 = {"a", "b"}
set2 = {1, 2}

print(set1 | set2)

---

Intersection

Returns only common values.

Method:

set1.intersection(set2)

Operator:

set1 & set2

Example:

set1 = {"apple", "banana"}
set2 = {"banana", "orange"}

print(set1 & set2)

Output:

{'banana'}

---

Difference

Returns values in the first set but not in the second set.

Method:

set1.difference(set2)

Operator:

set1 - set2

---

Symmetric Difference

Returns values that are NOT shared between both sets.

Method:

set1.symmetric_difference(set2)

Operator:

set1 ^ set2

---

Boolean Note

In Python sets:

True == 1
False == 0

So Python treats them as duplicate values.

Example:

myset = {True, 1, False, 0}

print(myset)

Output:

{False, True}

---

4. Why Use Sets?

Removing duplicates instantly.

Example:

names = ["Ali", "Sara", "Ali", "Hana", "Sara"]

unique_names = set(names)

print(unique_names)

Output:

{'Ali', 'Sara', 'Hana'}

---

Real-World Uses of Sets

- Removing duplicate usernames
- Finding common interests between users
- Comparing datasets
- Membership testing

---

Practice Exercises

1. Disjoint Check

Write a program to check if two sets have zero common items without using built-in functions.

---

2. Unique Counter

Given a list of student names, count how many unique names exist.

---

3. Symmetric Difference

Use the ^ operator to find items that exist in either Set A or Set B, but not both.
Python coding
Basic_Python_Dictionaries.pdf
Basic Python Course
Data Structures: Dictionaries

By Yehya Oumer
(Certificate from Mizan Institute of Technology)

Issued: 2026

---

1. Understanding Dictionaries

Dictionaries are used to store data in key:value pairs.

Think of a real dictionary:
- Word → Key
- Meaning → Value

Example:

thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}

print(thisdict["brand"])

Output:

Ford

---

Characteristics of Dictionaries

- Ordered → Python keeps the insertion order
- Changeable → Items can be updated or removed
- No Duplicate Keys → Duplicate keys overwrite old values

Example:

thisdict = {
"brand": "Ford",
"brand": "BMW"
}

print(thisdict)

Output:

{'brand': 'BMW'}

---

2. Managing Data

Accessing Items

Using square brackets:

print(thisdict["model"])

Using `.get():

``
python
print(thisdict.get("year"))

Difference:
`.get()` avoids errors if the key does not exist.

---

Changing and Adding Items

Update an existing value:

python
thisdict["year"] = 2020

Add a new key:value pair:

python
thisdict["color"] = "red"

Example:

python
print(thisdict)

---

3. Looping Through Dictionaries

Loop Through Keys

python
for x in thisdict:
print(x)

---

Loop Through Values

python
for x in thisdict.values():
print(x)

---

Loop Through Both Keys and Values

python
for x, y in thisdict.items():
print(x, y)

---

4. Nested Dictionaries

A dictionary can contain other dictionaries.

This is useful for:
- User profiles
- Databases
- Structured data

Example:

python
myfamily = {
"child1": {
"name": "Emil",
"year": 2004
},

"child2": {
"name": "Tobias",
"year": 2007
}
}

Access nested data:

python
print(myfamily["child2"]["name"])

Output:

python
Tobias

---

5. View Objects (Added Value)

The `.keys()` and `.values()` methods return dynamic view objects.

This means if the dictionary changes, the views update automatically.

Example:

python
x = thisdict.keys()

thisdict["color"] = "white"

print(x)

---

Dictionary Methods Summary

---

.pop(key)

Removes a specific item.

python
thisdict.pop("model")

---

.clear()

Removes all items.

python
thisdict.clear()

---

.update()

Updates the dictionary with another dictionary.

python
thisdict.update({"color": "blue"})

---

Real-World Uses of Dictionaries

- User account information
- Product databases
- API responses
- Student records
- Configuration settings

---

Practice Exercises

1. Inventory Update

Create a dictionary of store items and prices. Increase the price of one item by 10%.

---

2. Nested Access

From the `myfamily` dictionary, print only the name of `"child2"`.

---

3. Key Checker

Check if `"model"` exists inside `thisdict`.

Example:

python
if "model" in thisdict:
print("Yes, model exists")
`