Python basic to advance
43 subscribers
131 photos
98 links
Learn Python daily with bite-sized lessons, code examples, output previews, and fun quizzes. Perfect for beginners and enthusiasts!
Download Telegram
Day 6: Functions in Python \- Code & Output
What keyword is used to define a function in Python?
Anonymous Quiz
0%
func
0%
define
0%
def
0%
function
Hey Python learners! 🚀 Welcome to Day 7! Today, we're diving into two super important data structures: **Lists** and **Tuples**! 📚 Both allow you to store collections of items, but they have key differences in how you can modify them. Get ready to organize your data like a pro! 📋 Let's explore!

```python
# Day 7: Lists and Tuples - Organizing Your Data!

# --- Lists: Ordered, Mutable Collections (use square brackets []) ---
my_shopping_list = ["Milk", "Bread", "Eggs"]
print(f"Original List: {my_shopping_list}")

# Lists can be changed:
my_shopping_list.append("Butter") # Add an item
print(f"After adding Butter: {my_shopping_list}")

my_shopping_list[1] = "Cereal" # Change an item
print(f"After changing Bread to Cereal: {my_shopping_list}")

# Accessing elements by index
print(f"First item: {my_shopping_list[0]}")
print(f"Last item: {my_shopping_list[-1]}")

# --- Tuples: Ordered, Immutable Collections (use parentheses ()) ---
# Tuples are often used for fixed collections, like coordinates or RGB colors.
my_coordinates = (10.5, 20.3)
my_rgb_color = (255, 0, 0) # Red color

print(f"nOriginal Tuple (Coordinates): {my_coordinates}")
print(f"Original Tuple (RGB Color): {my_rgb_color}")

# Tuples cannot be changed after creation.
# If you uncomment the line below, it will cause a TypeError!
# my_coordinates[0] = 12.0 # This would raise an error!

# You can still access elements by index:
print(f"X-coordinate: {my_coordinates[0]}")

# Both Lists and Tuples support slicing!
print(f"Sliced List (first two items): {my_shopping_list[0:2]}")
print(f"Sliced Tuple (first two items): {my_rgb_color[0:2]}")
```

Output example:
```
Original List: ['Milk', 'Bread', 'Eggs']
After adding Butter: ['Milk', 'Bread', 'Eggs', 'Butter']
After changing Bread to Cereal: ['Milk', 'Cereal', 'Eggs', 'Butter']
First item: Milk
Last item: Butter

Original Tuple (Coordinates): (10.5, 20.3)
Original Tuple (RGB Color): (255, 0, 0)
X-coordinate: 10.5
Sliced List (first two items): ['Milk', 'Cereal']
Sliced Tuple (first two items): (255, 0)
```

**Challenge!** 🧠
Can you create a Python list of your 3 favorite fruits, then change the second fruit to something else, and finally convert that list into a tuple? Share your code snippet!

---
Day 7: Lists and Tuples \- Code & Output
Which of the following Python data structures is *mutable* (meaning its elements can be changed after creation)?
Anonymous Quiz
0%
List
0%
Tuple
0%
String
0%
Boolean
Here's your Telegram post and quiz question!

---

🎉 **Day 8: Dictionaries and Sets!** 🎉

Hello, Python learners! 👋 Today, we're diving into two incredibly versatile data structures: Dictionaries and Sets! 📚

* **Dictionaries** store data in `key: value` pairs, perfect for retrieving specific information quickly, much like looking up a word in a physical dictionary. 🔑
* **Sets** are unordered collections of *unique* items. They're super useful for keeping track of distinct elements and performing mathematical set operations like union or intersection. 💡

Let's explore how to use them! 👇

```python
# --- Dictionaries ---
print("--- Dictionaries ---")
# Creating a dictionary for a student's profile
student_profile = {
"name": "Alex",
"age": 22,
"major": "Computer Science",
"courses": ["Python Basics", "Web Development"]
}

print(f"Student Name: {student_profile['name']}")
print(f"Student Age (using .get()): {student_profile.get('age', 'N/A')}") # Safe access

# Modifying an existing value
student_profile["age"] = 23
# Adding a new key-value pair
student_profile["gpa"] = 3.9

print("nUpdated Student Profile:")
for key, value in student_profile.items():
print(f"- {key}: {value}")

# --- Sets ---
print("n--- Sets ---")
# Creating a set from a list with duplicates
numbers_list = [10, 20, 20, 30, 40, 40, 10, 50]
unique_numbers = set(numbers_list)
print(f"Original list: {numbers_list}")
print(f"Unique numbers (set): {unique_numbers}") # Order is not guaranteed

# Adding an element to a set
unique_numbers.add(60)
unique_numbers.add(20) # Adding an existing element has no effect
print(f"Set after adding 60: {unique_numbers}")

# Set operations
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}

print(f"nSet A: {set_a}")
print(f"Set B: {set_b}")
print(f"Union (A | B): {set_a.union(set_b)}") # All unique elements from both
print(f"Intersection (A & B): {set_a.intersection(set_b)}") # Common elements
print(f"Difference (A - B): {set_a.difference(set_b)}") # Elements in A but not in B
```

Output example:
```
--- Dictionaries ---
Student Name: Alex
Student Age (using .get()): 23

Updated Student Profile:
- name: Alex
- age: 23
- major: Computer Science
- courses: ['Python Basics', 'Web Development']
- gpa: 3.9

--- Sets ---
Original list: [10, 20, 20, 30, 40, 40, 10, 50]
Unique numbers (set): {50, 20, 40, 10, 30}
Set after adding 60: {50, 20, 40, 10, 60, 30}

Set A: {1, 2, 3, 4, 5}
Set B: {4, 5, 6, 7, 8}
Union (A | B): {1, 2, 3, 4, 5, 6, 7, 8}
Intersection (A & B): {4, 5}
Difference (A - B): {1, 2, 3}
```

**Small challenge:** 🧠
Your turn! Create a dictionary called `book_details` for your favorite book, including its `title`, `author`, and `year`. Then, create a set called `unique_genres` with a few genres and add a new genre to it! Share your code snippets in the comments! 👇

---
Day 8: Dictionaries and Sets \- Code & Output
Here's your Telegram post and quiz for Day 9: String Manipulation!

---

✨ **Day 9: String Manipulation!** ✨

Strings are fundamental in Python – they're how we handle all kinds of text data! From simple messages to complex parsing, mastering string manipulation is a crucial skill. Today, we'll dive into some powerful ways to play with text: slicing, changing cases, replacing parts, and more. Get ready to transform your text like a pro! 🚀

```python
# Our main string
message = " Python is Fun and Powerful! "

print(f"Original: '{message}'")
print(f"Length: {len(message)}")

# Stripping whitespace
stripped_message = message.strip()
print(f"Stripped: '{stripped_message}'")

# Uppercase and Lowercase
print(f"Uppercase: '{stripped_message.upper()}'")
print(f"Lowercase: '{stripped_message.lower()}'")

# Slicing
# [start:end] (end is exclusive)
print(f"First 6 chars (slice): '{stripped_message[0:6]}'")
# [start:] (from start to end)
print(f"Word 'Fun' (slice): '{stripped_message[12:15]}'")
# [:-n] (all but the last n chars)
print(f"Last 9 chars (slice): '{stripped_message[-9:]}'")

# Replacing text
new_message = stripped_message.replace("Fun", "Awesome")
print(f"Replaced: '{new_message}'")

# Combining concepts (f-string with methods)
version = 3.10
final_output = f"Python {version} is truly {new_message.lower().split(' and ')[0]}!"
print(f"Combined F-string: '{final_output}'")
```

Output example:
```
Original: ' Python is Fun and Powerful! '
Length: 32
Stripped: 'Python is Fun and Powerful!'
Uppercase: 'PYTHON IS FUN AND POWERFUL!'
Lowercase: 'python is fun and powerful!'
First 6 chars (slice): 'Python'
Word 'Fun' (slice): 'Fun'
Last 9 chars (slice): 'Powerful!'
Replaced: 'Python is Awesome and Powerful!'
Combined F-string: 'python 3.10 is truly awesome!'
```

💪 **Challenge Time!**
Given the string `quote = "Never give up!"`.
1. Use string slicing to extract the word 'give'.
2. Print 'give' in uppercase.
3. Count how many times the letter 'e' appears in the original `quote` string.
Share your solutions below! 👇

---
Day 9: String Manipulation \- Code & Output
What will be the output of the following Python code?
```python
text = "Hello, World!" new_text = text.replace("World", "Python").replace("!", "!!!") print(new_text) ```
Anonymous Quiz
0%
Hello, Python!
0%
Hello, Python!!!
0%
Hello, World!!!
0%
Hello, Python
🎉 *Day 10: Unlocking File I/O in Python!* 📂

Ever wondered how to save data beyond your program's runtime? Today, we're diving into **File Input/Output (I/O)**! You'll learn to read from, write to, and append data in files using Python. It's crucial for logging, data persistence, and so much more. We'll use the `open()` function and the super handy `with` statement for safe file handling. Get ready to make your programs remember! ✍️

```python
import os

# Define file name
file_name = 'my_notes.txt'

# --- Writing to a file (will create if not exists, overwrite if exists) ---
print("--- Writing to 'my_notes.txt' ---")
with open(file_name, 'w') as file:
file.write("Python File I/O is fun!n")
file.write("This is the first line written.n")
file.write("And this is the second line written.n")
print("Content written successfully.n")

# --- Appending to a file (will add to the end) ---
print("--- Appending to 'my_notes.txt' ---")
with open(file_name, 'a') as file:
file.write("Appending new content here.n")
file.write("Don't forget the newline character for new lines!n")
print("Content appended successfully.n")

# --- Reading from a file (reads entire content) ---
print("--- Reading 'my_notes.txt' (Full Content) ---")
with open(file_name, 'r') as file:
full_content = file.read() # Reads the entire file as a single string
print("nFull Content:n", full_content)

# --- Reading from a file line by line ---
print("--- Reading 'my_notes.txt' (Line by Line) ---")
with open(file_name, 'r') as file:
print("nContent Line by Line:")
for line in file: # Iterates over lines in the file
print(f"Line: {line.strip()}") # .strip() removes trailing newline characters

# Optional: Clean up the created file
# os.remove(file_name)
# print(f"n'{file_name}' has been removed.")
```

Output example:
```
--- Writing to 'my_notes.txt' ---
Content written successfully.

--- Appending to 'my_notes.txt' ---
Content appended successfully.

--- Reading 'my_notes.txt' (Full Content) ---

Full Content:
Python File I/O is fun!
This is the first line written.
And this is the second line written.
Appending new content here.
Don't forget the newline character for new lines!

--- Reading 'my_notes.txt' (Line by Line) ---

Content Line by Line:
Line: Python File I/O is fun!
Line: This is the first line written.
Line: And this is the second line written.
Line: Appending new content here.
Line: Don't forget the newline character for new lines!
```

💡 **Small Challenge:**
Modify the reading part of the code to:
1. Read only the **first 3 lines** of `my_notes.txt` using `readlines()`.
2. Count how many lines in the file contain the word "line" (case-insensitive).

Share your solutions or questions below! 👇

---
🎉 Day 11: Error Handling (try, except) 🎉

Ever had your Python script crash unexpectedly? 💥 It's frustrating, right? Today, we're diving into *Error Handling* using `try` and `except` blocks! 🛡️

These powerful tools allow your programs to gracefully manage errors and exceptions, preventing crashes and providing a smoother user experience. Instead of stopping dead, your code can catch the error and respond intelligently. Let's make our code more robust! 💪

```python
print("--- Day 11: Error Handling (try, except) ---")

def safely_get_integer_input():
try:
# Code that might raise an error goes here
user_input = input("Please enter an integer: ")
number = int(user_input) # This might raise a ValueError
print(f"Successfully processed: {number} 🎉")
except ValueError:
# This block executes ONLY if a ValueError occurs in the 'try' block
print("Oops! That's not a valid integer. Please try again. 🤔")
except Exception as e: # A general catch-all for other unexpected errors
# This block catches any other type of error not specifically handled
print(f"An unexpected error occurred: {e} 🐛")
finally:
# The 'finally' block always executes, regardless of whether an error occurred
print("Execution of the input block finished.")

# Example 1: Successful run
print("n--- Scenario 1: Valid Input ---")
safely_get_integer_input()

# Example 2: Error run
print("n--- Scenario 2: Invalid Input ---")
safely_get_integer_input()

# A quick look at another common error type: ZeroDivisionError
print("n--- Quick Example: Division ---")
try:
result = 10 / 0 # This will raise a ZeroDivisionError
print(result)
except ZeroDivisionError:
print("Error: You tried to divide by zero! 🚫")
except Exception as e:
print(f"An unexpected error in division: {e} 😬")
```

Output example:
```
--- Day 11: Error Handling (try, except) ---

--- Scenario 1: Valid Input ---
Please enter an integer: 42
Successfully processed: 42 🎉
Execution of the input block finished.

--- Scenario 2: Invalid Input ---
Please enter an integer: hello_world
Oops! That's not a valid integer. Please try again. 🤔
Execution of the input block finished.

--- Quick Example: Division ---
Error: You tried to divide by zero! 🚫
```

### Small Challenge:
Your Challenge: Modify the `safely_get_integer_input` function to keep asking for input until a valid integer is provided. (Hint: Think about loops! 😉) Share your solution!

---
Day 11: Error Handling \(try, except\) \- Code & Output
🚀 **Day 12: Unlocking the Power of Python Modules & Packages!** 📦

Hello, Python learners! Today, we're diving into an essential concept that elevates your code from simple scripts to well-organized, reusable projects: **Modules and Packages**.

Think of modules as individual Python files (`.py`) containing functions, classes, and variables. They help you break down large programs into smaller, manageable pieces. Packages take this a step further, allowing you to group related modules into directories, making your project structure clean and scalable. Get ready to write more efficient and maintainable code! ✨

---

**Example Code:**

First, create a file named `my_utility.py`:
```python
# my_utility.py
def say_hello(name):
return f"Hello, {name} from my_utility!"

APP_VERSION = "1.0.0"
```

Now, create your main application file, `main_app.py`:
```python
# main_app.py
import math # Importing a built-in module
import my_utility # Importing our custom module

from my_utility import say_hello as greeting_func # Importing a specific item with an alias

print(f"Using math.pi: {math.pi}")
print(f"Accessing my_utility.APP_VERSION: {my_utility.APP_VERSION}")
print(my_utility.say_hello("Alice")) # Using the function via module name
print(greeting_func("Bob")) # Using the aliased function

print("n--- Understanding Packages ---")
print("Packages are directories containing modules and an '__init__.py' file (even if empty).")
print("They allow for hierarchical organization, e.g., 'from my_package.sub_module import func'.")
print("The '__init__.py' file signals that the directory should be treated as a Python package.")
```

---

**Output example:**
```
Using math.pi: 3.141592653589793
Accessing my_utility.APP_VERSION: 1.0.0
Hello, Alice from my_utility!
Hello, Bob from my_utility!

--- Understanding Packages ---
Packages are directories containing modules and an '__init__.py' file (even if empty).
They allow for hierarchical organization, e.g., 'from my_package.sub_module import func'.
The '__init__.py' file signals that the directory should be treated as a Python package.
```

---

💡 **Small Challenge:**
1. Create a new file named `calculations.py`.
2. Inside `calculations.py`, define a function `add(a, b)` that returns the sum of `a` and `b`.
3. Modify your `main_app.py` to import `add` from `calculations.py` and use it to print the sum of 10 and 20.
4. Can you explain *why* `__init__.py` is important for a directory to be considered a package?

---

**Quiz Question:**
Day 12: Modules and Packages \- Code & Output
Here's your Telegram post for Day 13 of the Python learning series!

---

**Welcome to Day 13 of our Python learning journey! 🐍**

Today, we're diving into one of the most powerful and fundamental concepts: Object-Oriented Programming (OOP) with Classes and Objects! ✨ OOP allows us to structure our code by bundling data (attributes) and functions (methods) into reusable blueprints called 'classes'. Think of a class as a cookie cutter 🍪 and an object as the actual cookie. It helps model real-world entities and build robust, scalable applications. Let's create our first class! 🏗️

```python
# Define a Class named 'Dog'
class Dog:
# The __init__ method is a special method called when a new object is created.
# 'self' refers to the instance of the class being created.
def __init__(self, name, breed):
self.name = name # Assign 'name' to the object's attribute
self.breed = breed # Assign 'breed' to the object's attribute
print(f"A new dog, {self.name} the {self.breed}, has been created!")

# Define a method (a function associated with the class)
def bark(self):
return f"{self.name} says Woof! Woof!"

def describe(self):
return f"{self.name} is a friendly {self.breed}."

# Create objects (instances) of the Dog class
my_dog = Dog("Buddy", "Golden Retriever")
your_dog = Dog("Lucy", "Labrador")

# Access attributes of the objects
print(f"nMy dog's name is {my_dog.name} and breed is {my_dog.breed}.")
print(f"Your dog's name is {your_dog.name}.")

# Call methods on the objects
print(my_dog.bark())
print(your_dog.describe())
```

**Output example:**
```
A new dog, Buddy the Golden Retriever, has been created!
A new dog, Lucy the Labrador, has been created!

My dog's name is Buddy and breed is Golden Retriever.
Your dog's name is Lucy.
Buddy says Woof! Woof!
Lucy is a friendly Labrador.
```

**Small challenge: 💪**
Modify the `Dog` class:
1. Add a new attribute `age` to the `__init__` method.
2. Add a new method `celebrate_birthday` that increments the dog's `age` and prints a happy message! 🎉

---