1. Quick Start
30 Days Of Python is a structured, 30-day programming challenge that teaches Python from absolute beginner to intermediate level through daily lessons with hands-on exercises. Each day introduces a focused topic — from variables and operators through web scraping, APIs, and data analysis — with annotated code examples and practice problems.
Key features:
- 30 progressive daily lessons covering the full Python fundamentals spectrum
- Hands-on
.pyexample files for every topic with inline comments explaining each line - Practice exercises and challenges at the end of each day
- Sample Flask web application demonstrating Python for web development
- Real-world datasets (CSV, JSON, TXT) for data manipulation exercises
- Available in 7 languages: English, Chinese, Korean, German, Spanish, Persian, Portuguese
- Covers modern Python libraries including NumPy, Pandas, Flask, and MongoDB
Prerequisites: Python 3.6 or higher installed on your system.
Get started in 2 minutes:
git clone https://github.com/Asabeneh/30-Days-Of-Python.git
cd 30-Days-Of-Python
python 01_Day_Introduction/helloworld.py
Hello World!
5
1
6
5
1
6
2.0
3.0
3.5
3
1
3
9
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'set'>
Tip
Start with Day 1 and progress sequentially. Each day builds on the previous day's concepts — skipping days may leave gaps in your understanding.
What to try next:
- Open the Day 1 markdown lesson (
01_Day_Introduction) for the full walkthrough - Move to Day 2 to learn about variables and built-in functions
- Check the
python_for_web/directory for the Flask web application example
2. Installation
System Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| Python | 3.6+ | 3.10+ |
| Git | Any recent version | Latest |
| Disk space | ~50 MB | ~100 MB |
| OS | Windows, macOS, Linux | Any |
Getting the Repository
HTTPS
git clone https://github.com/Asabeneh/30-Days-Of-Python.git
SSH
git clone git@github.com:Asabeneh/30-Days-Of-Python.git
GitHub CLI
gh repo clone Asabeneh/30-Days-Of-Python
Verifying Python Installation
python --version
Python 3.13.0
Important
On some systems, Python 3 is invoked with
python3instead ofpython. Ifpython --versionshows Python 2.x or is not found, trypython3 --version.
Installing Dependencies for the Web Project
The Day 26 Flask web application requires additional packages:
cd python_for_web
pip install -r requirements.txt
| Package | Version | Purpose |
|---|---|---|
Flask |
1.1.1 | Web framework |
Jinja2 |
2.10.3 | Template engine (Flask dependency) |
Werkzeug |
0.16.0 | WSGI utilities (Flask dependency) |
Click |
7.0 | CLI interface (Flask dependency) |
itsdangerous |
1.1.0 | Data signing (Flask dependency) |
MarkupSafe |
1.1.1 | String escaping (Flask dependency) |
Optional Dependencies for Later Days
These packages are covered in the later lessons but are not included in a requirements file. Install them as you reach the relevant day:
| Day | Package | Install Command |
|---|---|---|
| Day 22 (Web Scraping) | beautifulsoup4, requests |
pip install beautifulsoup4 requests |
| Day 24 (Statistics) | numpy |
pip install numpy |
| Day 25 (Pandas) | pandas |
pip install pandas |
| Day 27 (MongoDB) | pymongo |
pip install pymongo |
| Day 28-29 (APIs) | requests, flask |
pip install requests flask |
Warning
The
requirements.txtinpython_for_web/pins older versions of Flask and its dependencies. If you encounter compatibility issues with newer Python versions, consider creating a virtual environment (covered in Day 23) and installing the pinned versions there.
Post-Install Verification
Run the Day 1 example to confirm everything works:
python 01_Day_Introduction/helloworld.py
If you see Hello World! followed by arithmetic results, your setup is complete.
3. Configuration
This project requires no configuration for most lessons. The only configurable setting is in the Flask web application:
| Variable | Type | Default | Description |
|---|---|---|---|
PORT |
Environment variable | 5000 |
Port number for the Flask web server |
To change the port:
export PORT=8080
python python_for_web/app.py
Note
The Flask app runs with
debug=Trueby default. This is appropriate for learning but should never be used in production. See the Admin Guide for deployment considerations.
4. Core Usage
Following the 30-Day Curriculum
The course is organized into 30 daily directories, each containing:
- A markdown lesson (
XX_topic.md) with explanations, diagrams, and examples - A Python script (
day_X.pyor similar) with executable example code - Exercises at the end of each lesson to practice
Daily workflow:
- Read the day's markdown file for concepts and explanations
- Run the corresponding
.pyfile to see examples in action - Complete the exercises at the end of the lesson
- Move to the next day
Curriculum Overview
| Day | Topic | Key Concepts |
|---|---|---|
| 1 | Introduction | Python shell, Hello World, data types, print(), type() |
| 2 | Variables & Built-in Functions | Variable declaration, len(), input(), type casting |
| 3 | Operators | Arithmetic, comparison, logical, assignment, identity, membership |
| 4 | Strings | String creation, formatting, methods (capitalize, split, replace, etc.) |
| 5 | Lists | Creating, accessing, slicing, modifying, sorting lists |
| 6 | Tuples | Immutable sequences, tuple operations |
| 7 | Sets | Set creation, union, intersection, difference |
| 8 | Dictionaries | Key-value pairs, dictionary methods |
| 9 | Conditionals | if, elif, else, nested conditions |
| 10 | Loops | for, while, break, continue, range() |
| 11 | Functions | Defining, parameters, return values, default/arbitrary args |
| 12 | Modules | Importing modules, creating custom modules |
| 13 | List Comprehension | Compact list creation, filtering, lambda |
| 14 | Higher-Order Functions | map(), filter(), reduce(), closures |
| 15 | Type Errors | Common Python type errors and debugging |
| 16 | Date & Time | datetime module, formatting, timedelta |
| 17 | Exception Handling | try, except, finally, custom exceptions |
| 18 | Regular Expressions | re module, patterns, match(), search(), findall() |
| 19 | File Handling | Reading, writing, appending files (txt, json, csv) |
| 20 | Package Manager | pip, creating packages, __init__.py |
| 21 | Classes & Objects | OOP basics, inheritance, methods, polymorphism |
| 22 | Web Scraping | beautifulsoup4, requests, extracting data |
| 23 | Virtual Environment | venv, virtualenv, isolated environments |
| 24 | Statistics | numpy, statistical calculations |
| 25 | Pandas | DataFrames, Series, data manipulation |
| 26 | Python for Web | Flask basics, routes, templates |
| 27 | MongoDB | pymongo, CRUD operations, MongoDB Atlas |
| 28 | APIs | Consuming APIs with requests, JSON handling |
| 29 | Building APIs | Creating REST APIs with Flask |
| 30 | Conclusions | Review and next steps |
Running Code Examples
Each day's Python file can be run directly:
python 03_Day_Operators/day-3.py
Addition: 3
Subtraction: 1
Multiplication: 6
Division: 2.0
Division: 3.0
Division: 3.5
Division without the remainder: 3
Modulus: 1
Division without the remainder: 2
Exponential: 9
Tip
Use the Python interactive shell (
pythonorpython3) to experiment with individual code snippets from the lessons. Copy-paste examples and modify them to deepen understanding.
Working with Custom Modules (Day 12)
The repository includes two example modules that demonstrate Python's import system:
mymodule.py (root directory):
from mymodule import generate_full_name, sum_two_nums, person, gravity
12_Day_Modules/main.py demonstrates importing:
cd 12_Day_Modules
python main.py
Asabneh Yetayeh
10
100
981.0
{'firstname': 'Asabeneh', 'age': 250, 'country': 'Finland', 'city': 'Helsinki'}
Asabeneh
Working with the Package Example (Day 20)
The mypackage/ directory demonstrates creating Python packages with __init__.py:
mypackage/
├── __init__.py
├── arithmetics.py # add_numbers, subtract, multiple, division, remainder, power
└── greet.py # greet_person
from mypackage.arithmetics import add_numbers, subtract, power
from mypackage.greet import greet_person
print(add_numbers(1, 2, 3)) # 6
print(subtract(10, 3)) # 7
print(power(2, 8)) # 256
print(greet_person('John', 'Doe')) # John Doe, welcome to 30DaysOfPython Challenge!
Note
The
20_Day_Python_package_manager/directory contains a similar set of functions (arithmetic.pyandgreet.py) used for the Day 20 lesson. These mirror themypackage/code — both demonstrate the same package creation concepts.
Running the Flask Web Application (Day 26)
cd python_for_web
pip install -r requirements.txt
python app.py
* Serving Flask app "app" (lazy loading)
* Environment: production
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
The application provides these pages:
| Route | Method | Description |
|---|---|---|
/ |
GET | Home page listing web technologies |
/about |
GET | About page |
/post |
GET, POST | Text analyzer input form |
/result |
GET | Analysis result page |
Open http://localhost:5000 in your browser to explore.
Working with the Sample Data Files
The data/ directory contains datasets used in later lessons:
| File | Format | Used In | Content |
|---|---|---|---|
countries_data.json |
JSON | Day 19, 28 | Country information |
cats.json |
JSON | Day 28 | Cat breeds API data |
donald_speech.txt |
TXT | Day 18 | Text for regex exercises |
michelle_obama_speech.txt |
TXT | Day 18 | Text for regex exercises |
romeo_and_juliet.txt |
TXT | Day 19 | Text for file handling |
hacker_news.csv |
CSV | Day 25 | Hacker News posts |
weight-height.csv |
CSV | Day 25 | Anthropometric data for Pandas |
The files/ directory contains smaller examples:
| File | Format | Purpose |
|---|---|---|
csv_example.csv |
CSV | File reading exercise |
json_example.json |
JSON | JSON parsing exercise |
xml_example.xml |
XML | XML parsing exercise |
reading_file_example.txt |
TXT | Basic file I/O |
Using the Course in Other Languages
Translations are available in dedicated directories:
| Language | Directory | Coverage |
|---|---|---|
| Chinese | Chinese/ |
Days 2–30 |
| Korean | Korean/ |
Days 2–5, 7–8, 10 |
| German | German/ |
Days 2–30 |
| Spanish | Spanish/ |
Days 1–30 (with code files) |
| Persian | Persain/ |
Days 2–30 |
| Portuguese | Portuguese/ |
Day 2 |
| Ukrainian | Ukrainian/ |
README only |
Warning
Translation coverage varies significantly. German, Spanish, and Chinese have the most complete translations. Korean and Portuguese cover only a subset of days.
5. Common Tasks
Setting Up a Virtual Environment for the Course
python -m venv venv
Linux/macOS
source venv/bin/activate
Windows
venv\Scripts\activate
Then install any packages you need:
pip install flask beautifulsoup4 requests numpy pandas pymongo
Creating Your Own Module
Following the Day 12 pattern:
- Create a file named
my_math.py:def circle_area(radius): import math return math.pi * radius ** 2 - Import and use it:
from my_math import circle_area print(circle_area(10)) # 314.159...
Creating Your Own Package
Following the Day 20 / mypackage pattern:
- Create a directory with
__init__.py:my_utils/ ├── __init__.py └── helpers.py - Add functions to
helpers.py - Import:
from my_utils.helpers import my_function
Practicing String Methods
The Day 4 example file demonstrates every major string method. Run it and compare output:
python 04_Day_Strings/day_4.py
Key methods covered: capitalize(), count(), endswith(), find(), format(), isalnum(), isalpha(), isdecimal(), isdigit(), isidentifier(), islower(), isupper(), isnumeric(), join(), strip(), replace(), split(), title(), swapcase(), startswith().
Practicing List Operations
Run the Day 5 example file for a comprehensive walkthrough of list operations:
python 05_Day_Lists/day_5.py
Operations demonstrated: creating, indexing, negative indexing, slicing, modifying, membership testing (in), append(), insert(), remove(), del, clear(), copy(), concatenation (+), extend(), count(), index(), reverse(), sort().
Scraping a Web Page (Day 22)
The repository includes a sample scraped dataset (22_Day_Web_scraping/scrapped_data.json). To practice web scraping yourself:
pip install beautifulsoup4 requests
python -c "
from bs4 import BeautifulSoup
import requests
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
print(soup.title.string)
"
Caution
Always check a website's
robots.txtand terms of service before scraping. The Day 22 lesson teaches techniques — use them responsibly.
Connecting to MongoDB (Day 27)
You need a MongoDB instance (local or Atlas). After installing pymongo:
pip install pymongo
Follow the Day 27 lesson (27_Day_Python_with_mongodb/27_python_with_mongodb.md) for MongoDB Atlas setup instructions including screenshots.
Building a REST API (Day 29)
The Day 29 lesson walks through creating a Flask-based REST API. The concepts build on the Day 26 Flask introduction.
6. Troubleshooting
Error: ModuleNotFoundError: No module named 'mymodule'
Cause: Running 12_Day_Modules/main.py from the wrong directory. The mymodule.py file must be accessible from the current directory.
Solution:
- Navigate to the
12_Day_Modules/directory:cd 12_Day_Modules python main.py - Or run from the repo root with the module path:
python -m 12_Day_Modules.main
Prevention: Always cd into the directory containing the script before running it, or ensure mymodule.py is in your Python path.
Error: ModuleNotFoundError: No module named 'flask'
Cause: Flask and its dependencies are not installed.
Solution:
cd python_for_web
pip install -r requirements.txt
Prevention: Create a virtual environment and install dependencies before running the Flask application.
Error: SyntaxError: invalid syntax in Day 1
Cause: Running Python 2 instead of Python 3.
Solution:
python3 01_Day_Introduction/helloworld.py
Prevention: Verify your Python version with python --version — it should show 3.6+.
Error: 404 on Day 22 Ukrainian translation
Cause: Known issue — the Ukrainian Day 2 file has a broken link. (See GitHub issue #769.)
Solution: Use the English version or another available translation.
Content Issues in Exercises
Issue: Several community-reported content errors exist:
- Day 7: Uses "list" where it should say "set" (#823)
- Day 4: Duplicated exercises (#565), incorrect boolean comment in line 159 (#797, #796)
- Day 14: Wrong question text (#808)
- Day 1: Minor code mistake (#807)
Note
These are known upstream issues in the repository. They do not affect the core learning material. Check the GitHub issues page for the latest status and corrections.
Solution: When you encounter a discrepancy, check the lesson's markdown file for the corrected explanation, or consult the GitHub issues.
Flask App: Form Submission Does Not Show Results
Cause: The /post route captures form content but redirects to /result without passing the data. The result.html template renders independently.
Solution: This is a teaching example showing the request/redirect pattern. To make it functional, you would need to pass the analyzed data to the result template (an exercise for the learner).
Package Import Errors with mypackage
Cause: Running from a directory where mypackage/ is not visible.
Solution: Run from the repository root:
python -c "from mypackage.arithmetics import add_numbers; print(add_numbers(1,2,3))"
6
Warning
Python module imports are sensitive to the working directory. Always ensure you are in the correct directory or have configured your
PYTHONPATH.
7. FAQ
Q: Do I need prior programming experience to start this course?
No. Day 1 starts from absolute zero — installing Python and printing "Hello World." The course is designed for complete beginners.
Q: Can I skip days or do them out of order?
The course is designed to be sequential, with each day building on prior concepts. However, if you already know basic Python (Days 1–10), you could start from Day 11 (Functions) or later. Days 22–29 are relatively independent topic explorations.
Q: Which Python version should I use?
Python 3.6 or higher. The code examples use f-strings (introduced in 3.6) and other modern Python features. Python 2 is not supported.
Q: How long does each day actually take?
Each day's material typically takes 1–3 hours depending on the topic complexity and how many exercises you complete. Days 25–29 (Pandas, Flask, MongoDB, APIs) tend to be longer.
Q: Are the translations maintained as actively as the English version?
The Chinese, German, and Spanish translations are the most complete (covering Days 2–30). Korean and Portuguese have partial coverage. Translation updates may lag behind the English version.
Q: Why does the Flask app use such old package versions?
The requirements.txt pins Flask 1.1.1 and its dependencies, which were current when the project was created. These versions work correctly for learning purposes. For production use, upgrade to the latest Flask release.
Q: Can I use this material for teaching or workshops?
Check the repository's license for terms. The project is designed as a self-paced learning challenge but the structured daily format works well for classroom settings.
Q: Where are the exercises?
Exercises are at the end of each day's markdown file (e.g., 04_Day_Strings/04_strings.md). They are not in the .py files — the .py files contain the lesson examples.
Q: What is the old_files/ directory?
It contains earlier versions of the README that have been superseded by the per-day directory structure. You can safely ignore them.
Q: How do I report errors or contribute corrections?
Open an issue on the GitHub repository at https://github.com/Asabeneh/30-Days-Of-Python/issues. Several community members have reported content corrections (see Troubleshooting section).