20+ Best Python Projects with Source Code for 2023 – IQCode

Python Project Ideas for Beginners, Intermediate, and Advanced Users

Here are some Python project ideas with source code for beginners, intermediate, and advanced users:

Top 10 Python Projects for Beginners:

  1. Email Slicer
  2. Number to Words
  3. Google Image Downloader
  4. Contact List
  5. Monty Hall Simulation Problem
  6. Image to Sound
  7. Snake Game
  8. GIF Creator
  9. Website Blocker
  10. Binary Search Algorithm
  11. Dice Rolling Simulator

Top 12 Python Project Ideas for Intermediate:

  1. Image to Story
  2. Number Guessing
  3. Fibonacci Generator
  4. Voice Assistant
  5. Password Generator
  6. Reddit Bot
  7. Black Jack
  8. Recursive Triangle
  9. Queue
  10. Rock Paper Scissors Game
  11. Currency Converter
  12. Quiz Application

Top 5 Python Project Ideas for Advanced Users:

  1. Content Aggregator
  2. Building Chatbot
  3. Face Mask Detection
  4. Plagiarism Checker
  5. Music Player

Why are Python Projects Important?

Python projects are important for mastering the programming language. They help you apply what you learn and increase your understanding of Python. They can also help you build a strong portfolio and prepare you for real-world development challenges.


  1. Is Python suitable for large projects?
  2. How do you write a project in Python?
  3. What should my first python project be?
  4. Is Python bad for big projects?
  5. How to make projects in Python?
  6. How to run a Python project?

Additional Resources:
If you want to learn more about Python, here are some additional resources you can use:

  • Python documentation: https://docs.python.org/3/
  • Tutorialspoint Python: https://www.tutorialspoint.com/python/index.htm

Top 10 Python Projects for Beginners

If you’re new to Python or looking to improve your skills, check out these beginner-level projects. We’ve provided source codes to help you get started and gain experience. Here are some ideas to explore:


1. Mad Libs Generator
2. Guess the Number
3. Dice Rolling Simulator
4. Email Slicer
5. Binary Search Algorithm
6. URL Shortener
7. Rock Paper Scissors Game
8. Word Count Tool
9. Weather App
10. Calculator

Email Slicer

Email Slicer is a simple tool that takes an email address as input and produces the username and domain associated with it. The email is separated into two strings using “@” symbol. Here is an example:

Input: [email protected]

Output: Your username is IQCode & domain is gmail.com

To create this project, use this SOURCE CODE below:

email = input("Please enter your email address: ").strip()
username = email[:email.index("@")]
domain = email[email.index("@")+1:]
print(f"Your username is {username} & domain is {domain}")

Number to Words

This Python project converts numbers into words. It can handle inputs greater than a million as well as non-positive integers like zero, negative integers, or floating-point numbers. View the SOURCE CODE on GitHub: https://github.com/Harsh151200/Beginner-Python-Projects/tree/main/Num2Words

Google Image Downloader

Looking for a simple way to download multiple images for a project? With this program, you can easily download images related to your chosen topic. However, please ensure that you respect copyright laws and give appropriate credit to image owners if necessary.

You can access the source code here: https://github.com/hardikvasa/google-images-download.

Contact List

Creating a contact list with Python and PyQt is a useful project to enhance your programming skills. The SQLAlchemy library can be used to store contacts using SQLite. The application should be modular, well-structured and enable adding, editing and storing contact information. Prior experience with Python and PyQt will be advantageous.

This project will teach you how to develop a PyQt GUI application, use PyQt’s SQL support, connect the application to an SQLite database, and use PyQt’s Model-View architecture to manage contact data. Upon completion of this project, you will have a functional application to store and manage your contacts.

You can access the source code at https://github.com/andystiller/address-book/blob/main/address-book.py.

Monty Hall Simulation Problem

This program simulates the Monty Hall problem where the user selects a door and has a chance to win a car. The program uses a random permutation to generate the doors and their contents (car or goats). The user selects a door, and the program reveals a door with a goat. The user then has the option to switch their selection, increasing their chances of winning the car.

The main steps of the simulation are:
– Generate a permutation of three numbers representing the doors
– Display an image of the doors with their contents
– Have the user select a door
– Reveal a door with a goat
– Give the user the option to switch their selection to increase their chances of winning the car.

View the source code for this program.

Image to Sound Tutorial

This tutorial shows how to create sound from image files using Python. By performing Optical Character Recognition (OCR) and Speech Synthesis, we can combine them into one working program.

To use OCR, we’ll use pytesseract, which allows us to perform OCR with just one line of code. With Google Text to Speech (GTTS), we can convert decoded text to audio with ease.

Here’s an example of how to convert text to speech using GTTS in just one line of code:


from gtts import gTTS

Snake Game in Python

If you miss the old Snake game from Nokia phones, why not try creating it for yourself using Python? This project is perfect for beginner Python programmers, and utilizes the Turtle module specifically designed for newcomers to try and submit as part of the project. The game will be developed in Python 3 and will make use of the following modules:

  • Turtle: pre-installed Python library allowing users to create shapes and pictures using a virtual canvas
  • Time: use this function to count seconds since the epoch
  • Random: generate random numbers in Python using the random module

You can find the source code at:


Creating GIFs with Python’s MoviePy Module

Creating GIFs is a popular trend on social media platforms like WhatsApp and Instagram. This Python project uses the MoviePy module to create GIFs from images.

MoviePy allows for video editing, processing, and compositing, including support for the most common video formats like GIF. To get started with MoviePy, install it in the terminal using:

`pip install moviepy`

Check out the source code for this project on GitHub at https://github.com/Harsh151200/Beginner-Python-Projects/tree/main/Gif-Creator.

Website Blocker Python Project

Tired of random pop-ups while surfing? This Website Blocker Python Project prevents unwanted website access permanently or on a schedule. You can block all undesired sites and use the internet safely.

The project’s objective is to block websites on any device, which helps users to avoid distractions. You can enter multiple websites to block, and clicking on the block button will check whether it has already been blocked; if not, it will block those websites and print “blocked”.

Edit sites_to_block, change the host, or edit the time when needed to block the sites.

The project uses the host file of the operating system that maps hostname to IP addresses of the machines.

Check the SOURCE CODE:


This algorithm takes an input range of numbers, starting from 0 to a specified maximum, and displays a range of numbers with a difference of two.

Dice Rolling Simulator

This program generates a random number between 1 and 6 to simulate rolling a dice. The user can roll the dice as many times as they want and will see the number each time. The application will ask if the user wants to roll again. The program uses the random module.

Skills you will learn:

  • Simulating dice rolls using random.randint()
  • Manipulating strings using methods like .center() and .join()
  • Taking user input with input() and parsing/validating that input

To use, provide the number of six-sided dice you want to roll using a text-based user interface. You can find the source code on Github.

Top 12 Python Project Ideas for Intermediate

If you have some experience with Python, you can dive into building these projects. They are designed for intermediate users who want to expand their knowledge and skills.


Sorry, there is no code provided as the original prompt does not require one.

Image to Story

This project assists in generating a sentence by capturing an image. To begin, download the pre-trained models and style vectors by running:

wget http://www.cs.toronto.edu/~rkiros/neural_storyteller.zip

Additionally, download the VGG-19 ConvNet parameters by running:

wget https://s3.amazonaws.com/lasagne/recipes/pretrained/imagenet/vgg19.pkl

Ensure all downloaded models and style vectors are specified in the _CONFIG.PY_ file. If running on CPU, download the VGG-19 prototxt and model by running:

wget http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel
wget https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/bb2b4fe0a9bb0669211cf3d0bc949dfdda173e9e/VGG_ILSVRC_19_layers_deploy.prototxt

Finally, generate a story by opening Ipython and running:

import generate
z = generate.load_all()
generate.story(z, './images/ex1.jpg')


This project involves guessing a number with hints provided after each incorrect guess.

Here’s what you’ll do:

– Develop a game that allows the user to choose a range of numbers to guess.
– Assume the user selects a range where the lower and upper bounds are integers.
– The user has to guess an integer randomly chosen by the system within a minimum number of attempts.

Here’s how to build the project:

– Prompt the user to enter the lower and upper bounds of the range.
– Generate a random integer within the range and store it in a variable.
– Create a while loop for the user’s repeated attempts to guess the number.
– If the user’s guess is too high, output “Try again! Your guess was too high.”
– If the user’s guess is too low, output “Try again! Your guess was too small.”
– If the user guesses within the minimum limit, output “Congratulations!”
– If the user exceeds the minimum attempts, output “Better luck next time!”

Check out the source code for reference.

Fibonacci Generator

The Fibonacci series is a sequence of numbers where each number is the sum of its two preceding numbers. In this project, we will create a recursive function to determine whether a given number is a Fibonacci number or not. The mathematical formula for the Fibonacci sequence is Fn = Fn-1 + Fn-2, where F0=0 and F1=1.

When implementing the function, it is important to ensure that the data type used can accommodate Fibonacci values and to use memoization to store every value calculated at runtime when using the top-down approach to recursion.

Source Code:
def is_fibonacci(n: int) -> bool:
if n < 0: return False if n == 0 or n == 1: return True a, b = 0, 1 while b < n: a, b = b, a + b return b == n ```

Voice Assistant Python Project

Voice assistants like Siri, Alexa, and OkGoogle are popular in the market. Let’s create a Voice Assistant script using Python that can be personalized according to the user’s needs.

– Subprocesses
– WolframAlpha
– Pyttsx3
– Tkinter
– Wikipedia
– Speech Recognition
– Web Browser
– Ecapture
– Pyjokes
– Datetime
– Twilio
– Requests
– Beautifulsoup

You can access and download the SOURCE CODE for this project from https://github.com/jaspreetsidhu3/voice_assistant.


Managing multiple accounts can be difficult, especially if you need to generate different strong passwords for each of them. A strong password should include a mix of alphabets, numbers, and alphanumeric characters. Python can help build a project to generate random passwords for your accounts.

Steps to creating this project:

  1. Store all characters in a list using Python’s string module or by typing each character individually
  2. Ask the user for the length of the password
  3. Shuffle the characters using Python’s random.shuffle method
  4. Create an empty list to store the password
  5. Use a loop to generate the password, choosing a random character each time using random.choice
  6. Add the random character to the password list
  7. Randomize the list of passwords
  8. Join the list of passwords using Python’s join method to create a string
  9. Print the password

To access the source code, visit: https://github.com/abhishek305/Password-Generator-in-python/blob/master/Password%20Generator.py

Reddit Bot Python Project

Reddit is a popular question-answer app where you can also create a bot to automate comments on posts based on specified criteria. Here are the steps to create a Reddit bot:

username = "RedditUsername"
password = "password"
client_id = "idGoesHere"
client_secret = "secretGoesHere"

Firstly, pick a subreddit to scan, then designate a specific comment to search for and set your bot’s reply. Create a config.py file with your Reddit account details and Reddit.py file with the bot requirements.

Lastly, make sure you have Python, Praw, and a Reddit account as prerequisites. Here is the optimized code for the project.

import praw
import config
import time
import os

def bot_login():
print("Logging in...")
r = praw.Reddit(username=config.username,
user_agent="The Reddit Commenter v1.0")
print("Logged in!")
return r

def run_bot(r, comments_replied_to):
print("Searching last 1,000 comments")
for comment in r.subreddit('test').comments(limit=1000):
if "sample user comment" in comment.body and comment.id not in comments_replied_to and comment.author != r.user.me():
print("String with \"sample user comment\" found in comment " + comment.id)
comment.reply("Hey, I like your comment!")
print("Replied to comment " + comment.id)
with open ("comments_replied_to.txt", "a") as f:
f.write(comment.id + "\n")
print("Search Completed.")
print("Sleeping for 10 seconds...")
# Sleep for 10 seconds...

def get_saved_comments():
if not os.path.isfile("comments_replied_to.txt"):
comments_replied_to = []
with open("comments_replied_to.txt", "r") as f:
comments_replied_to = f.read()
comments_replied_to = comments_replied_to.split("\n")
comments_replied_to = filter(None, comments_replied_to)
return comments_replied_to

r = bot_login()
comments_replied_to = get_saved_comments()
while True:
run_bot(r, comments_replied_to)

Black Jack

Black Jack is a well-known casino card game that can be developed using Python. The game is played with a 52-card deck, and players aim to have a higher point total than the dealer, without exceeding 21 points. Here’s how the game works:

  • Players place bets
  • Each player and the dealer receives two cards
  • The goal is to have a hand totaling 21 or less, with a higher total than the dealer
  • Aces are worth 1 or 11 points, while all other cards have a face value
  • A “Black Jack” is a hand consisting of an Ace and a face card
  • Players can choose to hit (receive additional cards) or stay (not receive any more cards)
  • The dealer must hit until their hand reaches 17 points or more
  • The player wins if their total exceeds the dealer’s without going over 21

For code implementation, you can refer to the following GitHub repository:
Code: https://github.com/utsav507/python-projects/tree/master/black-jack

Recursive Triangle

This program prints a right-side up triangle using a recursive approach.

def print_triangle(n):
return create_triangle(n, n)

def create_triangle(x, n):
# Check if input values are integers.
if type(x) != int or type(n) != int:
return 'Error'
# If x is bigger than n, we will still only print the full triangle, so we can set them equal.
if x > n:
x = n
# If either value is zero, the output should be an empty string because there are no lines or triangle to print.
if x == 0 or n == 0:
return ''
# Let's set some variable names to help us out.
stars_count = n
line_number = x
line = ''
# The difference value will determine how many shapes are needed to fill the line before the stars are printed.
difference = stars_count - line_number
# If difference is not zero, we will print that value of spaces before the stars. The star print will be the
# remainder, also known as line number.
if difference != 0:
line += ' '*difference
line += '*'*line_number
# If difference is zero, then we can just fill the line with stars.
line += '*'*stars_count
# If the line number is greater than one, we can return our string and use the recursive call to run the function
# again with the line number as one value less.
if line_number > 1:
return line+'\n'+str(create_triangle(line_number-1, stars_count))
# If the line number is exactly one, then we don't need to use the recursive call.
elif line_number == 1:
return line

Queue Data Structure

This class implements a queue data structure that processes data in first-in, first-out (FIFO) order.


class Queue:
def __init__(self):
self.items = []

def is_empty(self):
return self.items == []

def enqueue(self, item):

def dequeue(self):
return self.items.pop(0)

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

Plain text:

The Queue class is designed to manage data in a FIFO order. It stores the data linearly. Its methods include: is_empty(), enqueue(item), dequeue(), and size().

Rock Paper Scissors Game in Python

This Python project aims to create a fun game that can be played from any computer. The game consists of rock, paper, or scissors, and the players can indicate their move with a single alphabet or an entire string. We will use Tkinter and the random module to implement the game.

Tkinter is a standard GUI library that simplifies creating GUI apps, while the random module generates random numbers. The program requires several functions to work:

– The RANDOM FUNCTION generates rock, paper, or scissors
– The VALID FUNCTION checks the validity of user inputs
– The RESULT FUNCTION declares the winner of each round
– The SCOREKEEPER keeps track of the score in each round

Check out the source code here: https://github.com/pravsterrr/Rock-Paper-Scissors-Python.

Currency Converter Using Python and Tkinter

If you want to build a straightforward GUI application in Python, try creating a currency converter. The program will allow you to convert currencies from one unit to another using real-time exchange rates, such as converting Indian rupee into pounds or euros. It only requires a basic understanding of python programming and the Tkinter library.

To start building the program, install the Tkinter and requests libraries using pip install tkinter and pip install requests in your terminal. Then follow these steps:

1. Get Real-time Exchange Rates: Use https://api.exchangerate-api.com/v4/latest/USD to fetch real-time exchange rates.
2. Import Required Libraries: Import the Tkinter and requests libraries.
3. Create a CurrencyConverter Class: This class should gather real-time exchange rates, convert the currency, and return the converted amount.
4. Add a User Interface: Create a user interface for the currency converter.
5. Create the Main Function: Finally, build the main function.

You can check the source code for this project at https://github.com/MBobyPratama/Currency-Converter-Tkinter.

Quiz Application

The Quiz Application tests users’ understanding of various concepts by presenting questions and recording their responses. The app allows administrators to create tests while regular users can answer the questions and check their understanding.

The application enables users to create tests by uploading a text file with questions and answers. An embedded database stores users’ questions, possible answers, correct answers, and scores.

Check out the source code at https://github.com/santosh2201/quiz-application.

Top 5 Advanced Python Project Ideas

If you’re an experienced developer who wants to create cutting-edge applications, try these Python project ideas:

1. Develop a machine learning model to predict user behavior.
2. Build a web scraping tool to collect data from websites.
3. Create a chatbot with natural language processing capabilities.
4. Design a recommendation engine for e-commerce websites.
5. Develop a stock market analysis tool with real-time data updates.

Content Aggregator

This Python project, built using the Django framework, allows you to aggregate content from various websites in one place with ease. You’ll learn about RSS feeds, creating custom Django management commands, running custom commands on a schedule, and testing Django app functionality through unit tests.

The major steps involved in this project include creating a list of sites from which to collect data, using libraries like HTTP request sender and BeautifulSoup to scrape content, employing Apscheduler for background content management, and storing scraped content in a database.

Check the source code here:


Building a Chatbot

A chatbot is a highly useful software application based on artificial intelligence that interacts with humans using natural language. It is easy to create a chatbot that can efficiently extract information from users/visitors in real-time.

To create a chatbot, it is necessary to import relevant packages, initialize variables, and preprocess text data by partitioning big text datasets into small readable chunks. Pickle files are suitable to store Python objects used to predict the bot’s responses.

Creating training and testing datasets is an essential aspect of the chatbot development process. Refer to the source code for more information.

Face Mask Detection Using Python, Keras, and OpenCV

Due to the ongoing pandemic, face masks have become a necessity. Detecting whether a person is wearing one can be challenging in public places. This Python project aims to solve this problem by automating the face mask detection process.

– Develop a deep-learning model for face mask detection using Python, Keras, and OpenCV.
– Train a face mask detector model to identify people not wearing a mask.
– Use a Keras-based network architecture to train the model.
– Employ OpenCV program to test the model using a webcam.

In this project, we will be dealing with images. It’s essential to know how to handle them correctly. An image consists of red, green, and blue color arrays, ranging from 0 to 255.
Computers perceive images differently from humans, but with an image array, it is easier to implement any algorithm.

– Use Python or your preferred programming language to load the images.
– Convert images to an array and run algorithms.

OpenCV is a library that eases image processing. It enables reading an image and returning a color pixel array.

You can access the project’s source code on GitHub [https://github.com/chandrikadeb7/Face-Mask-Detection].

Plagiarism Checker

As a writer, fearing plagiarism is a nightmare. However, using a plagiarism tool to scan through your work can find an overlap from an existing source posted online. Unfortunately, many plagiarism-checking tools are pricey. Therefore, this Python project allows you to build a plagiarism checker that can scour through any written work.

This project uses TensorFlow, a powerful library for building neural networks, with an input layer, hidden layers, and an output layer. Additionally, we will use the Natural Language Toolkit (NLTK) to prepare the dataset and train the model with our own texts. We must tokenize the root words from the texts, stem the words, and utilize natural language processing.

The input CSV file named IQCode.csv should have only one column, “Text.” Each row of the column must have different texts that are not containing commas or special symbols. It is recommended to use longer texts for higher accuracy.

You will learn how to build a neural network, stem words, tokenize, and use natural language processing.

Check the source code [https://github.com/Kalebu/Plagiarism-checker-Python]:


import tensorflow as tf
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import LancasterStemmer, WordNetLemmatizer
import re

# Remove stopwords
stop_words = set(stopwords.words(‘english’))

# Your API Key

# Stemmer and lemmatizer
stemmer = LancasterStemmer()
lemmatizer = WordNetLemmatizer()

# Read the CSV file
df = pd.read_csv(‘IQCode.csv’)
data = np.array(df[‘Text’])

x_train, x_test = train_test_split(data, test_size=0.1)

def tokenize(sentence):
# Tokenize
words = word_tokenize(sentence.lower())
tokens = []
for word in words:
# Remove unwanted symbols
word = re.sub(r'[^\w\s]’,”,word)
# Stem word
word = stemmer.stem(word)
# Lemmatize word
word = lemmatizer.lemmatize(word)
# Add token to list if not in stop_words
if word not in stop_words:
return tokens

# Define constants
vocab_size = 1000
embed_dim = 16
num_epochs = 20

# Prepare the model
model = tf.keras.Sequential([
tf.keras.layers.Embedding(vocab_size, embed_dim),
tf.keras.layers.Dense(24, activation=’relu’),
tf.keras.layers.Dense(1, activation=’sigmoid’)

# Compile the model
optimizer=’adam’, metrics=[‘accuracy’])

# Setup for model training
history = model.fit(x_train, y_train, epochs=num_epochs,
validation_data=(x_test, y_test), verbose=2)

# Test data prediction
test_pred = model.predict(x_train)


Build a Python Music Player

For music lovers and beginners in the Python programming language, building a music player is a fascinating project. Utilize the Tkinter and Pygame library to create a GUI to play, pause, stop and resume tracks.

The Pygame mixer method, “mixer()”, provides useful functions like loading, playing, pausing, and stopping sound files.

List of functions used:
– “play_song()”: retrieves the active song from a list and plays it when the user clicks “play”.
– “pause_song()”: pauses the song when the user clicks “pause”.
– “resume_song()”: resumes the song when the user clicks “resume”.
– “stop_song()”: stops the song when the user clicks “stop”.

Download the SOURCE CODE from this GitHub link:

Importance of Building Python Projects

Python projects are essential for learners as they provide practical application for their learnings. Here are reasons why:

* Boost Confidence: Building projects boosts the learner’s comfort level with Python, making them more confident in trying out new features. 

* Solidifies Concepts: Project building helps learners write more maintainable code, create better design patterns, integrate OOPs concepts, and avoid repeating themselves in their code. 

* Expands Knowledge: Python projects opens the doors to fields like data science, web development, machine learning, and many others. 

* Product Lifecycle Involvement: By building projects, learners get involved in planning, managing, and updating code. They must consider client requests and ensure all goals are met.

* Community Building: Project building helps learners build their own communities, create open-source projects, and make a name for themselves.

Python’s Suitability for Large Projects

Python is a versatile language that can handle any kind of project, including large-scale ones. To effectively manage large projects, loose coupling and high cohesion are required, with an orthogonal structure to handle sub-projects. Python’s speed is fast enough to handle complex mathematical functions, making it efficient for these kinds of demands.

PyDev, for instance, provides auto-completion and debugging support for Python, with additional features like SVN support.

How to Write a Project in Python

To write a project in Python, you can follow these steps:

* Select a tool like PyCharm.
* Follow the software prompts to create a new project.
* Begin coding your project in the editor.
* Test and debug your code.

Alternatively, you can use the command prompt to write and run Python code.

What Should Be My First Python Project?

If you’re new to Python, start with simple beginner-level projects such as creating a MadLibs Generator, Rock-Paper-Scissors game, or a Website Blocker. Once you gain a good understanding of Python with these projects, you can move on to more advanced projects.

Is Python suitable for large projects?

Python can be used for large projects, but it may not be the best choice for large monolithic projects due to its dynamic typing. It can be difficult to keep track of data types in such projects. Instead, it is recommended to design the system as smaller, more functional components that can be combined together.

# Example of using smaller functional components in Python
def component1(input):
# function code here
return output1

def component2(input):
# function code here
return output2

def main():
input_data = # data input here
output1 = component1(input_data)
output2 = component2(output1)
# final output generated here


Creating Python projects is based on your interests. Identify your areas of interest and search for projects within that domain. Utilize relevant libraries and code structures to develop the projects.


After coding, Python code is converted into bytecode, which can be interpreted using the Python Virtual Machine. To run a Python project, follow these steps:

  1. Open a command prompt by pressing CMD+R (for Windows) and pressing enter.
  2. Navigate to the folder (C:\… ) where the .py file is located.
  3. Type “python filename.py” to execute the code.

Additional Resources

Here are some resources related to Python:

Top 10 Productivity Tools for Programmers

Python Developer Salaries in India for Freshers and Experienced Professionals in 2023 – IQCode

The Ultimate Guide to Full Stack Engineer Salaries in 2023 – IQCode

Essential Data Scientist Skills to Thrive in 2023 – IQCode