This is a simple step-by-step Python learning hub for complete beginners. You start from zero and slowly become good at coding. We have 7 levels. Each level teaches one important topic with easy practice questions. Practice is the only way to learn coding well – do every question yourself. After the levels, try the 20 fun console projects to use everything you learned.
- Set 1: Variables & Input/Output
- Set 2: Strings
- Set 3: If/Elif/Else - Conditionals
- Set 4: Loops
- Set 5: Lists & Tuples
- Set 6: Sets & Dictionaries
- Set 7: Functions
- Python Projects
Purpose
Learn how to store data in variables, take input from user, and print results. This is the first step of every Python program.
-
Swap Two Numbers
Define two numbers in variable. Swap them without extra variable. Print both after swap.Example: Input `First = 10` and `Second = 20` → Output: `First = 20`, `Second = 10`
-
Swap Two Strings
Take two strings from user. Swap them without extra variable. Print both after swap.Example: Input `First = "Ali"` and `Second = "Alia"` → Output: `First = "Alia"`, `Second = "Ali"`
-
Add Two Numbers
Ask user for two numbers. Add them and print the sum.Example: Input `5` and `8` → Output: `Sum = 13`
-
Area of Rectangle
Ask user for length and width. Calculate area and print it.Example: Input `4` and `6` → Output: `Area = 24`
-
Say Hello to User
Ask user for name. PrintHello [Name]!Example: Input `Ali` → Output: `Hello Ali!`
-
Full Name Greeting
Ask for first name and last name. Join them and print greeting.Example: Input `Alia` and `Mirza` → Output: `Hello, Alia Mirza!`
-
Welcome with Age
Ask for name and age. Print welcome message using f-string.Example: Input `Ali` and `20` → Output: `Welcome, Ali! You are 20 years old.`
Purpose
Learn how to work with words and sentences. Almost every program needs text.
-
String Length Counter
Ask user for a sentence. Print how many characters it has.Example: Input `Hello Pakistan` → Output: `Length: 14`
-
Upper and Lower Case
Ask for a string. Print it in uppercase and lowercase.Example: Input `Python` → Output: `UPPER: PYTHON`, `lower: python`
-
Name Formatting
Ask first and last name. Print normal, uppercase, and title case.Example: Input `lilly`, `collins` → Output: `Normal: lilly collins`, `Title Case: Lilly Collins`
-
Formatted Bill
Ask item name, quantity, price. Print neat bill with total.Example: Input `Apple`, `5`, `50` → Output: `Item: Apple` `Quantity: 5` `Total: Rs.250`
Purpose
Learn how to make your program choose different actions using if/elif/else.
-
Even or Odd
Ask a number. Print Even or Odd.Example: Input `7` → Output: `Odd`
-
Compare Two Numbers
Ask two numbers. Print which is bigger or if equal.Example: Input `10` `5` → Output: `10 is greater`
-
Pass or Fail
Ask marks. Print Pass (≥40) or Fail.Example: Input `35` → Output: `Fail`
-
Count Vowels
Ask for a word. Count vowels (a,e,i,o,u – ignore case).Example: Input `education` → Output: `Number of vowels: 5`
-
Positive, Negative, Zero
Ask a number. Print what it is.Example: Input `-4` → Output: `Negative`
-
Grade System
Ask percentage. Print A (≥80), B (60-79), C (40-59), Fail.Example: Input `85` → Output: `A Grade`
-
Simple Calculator
Ask two numbers and operation (+ - * /). Print result. Show error for divide by zero.Example: Input `10`, `5`, `/` → Output: `Result: 2.0`
Purpose
Learn how to repeat work easily using while and for loops.
-
Print 1 to 10
Use for loop to print numbers 1 to 10. -
Multiplication Table
Ask a number. Print its table (1 to 10).Example: Input `5` → `5 x 1 = 5` ... `5 x 10 = 50`
-
Sum of Numbers
Ask a number n. Print sum from 1 to n.Example: Input `10` → Output: `Sum = 55`
-
Even Numbers 1-20
Print all even numbers from 1 to 20 using loop. -
Countdown
Print numbers from 10 down to 1 using while loop. -
Simple Star Pattern
Print this pattern using loops:* 1 * * 1 2 * * * 1 2 3 * * * * 1 2 3 4 * * * * * 1 2 3 4 5
Purpose
Learn how to store many items in lists (can change) and tuples (cannot change).
-
Create Fruit List
Ask user for 5 fruits. Store in list and print. -
Access List Items
Make list [10,20,30,40,50]. Print first, middle, last. -
Add and Insert Items
Start empty list. Append 3 items. Insert one at position 1. Print final list. -
List Slicing
Make list 1 to 10. Print first 5, last 3, and items 3 to 8. -
Introduction to Tuples
Make tuple of 5 days. Print it and try to change one item (will give error). -
Convert List to Tuple
Ask 4 subjects → store in list → convert to tuple → print both.
Purpose
Learn sets (unique items) and dictionaries (key-value pairs).
-
Create and Add to Set
Make empty set. Add 5 numbers. Print set (duplicates removed). -
Set Operations
Make two sets. Print union and intersection. -
Remove from Set
Make set with 6 items. Remove one and discard one (if not exist). Print after each. -
Student Marks Dictionary
Make dict with 3 student names and marks. Print all. -
Add and Update Dict
Start empty dict. Add 3 key-value pairs. Update one value. -
Word Frequency
Ask a sentence. Make dict to count how many times each word appears.
Why this level?
Learn how to make functions so you can use same code again easily.
-
Add Two Numbers Function
Make function add(a, b) that returns sum. Call it and print. -
Check Even/Odd Function
Make function is_even(num) that returns True or False. Use it. -
Maximum of Three
Make function max_of_three(a,b,c) that returns biggest number. -
Factorial Function
Make function factorial(n) using loop. Return n!. -
Greeting Function
Make function greet(name, age) that prints welcome message. -
Area Calculator Function
Make function area(shape, values) that calculates rectangle or triangle area.
Purpose
Learn the basics of OOP. Create your own classes, objects, and attributes. This is the foundation of modern programming.
-
Create a Simple Class
Define a class named Dog with no attributes or methods. Create an object called my_dog. Print the type of my_dog.Example: print(type(my_dog)) → Output: <class '__main__.Dog'>
-
Add Attributes to Object
Using the same Dog class, create my_dog and add two attributes: name = "Buddy" and age = 5. Print both attributes.Example: print(my_dog.name) and print(my_dog.age) → Output: Buddy 5
-
Multiple Objects
Create two objects of Dog class: dog1 and dog2. Give different name and age to each. Print names of both. -
Class Attribute
Add a class attribute species = "Canine" to Dog class (outside init). Create any object and print dog.species. It should work for all objects. -
Modify Attribute
Create a class Car. Create car1 object. Add color = "Blue". Print color, then change it to "Red" and print again. -
Empty Class with Pass
Create a class Student using pass keyword. Create object, add name and roll_no attributes manually. Print both.
Purpose
Learn how to use init constructor and define methods inside classes. Make your objects more powerful.
-
Constructor with init
Create a class Person with init(self, name, age). Create object p1 and print name and age.Example: p1 = Person("Ali", 25)
print(p1.name) → Output: Ali
-
Method Inside Class
In Person class, add a method greet(self) that prints "Hello, my name is [name]". Call the method on p1. -
Method with Parameters
Add a method birthday(self) in Person that increases age by 1. Call it and print new age. -
Multiple Methods
Create a class Calculator with init and two methods: add(self, a, b) and multiply(self, a, b). Create object and call both. -
String Representation
In Dog class (from previous), add str(self) method that returns "Dog named [name], age [age]". Print the object. -
Bank Account Example
Create class BankAccount with init(self, balance=0), deposit(self, amount) and withdraw(self, amount). Test deposit and withdraw.
Purpose
Learn inheritance, method overriding, and basic polymorphism. Reuse code like a pro.
-
Simple Inheritance
Create class Animal with eat(self) method. Create class Dog(Animal). Create dog object and call eat(). -
Method Overriding
In Dog class, override eat(self) to print "Dog is eating bones". Create dog object and call eat(). -
Using super()
Add init in Animal (name). In Dog use super() to set name. Add bark(self) method. Test both. -
Multiple Child Classes
Create Cat(Animal) and Dog(Animal). Give each their own sound method. Create objects and call sound(). -
Polymorphism Example
Create a function make_sound(animal) that calls animal.sound(). Pass Dog and Cat objects to it. -
Real World Example
Create class Vehicle with move(self). Create Car(Vehicle) and Bike(Vehicle) with different move messages. Test both.
Skills: variables, loops, conditionals, random, input validation, functions.
- V1 (starter): Computer picks 1–100, student guesses, give higher/lower hints, track attempts.
- V2 (required): Add input validation, allow multiple rounds, show best score (fewest attempts).
- Stretch (self-learn): Add difficulty levels (range changes), timer, and persistent high-score file.
Starter hint:import random→secret = random.randint(1,100);loop until guessed.
Quick tests: guess correctly in N attempts; invalid input doesn't crash.
Skills: functions, exception handling, parsing strings, loops.
- V1: Support
+ - * /for two numbers via input prompts. - V2: Support chaining operations, handle divide-by-zero and bad input.
- Stretch: implement expression parsing (e.g., "3 + 4 * 2") or REPL mode.
Starter hint: separateparse_input(),compute(a, op, b)functions. Use try/except.
Quick tests: 3/0 handled gracefully; "abc" prompts again.
Skills: lists, file I/O (text or JSON), CRUD operations, functions.
- V1: add/view/remove tasks stored in memory.
- V2: save/load tasks to a JSON/text file so tasks survive program restart.
- Stretch: search/filter tasks, mark priority, and sort by date added.
Starter hint: use json module: write tasks (list of dicts) to disk.
Quick tests: add task → saved file contains task; restart program → tasks loaded.
Skills: dictionaries, lists, file I/O, simple validation, search.
- V1: basic add/view/search by name (in-memory).
- V2: persist using CSV/JSON; update/delete contact.
- Stretch: export/import VCF, or search fuzzy matches.
Starter hint: store each contact as{ "name":..., "phone":..., "email":... }and use list comprehension for search.
Quick tests: add → find by name; remove → no longer found; file persists.
Skills: strings, concatenation, user input, functions, lists.
- V1: ask for a few words and print the story.
- V2: support multiple story templates chosen by user.
- Stretch: read templates from files, randomize templates, or add grammar checks.
Starter hint: use placeholders like {noun} and .format(**answers).
Quick tests: given inputs, output contains those words in expected places.
Skills: random, loops, counters, basic plotting (optional), statistics.
- V1: Simulate rolling N dice and show outcomes counts.
- V2: Run many trials, show empirical probabilities and compare to expected.
- Stretch: Display histogram (matplotlib optional) and let user choose dice types.
Starter hint: Collections.Counter is handy for counts.
Quick tests: 6-sided die → approx 1/6 frequency in many trials (students can see convergence).
Skills: lists/dicts, file I/O (CSV/JSON), aggregation, date handling (optional).
- V1: Add expense (amount + category) and show total per run.
- v2: Persist to CSV, show totals per category and monthly totals.
- Stretch: Import bank CSV, filter by date ranges.
Starter hint: Represent each record as {"amount":float, "cat":str, "date": "YYYY-MM-DD"}; use csv or json.
Quick tests: Add entries → category totals correct.
Skills: JSON, loops, input validation, scoring, functions.
- V1: Ask 5 questions from an in-memory list; compute score.
- V2: Load questions from JSON, randomize order, show correct answers at end.
- Stretch: Timed questions, multiple users, and persistent user scores.
Starter hint: JSON schema: {"q":"...", "options":["a","b"], "answer":0}.
Quick tests: Scoring matches expected answers; JSON loads properly.
Skills: loops, conditionals, modulo arithmetic, nested loops for patterns.
- V1: Classic FizzBuzz (print 1..N with rules).
- V2: Extend rules (e.g., multiple keyword mapping), and write unit tests.
- Stretch: Generate ASCII shapes (pyramids) and analyze complexity (O(n), O(n^2)).
Starter hint: Use modular checks in order (if i % 15 == 0 before %3/%5).
Quick tests: Known sequences for first 20 values.
Skills: file I/O, string processing, dicts, sorting.
- V1: Read a text file and output top-10 words.
- V2: Ignore stopwords/punctuation, case-insensitive, show counts.
- Stretch: Build concordance or show sentence locations for top words.
Starter hint: Normalize text (.lower()), remove punctuation (str.translate) and use Counter.
Quick tests: For short sample file, expected top words & counts.
Skills: functions, state management, optional classes, input validation.
- V1: Simulate deposit/withdrawal and show balance (functional style).
- V2: Add transaction history (list) and persist to JSON.
- Stretch: Convert to Account class, support multiple accounts and transfers.
Starter hint: Start with procedural approach before introducing class Account: as a stretch.
Quick tests: Deposits and withdrawals update balance; cannot withdraw over balance.
Skills: inheritance, polymorphism, methods, math module.
- V1: Circle and Rectangle classes, each with calculate_area() method.
- V2: Base Shape class + list of shapes; loop to show and sum all areas.
- Stretch: Add Triangle class; menu to add any shape and display total area.
Starter hint: Override calculate_area() in each child class. Store shapes in a list and use polymorphism.
Quick tests: Circle (πr²), Rectangle (length×width), Triangle (0.5×base×height) calculate correctly.
Skills: classes, inheritance, polymorphism, dictionaries.
- V1: Employee base class with name, base_salary and get_info() method.
- V2: Manager and Developer classes inherit and override get_salary() (add bonus).
- Stretch: Company class to manage list of employees, calculate total payroll and display all.
Starter hint: Use super().init() in child classes. Override get_salary() for different types.
Quick tests: Different employee types show correct salary; total payroll sums all employees correctly.
Skills: classes, inheritance, polymorphism, lists, JSON.
- V1: Animal base class with name, species and make_sound() method. Create Lion and Elephant subclasses overriding the sound.
- V2: Zoo class to add animals, display all and call sounds using polymorphism.
- Stretch: Add feed() method (different food per animal type) and save entire zoo to JSON.
Starter hint: Use super().init() in child classes. Keep animals in a list and loop to demonstrate polymorphism.
Quick tests: Each animal makes its correct sound; Zoo can list and feed all animals without errors.
Skills: classes, composition, polymorphism, input validation.
- V1: Pizza base class with size, toppings list and calculate_price() method.
- V2: Order class (composition) to hold multiple pizzas, show cart and total price.
- Stretch: VegPizza and NonVegPizza subclasses with extra charges; full menu + save order to JSON.
Starter hint: Order class should have a list of Pizza objects. Override calculate_price() in subclasses for extra cost.
Quick tests: Total price updates correctly with different pizza types; cannot add pizza without size or toppings.
Skills: models, templates, forms, authentication, static/media files, admin customization.
- V1: Static-like homepage with About, Skills, Projects sections (projects from database).
- V2: Add Blog app (Post model with categories/tags), contact form that sends email, visitor counter.
- Stretch: Dark/light mode toggle, project detail page with screenshots/gallery, admin dashboard stats (views, messages).
Starter hint: Use one custom User model or extend AbstractUser. Store projects & posts in separate models.
Quick tests: Contact form sends real email; projects and blog posts display correctly; responsive design looks good on mobile.
Skills: models, forms, email, authentication, date fields, permissions.
- V1: Event model (title, date, venue, capacity) + list/detail views + simple registration form.
- V2: User login required to register, track "My Registrations", show remaining spots.
- Stretch: Waitlist when full, QR code generation for tickets, organizer dashboard, email reminders.
Starter hint: Use DateTimeField + custom clean() in form to check capacity. Send email on successful registration.
Quick tests: Spots decrease on registration; cannot register when full; user sees only their events.
Skills: models, forms, authentication, pagination, filtering, file upload.
- V1: Job model (title, company, description, salary range) + list/detail + search by keyword.
- V2: Employer role can post jobs, candidate role can apply with profile + resume upload.
- Stretch: Advanced filters (location, experience, job type), application status tracking, email notifications.
Starter hint: Use groups or custom user profile model to separate Employer/Candidate. Use FileField for resumes.
Quick tests: Only employers post jobs; candidates see application history; filters narrow results accurately.
Skills: models, ManyToMany, forms, authentication, ratings, image upload.
- V1: Book model (title, author, cover image, genre) + list/detail + simple review form.
- V2: User can add books to "Reading List" / "Read" / "Wishlist", rate & review books (1–5 stars).
- Stretch: Average rating display, recommendation engine (based on genre/ratings), progress tracker (pages read).
Starter hint: Use ManyToManyField for user-book relationships with through model for status & rating.
Quick tests: Ratings update average correctly; user sees personalized lists; cover images load properly.
Skills: models, forms, authentication, file upload, search, messages/notifications.
- V1: Service/Gig model (title, description, price, category) posted by freelancers + browse/list view.
- V2: Clients can place orders (with requirements file upload), freelancers see their orders.
- Stretch: Review/rating system after completion, messaging between client & freelancer, categories + search/filter.
Starter hint: Separate Freelancer and Client profiles. Use Order model with ForeignKeys to Gig and User.
Quick tests: Orders link correct gig & user; only logged-in users can order/message; ratings visible on profile/gig.
