Once you know variables, conditionals, and functions, building is the fastest way to improve. These 15 Python projects for beginners move from small terminal scripts to portfolio-ready applications.
Do not publish a tutorial copy unchanged. Build a first version, add one feature of your own, and write a README that explains the problem you solved.
15 Python project ideas in order of difficulty
- Terminal calculator
- Number guessing game
- Currency converter
- Password generator
- Quiz game
- To-do list with JSON
- Expense tracker with CSV
- Contact book
- Downloads organizer
- Batch file renamer
- Price monitor
- Data dashboard
- Task API with FastAPI
- Spreadsheet report bot
- Full portfolio application
Starter project: a to-do list with JSON
import json
from pathlib import Path
FILE = Path("tasks.json")
tasks = json.loads(FILE.read_text()) if FILE.exists() else []
title = input("New task: ").strip()
if title:
tasks.append({"title": title, "done": False})
FILE.write_text(json.dumps(tasks, indent=2))
for number, task in enumerate(tasks, start=1):
print(f"{number}. {task['title']}")
Improve it with edit, delete, and complete commands. Then add tests with pytest.
Starter project: a file organizer
from pathlib import Path
downloads = Path.home() / "Downloads"
folders = {".pdf": "PDFs", ".png": "Images", ".jpg": "Images"}
for file in downloads.iterdir():
destination = folders.get(file.suffix.lower())
if file.is_file() and destination:
print(f"Move: {file.name} -> {destination}/")
Start by printing a preview. Only then create folders and move files. Read the pathlib guide before adding file operations.
Starter project: a task API with FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
tasks = []
class Task(BaseModel):
title: str
@app.post("/tasks", status_code=201)
def create_task(task: Task):
item = {"id": len(tasks) + 1, **task.model_dump()}
tasks.append(item)
return item
For a portfolio version, add a database, authentication, tests, and deployment. Continue with our FastAPI tutorial.
Make each project portfolio-ready
- Write a README with the problem, setup steps, and examples.
- Add a screenshot, GIF, or sample output.
- Use a virtual environment and document dependencies.
- Explain one technical decision and one future improvement.
A good 30-day plan is two terminal projects in week one, file or data persistence in week two, one automation in week three, and a polished GitHub repository in week four.
For a guided sequence of exercises and projects, see the Academify Python course. You can also explore five beginner portfolio projects.
Frequently asked questions
Can I put tutorial projects in my portfolio?
Yes, if you explain what you changed and add your own features. A direct copy does not show your technical decisions.
Should I publish incomplete code?
Publish a small working version first. Document its limitations and list the next improvements as issues or tasks.