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

  1. Terminal calculator
  2. Number guessing game
  3. Currency converter
  4. Password generator
  5. Quiz game
  6. To-do list with JSON
  7. Expense tracker with CSV
  8. Contact book
  9. Downloads organizer
  10. Batch file renamer
  11. Price monitor
  12. Data dashboard
  13. Task API with FastAPI
  14. Spreadsheet report bot
  15. 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.