Python Programs

Practice Code Examples

Hands-on Python programs to practice and master programming concepts. From basic to advanced level.

Python 3 ✓ Practice 10+ Programs Interview Prep
01

Basic Programs

#1 Check Prime Number Basic
Python
def is_prime(n):
    if n < 2: return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0: return False
    return True

print(is_prime(17))  # True
print(is_prime(4))   # False
#2 Factorial of a Number Basic
Python
def factorial(n):
    if n == 0 or n == 1: return 1
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

# Using recursion
def factorial_rec(n):
    if n <= 1: return 1
    return n * factorial_rec(n - 1)

print(factorial(5))  # 120
#3 Fibonacci Sequence Basic
Python
def fibonacci(n):
    if n <= 0: return []
    if n == 1: return [0]

    seq = [0, 1]
    for i in range(2, n):
        seq.append(seq[-1] + seq[-2])
    return seq

print(fibonacci(10))  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
#4 Reverse a String Basic
Python
def reverse_string(s):
    return s[::-1]

# Using two pointers
def reverse_two_ptr(s):
    chars = list(s)
    left, right = 0, len(s) - 1
    while left < right:
        chars[left], chars[right] = chars[right], chars[left]
        left += 1
        right -= 1
    return ''.join(chars)

print(reverse_string("hello"))  # "olleh"
#5 Check Palindrome Basic
Python
def is_palindrome(s):
    s = s.lower().replace(" ", "")
    return s == s[::-1]

# Two pointer approach
def is_palindrome_tp(s):
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]: return False
        left += 1
        right -= 1
    return True

print(is_palindrome("A man a plan a canal Panama"))  # True
02

Intermediate Programs

#6 Binary Search Intermediate
Python
def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

arr = [1, 3, 5, 7, 9, 11]
print(binary_search(arr, 7))  # 3
print(binary_search(arr, 2))  # -1
#7 Bubble Sort Intermediate
Python
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

arr = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(arr))  # [11, 12, 22, 25, 34, 64, 90]
#8 Count Word Frequency Intermediate
Python
def word_frequency(text):
    words = text.lower().split()
    freq = {}
    for word in words:
        word = ''.join(c for c in word if c.isalnum())
        if word:
            freq[word] = freq.get(word, 0) + 1
    return freq

# Using Counter
from collections import Counter
def word_freq_counter(text):
    words = text.lower().split()
    return Counter(words)

text = "hello world hello python world"
print(word_frequency(text))
#9 Linked List Implementation Intermediate
Python
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def display(self):
        elements = []
        current = self.head
        while current:
            elements.append(current.data)
            current = current.next
        return " -> ".join(map(str, elements))

ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
print(ll.display())  # 1 -> 2 -> 3
03

Advanced Programs

#10 Merge Sort Advanced
Python
def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])

    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    result.extend(left[i:])
    result.extend(right[j:])
    return result

arr = [38, 27, 43, 3, 9, 82, 10]
print(merge_sort(arr))  # [3, 9, 10, 27, 38, 43, 82]
#11 Quick Sort Advanced
Python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]

    return quick_sort(left) + middle + quick_sort(right)

arr = [3, 6, 8, 10, 1, 2, 1]
print(quick_sort(arr))  # [1, 1, 2, 3, 6, 8, 10]
#12 Stack Implementation Advanced
Python
class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        raise IndexError("Stack is empty")

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        raise IndexError("Stack is empty")

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)

stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.pop())    # 3
print(stack.peek())   # 2
#13 Queue Implementation Advanced
Python
from collections import deque

class Queue:
    def __init__(self):
        self.items = deque()

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if not self.is_empty():
            return self.items.popleft()
        raise IndexError("Queue is empty")

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)

queue = Queue()
queue.enqueue("A")
queue.enqueue("B")
queue.enqueue("C")
print(queue.dequeue())  # A
print(queue.dequeue())  # B
#14 Bank Account System (OOP) Advanced
Python
class BankAccount:
    def __init__(self, balance=0):
        self.__balance = balance
        self.__history = []

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            self.__history.append(f"Deposit: {amount}")

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            self.__history.append(f"Withdraw: {amount}")

    def get_balance(self):
        return self.__balance

    def show_history(self):
        return self.__history

acc = BankAccount(1000)
acc.deposit(500)
acc.withdraw(200)
print(acc.get_balance())      # 1300
print(acc.show_history())