20 Mini Projects in Python with Source Code

Python is a versatile language that’s great for both beginners and experienced developers. Here are 20 mini projects in Python, complete with code examples, that can help you practice and improve your skills.


1. Number Guessing Game

import random

def guess_number():
    number = random.randint(1, 100)
    attempts = 0

    while True:
        guess = int(input("Guess the number (between 1 and 100): "))
        attempts += 1
        if guess < number:
            print("Too low!")
        elif guess > number:
            print("Too high!")
        else:
            print(f"Congratulations! You guessed the number in {attempts} attempts.")
            break

guess_number()

2. Simple Calculator

def calculator():
    operation = input("Choose an operation (+, -, *, /): ")
    num1 = float(input("Enter first number: "))
    num2 = float(input("Enter second number: "))

    if operation == '+':
        print(f"{num1} + {num2} = {num1 + num2}")
    elif operation == '-':
        print(f"{num1} - {num2} = {num1 - num2}")
    elif operation == '*':
        print(f"{num1} * {num2} = {num1 * num2}")
    elif operation == '/':
        print(f"{num1} / {num2} = {num1 / num2}")
    else:
        print("Invalid operation!")

calculator()

3. BMI Calculator

def bmi_calculator():
    weight = float(input("Enter your weight in kg: "))
    height = float(input("Enter your height in meters: "))
    bmi = weight / (height ** 2)
    print(f"Your BMI is: {bmi}")

bmi_calculator()

4. Palindrome Checker

def is_palindrome(s):
    s = s.lower().replace(' ', '')
    return s == s[::-1]

word = input("Enter a word or phrase: ")
if is_palindrome(word):
    print(f"'{word}' is a palindrome.")
else:
    print(f"'{word}' is not a palindrome.")

5. To-Do List

def todo_list():
    tasks = []

    while True:
        task = input("Enter a task (or 'quit' to stop): ")
        if task.lower() == 'quit':
            break
        tasks.append(task)

    print("Your To-Do List:")
    for i, task in enumerate(tasks, 1):
        print(f"{i}. {task}")

todo_list()

6. Hangman Game

import random

def hangman():
    words = ['python', 'java', 'swift', 'javascript']
    word = random.choice(words)
    guessed = "_" * len(word)
    word = list(word)
    guessed = list(guessed)
    attempts = 6
    guessed_letters = []

    while attempts > 0:
        print(' '.join(guessed))
        guess = input("Guess a letter: ").lower()
        if guess in guessed_letters:
            print("You already guessed that letter.")
        elif guess in word:
            for i, letter in enumerate(word):
                if letter == guess:
                    guessed[i] = guess
            if "_" not in guessed:
                print("Congratulations! You won!")
                break
        else:
            attempts -= 1
            print(f"Wrong guess. You have {attempts} attempts left.")
        guessed_letters.append(guess)

    if attempts == 0:
        print(f"You lost! The word was {''.join(word)}.")

hangman()

7. Currency Converter

def currency_converter():
    rate = float(input("Enter the exchange rate from USD to EUR: "))
    dollars = float(input("Enter amount in USD: "))
    euros = dollars * rate
    print(f"{dollars} USD is equal to {euros} EUR")

currency_converter()

8. Contact Book

contacts = {}

def add_contact(name, phone):
    contacts[name] = phone

def view_contacts():
    for name, phone in contacts.items():
        print(f"{name}: {phone}")

while True:
    choice = input("1. Add Contact 2. View Contacts 3. Quit: ")
    if choice == '1':
        name = input("Enter name: ")
        phone = input("Enter phone number: ")
        add_contact(name, phone)
    elif choice == '2':
        view_contacts()
    elif choice == '3':
        break
    else:
        print("Invalid choice!")

9. Alarm Clock

import time

def alarm_clock():
    alarm_time = input("Enter the time to set the alarm (HH:MM): ")
    print(f"Alarm set for {alarm_time}")
    while True:
        current_time = time.strftime("%H:%M")
        if current_time == alarm_time:
            print("Wake up!")
            break
        time.sleep(1)

alarm_clock()

10. Simple Chatbot

def chatbot():
    print("Hi! I'm a simple chatbot. Type 'quit' to exit.")
    while True:
        user_input = input("You: ")
        if user_input.lower() == 'quit':
            print("Goodbye!")
            break
        else:
            print(f"Bot: You said '{user_input}'")

chatbot()

11. Password Generator

import random
import string

def password_generator(length):
    characters = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(random.choice(characters) for _ in range(length))
    return password

length = int(input("Enter the length of the password: "))
print(f"Generated Password: {password_generator(length)}")

12. Tic-Tac-Toe

def print_board(board):
    for row in board:
        print(" | ".join(row))
        print("-" * 5)

def check_winner(board, mark):
    for row in board:
        if all(s == mark for s in row):
            return True
    for col in range(3):
        if all(row[col] == mark for row in board):
            return True
    if all(board[i][i] == mark for i in range(3)) or all(board[i][2 - i] == mark for i in range(3)):
        return True
    return False

def tic_tac_toe():
    board = [[' ' for _ in range(3)]]
    current_player = "X"
    for _ in range(9):
        print_board(board)
        row, col = map(int, input(f"Player {current_player}, enter row and column: ").split())
        if board[row][col] == ' ':
            board[row][col] = current_player
            if check_winner(board, current_player):
                print_board(board)
                print(f"Player {current_player} wins!")
                return
            current_player = "O" if current_player == "X" else "X"
        else:
            print("Cell is already taken. Try again.")
    print_board(board)
    print("It's a tie!")

tic_tac_toe()

13. Weather App (using API)

import requests

def get_weather(city):
    api_key = 'your_api_key'
    base_url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    response = requests.get(base_url)
    data = response.json()
    if data['cod'] == 200:
        main = data['main']
        weather = data['weather'][0]
        print(f"City: {city}")
        print(f"Temperature: {main['temp']}°C")
        print(f"Weather: {weather['description']}")
    else:
        print("City not found.")

city = input("Enter city name: ")
get_weather(city)

14. Quiz Game

questions = {
    "What is the capital of France?": "Paris",
    "What is 2 + 2?": "4",
    "What is the color of the sky?": "Blue"
}

def quiz_game():
    score = 0
    for question, answer in questions.items():
        user_answer = input(question + " ")
        if user_answer.lower() == answer.lower():
            score += 1
    print(f"Your score is {score}/{len(questions)}")

quiz_game()

15. Rock, Paper, Scissors

import random

def rps_game():
    choices = ["rock", "paper", "scissors"]
    computer_choice = random.choice(choices)
    user_choice = input("Choose rock, paper, or scissors: ").lower()
    if user_choice == computer_choice:
        print("It's a tie!")
    elif (user_choice == "rock" and computer_choice == "scissors") or \
         (user_choice == "paper" and computer_choice == "rock") or \
         (user_choice == "scissors" and computer_choice == "paper"):
        print("You win!")
    else:
        print("You lose!")
    print(f"Computer chose: {computer_choice}")

rps_game()

16. Binary Search Algorithm

def binary_search(arr, x):
    low, high = 0, len(arr) - 1
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == x:
            return mid
        elif arr[mid] < x:
            low = mid + 1
        else:
            high = mid - 1
    return -1

arr = [2, 3, 4, 10, 40]
x = int(input("Enter the number to search: "))
result = binary_search(arr, x)
if result != -1:
    print(f"Element is present at index {result}")
else:
    print("Element is not present in array")

17. URL Shortener (using API)

import requests

def shorten_url(long_url):
    api_url = "https://api.shrtco.de/v2/shorten"
    params = {"url": long_url}
    response = requests.post(api_url, params=params)
    data = response.json()
    if data['ok']:
        return data['result']['short_link']
    else:
        return "Error: Unable to shorten the URL"

long_url = input("Enter the URL to shorten: ")
short_url = shorten_url(long_url)
print(f"Shortened URL: {short_url}")

18. Markdown to HTML Converter

import markdown

def markdown_to_html(md_text):
    html = markdown.markdown(md_text)
    return html

md_text = """
# Heading

This is a paragraph with **bold** text and *italic* text.

- List item 1
- List item 2
"""
html = markdown_to_html(md_text)
print(html)

19. Image Resizer

from PIL import Image

def resize_image(input_path, output_path, size):
    with Image.open(input_path) as img:
        img = img.resize(size, Image.ANTIALIAS)
        img.save(output_path)

input_path = 'input.jpg'
output_path = 'output.jpg'
size = (800, 600)
resize_image(input_path, output_path, size)
print("Image resized successfully!")

20. JSON to CSV Converter

import json
import csv

def json_to_csv(json_file, csv_file):
    with open(json_file, 'r') as jfile:
        data = json.load(jfile)

    with open(csv_file, 'w', newline='') as cfile:
        writer = csv.writer(cfile)
        header = data[0].keys()
        writer.writerow(header)
        for row in data:
            writer.writerow(row.values())

json_file = 'data.json'
csv_file = 'data.csv'
json_to_csv(json_file, csv_file)
print("JSON data converted to CSV successfully!")

These mini projects cover a wide range of applications, from games and utilities to data processing and web interactions. They offer practical experience with Python and can be used as a foundation for more complex projects.

Leave a comment