Skip to main content

Python

Welcome to Python

Python is a versatile, high-level programming language known for its readability and broad community support. Developed in the early 1990s, it emphasizes clear, concise syntax, making it an excellent choice for beginners and professionals alike. Python's extensive standard library and thriving ecosystem of third-party packages allow it to be used in many fields—from web development and data analysis to artificial intelligence and scientific computing. Its ease of learning, coupled with powerful capabilities, makes Python a valuable skill for anyone looking to dive into programming or advance their tech career.

Introduction to Python

How to install Python and write your first "Hello, World!" program.

Python is one of the most popular programming languages due to its simplicity and versatility. Whether you're a beginner or an experienced coder, installing Python and running your first script is a straightforward process.

Step 1: Download and Install Python

  1. Visit the Official Website
    Go to Python.org and download the latest stable version of Python for your operating system (Windows, macOS, or Linux).

  2. Run the Installer

    • For Windows: Double-click the downloaded .exe file and check "Add Python to PATH" before clicking "Install Now".

    • For Mac: Download the macOS installer and follow the setup instructions.

    • For Linux: Use the package manager (e.g., for Ubuntu).

      sudo apt install python3
  3. Verify the Installation
    Open a terminal or command prompt and type:

  4. python --version
    

    or

    python3 --version
    

    This should display the installed Python version.

Step 2: Choose an IDE or Code Editor

Python comes with IDLE, a built-in Integrated Development Environment (IDE), which is great for beginners. However, more advanced users often prefer editors like:

  • VS Code – Lightweight and powerful, with Python extensions.

  • PyCharm – Feature-rich IDE for professional developers.

  • Jupyter Notebook – Best for data science and interactive coding.

For beginners, launching IDLE (installed with Python) is the simplest way to start coding.

Step 3: Write and Run Your First Python Script

  1. Using IDLE:

    • Open IDLE.

    • Click File → New File.

    • Type the following code:

      print("Hello, World!")
      
    • Save the file with a .py extension (e.g., hello.py).

    • Run it by selecting Run → Run Module or pressing F5.

  2. Using Command Line:

    • Open a terminal or command prompt.

    • Navigate to the folder where you saved hello.py.

    • Run the script by typing:

    • python hello.py
      
    • You should see the output:

    • Hello, World!
      

Congratulations! You have successfully installed Python and run your first script. 🎉

For more details, visit the official Python documentation at docs.python.org. Happy coding! 🚀

Syntax of python

1. Python Indentation (No Braces for Blocks)

Python uses indentation (whitespace) to define blocks of code instead of curly braces {} like in other languages. This makes Python code more readable but also means incorrect indentation will cause errors.

Correct Example:

if 5 > 3:
    print("Five is greater than three")  # Proper indentation

Incorrect Example (Raises IndentationError):

if 5 > 3:
print("This will cause an error!")  # No indentation

Python enforces indentation for better code structure and readability. The recommended indentation is 4 spaces per level.

2. Zero-Based Indexing

Python follows zero-based indexing, meaning the first element of a sequence (like a list, string, or tuple) starts at index 0, not 1.

Example:

fruits = ["apple", "banana", "cherry"]
print(fruits[0])  # Outputs: apple
print(fruits[2])  # Outputs: cherry

Incorrect Example (IndexError):

print(fruits[3])  # IndexError: list index out of range

Since Python starts counting from 0, attempting to access an index that is equal to or greater than the length of the sequence results in an error.

3. Comments in Python

Comments help developers understand code by adding explanations. Python supports both single-line and multi-line comments.

Single-Line Comment:

# This is a single-line comment
print("Hello, World!")  # Inline comment

Multi-Line Comment:

"""
This is a multi-line comment.
It is often used for documentation.
"""
print("Hello, World!")

Although triple quotes can be used for multi-line comments, they are mainly meant for docstrings, which are special comments placed inside functions for documentation.

4. Case Sensitivity

Python is case-sensitive, meaning it treats uppercase and lowercase letters differently. Variable names, function names, and keywords must be used consistently.

Example:

myVar = 5
MyVar = 10

print(myVar)  # Outputs: 5
print(MyVar)  # Outputs: 10 (different variable)

Here, myVar and MyVar are considered two different variables because of their capitalization.

Incorrect Example:

Print("Hello")  # NameError: name 'Print' is not defined

Python’s built-in functions like print() must be written in lowercase.

5. Variables and Dynamic Typing

Python is dynamically typed, meaning you don’t need to declare the type of a variable explicitly. The type is determined automatically based on the assigned value.

Example:

x = 10       # Integer
y = 3.14     # Float
z = "Hello"  # String

print(type(x))  # Outputs: <class 'int'>
print(type(y))  # Outputs: <class 'float'>
print(type(z))  # Outputs: <class 'str'>

Reassigning Different Data Types:

a = 5        # Initially an integer
a = "Python" # Now reassigned as a string
print(a)     # Outputs: Python

Since Python allows dynamic typing, a variable’s type can change during execution.

Conclusion

Understanding Python’s basic syntax is essential for writing clean and efficient code. Key takeaways include:

  • Python enforces indentation instead of curly braces for code blocks.

  • Zero-based indexing means the first element in a sequence is at index 0.

  • Comments improve code readability and can be single-line (#) or multi-line (""" """).

  • Python is case-sensitive, so Var and var are treated as different variables.

  • Python supports dynamic typing, allowing variables to change types.

Mastering these basics will provide a strong foundation for learning more advanced Python concepts. Happy coding! 🚀

print

The print() function in Python is used to display output on the screen. It is one of the most commonly used functions, especially for debugging and user interaction. In this short guide, we’ll explore different ways to use print() effectively, including how to print multiple values, format output, and control separators and end characters.


1. Basic print() Usage

The simplest way to use print() is to pass a string or a number inside the parentheses:

print("Hello, World!")  # Outputs: Hello, World!
print(42)               # Outputs: 42

You can print multiple values by separating them with a comma ,:

print("Hello", "Python")  # Outputs: Hello Python

By default, Python inserts a space between the values.

2. Using the sep Parameter

The sep parameter controls the separator between multiple values in print(). By default, it is a space, but you can change it to anything else:

print("apple", "banana", "cherry", sep=", ")  
# Outputs: apple, banana, cherry
print("Python", "is", "fun", sep="-")  
# Outputs: Python-is-fun

3. Using the end Parameter

By default, print() adds a newline (\n) at the end of the output. You can change this behavior using the end parameter:

print("Hello", end=" ")
print("World!")  
# Outputs: Hello World! (on the same line)

Here, end=" " replaces the default newline with a space.

4. Printing Variables

You can print variables just like string literals:

name = "Alice"
age = 25
print("Name:", name, "Age:", age)  
# Outputs: Name: Alice Age: 25

Alternatively, you can use f-strings for a cleaner output:

print(f"Name: {name}, Age: {age}")  
# Outputs: Name: Alice, Age: 25

5. Printing Special Characters

Use escape sequences to format the output:

print("Hello\nWorld!")  # \n adds a new line
print("This is a tab:\tPython")  # \t adds a tab space

Conclusion

The print() function is a powerful tool in Python that allows you to display output in various ways. Key takeaways:

  • Use print(value1, value2, …) to print multiple values.

  • Change the separator using sep="custom_separator".

  • Control line endings with end="custom_end".

  • Use f-strings for better formatting.

Mastering print() will make debugging and output handling in Python much easier.

ex

Integers

Integers are whole numbers, either positive, negative, or zero. They are one of Python's basic numeric types and are used for mathematical operations.


1. Creating Integers

Integers can be created by assigning integer values to variables:

a = 10
b = -5
c = 0
print(a, b, c)

2. Integer Operations

Integers support various arithmetic operations:

print(5 + 3)   # Addition
print(5 - 3)   # Subtraction
print(5 * 3)   # Multiplication
print(5 / 3)   # Division (returns float)
print(5 // 3)  # Floor division
print(5 % 3)   # Modulus

3. Type Conversion

Converting other types to integers:

num = int("123")
print(num)  # Outputs: 123

num = int(3.1415)
print(num)  # Outputs: 3

Floats

Floats represent real numbers that can have fractional parts. They are another basic numeric type in Python and are essential for decimal calculations.


1. Creating Floats

Floats can be created by assigning decimal values to variables:

a = 3.1415
b = -0.5
c = 100.0
print(a, b, c)

2. Float Operations

Floats support various arithmetic operations:

print(2.5 + 1.5)  # Addition
print(5.0 / 2)    # Division
print(3.1415 ** 2) # Exponentiation
print(7.3 % 3)    # Modulus

3. Type Conversion

Converting other types to floats:

num = float("123.45")
print(num)  # Outputs: 123.45

num = float(3)
print(num)  # Outputs: 3.0

num = float(5.5)
print(num)  # Outputs: 5.5

Strings

Strings are sequences of characters used to represent text. They are immutable and can be defined using single quotes, double quotes, or triple quotes for multi-line strings.


1. Creating Strings

Strings can be created using different types of quotes:

a = 'Hello, World!'
b = "Python is great"
c = """This is a
multi-line string"""
print(a, b, c, sep='\n')

2. String Operations

Strings support various operations like concatenation and repetition:

print("Hello" + " World")  # Concatenation
print("Hello" * 3)        # Repetition
print("Hello"[0])        # Accessing characters
print("Hello"[1:3])      # Slicing

3. String Methods

Strings have various built-in methods for manipulation:

text = "hello world"
print(text.upper())      # Outputs: HELLO WORLD
print(text.lower())      # Outputs: hello world
print(text.replace("world", "earth"))  # Outputs: hello earth

Lists

Lists are versatile, mutable sequences used to store collections of items. They are defined with square brackets [] and support a variety of operations for modification and access.


1. Creating a List

Define a list with various elements:

my_list = [1, 2, 3, "Python", True]
print(my_list)

2. Accessing and Modifying Lists

Lists support indexing, slicing, and methods for modifying their content:

# Accessing an element
print(my_list[3])  # Outputs: Python

# Changing an element
my_list[1] = "changed"
print(my_list)

# Appending a new element
my_list.append("new item")
print(my_list)

3. List Comprehensions

List comprehensions provide a concise way to create lists by iterating over sequences and optionally applying conditions:

# Creating a list of squares for numbers 0 to 9
squares = [x**2 for x in range(10)]
print(squares)

Tuples

Tuples are immutable sequences used to store a collection of items. They are defined with parentheses () and are useful when you want to ensure data integrity.


1. Creating a Tuple

A simple tuple containing different types of data:

my_tuple = (10, "hello", 3.14)
print(my_tuple)

2. Accessing Tuple Elements

Access elements by their index, similar to lists:

# Accessing the first element
print(my_tuple[0])  # Outputs: 10

# Slicing the tuple
print(my_tuple[1:])  # Outputs: ('hello', 3.14)

Since tuples are immutable, their values cannot be changed after creation.

Dictionaries

Dictionaries store data in key-value pairs, making data lookup efficient. They are created using curly braces {} and can be accessed by their keys.


1. Creating a Dictionary

A basic dictionary mapping fruits to their colors:

fruit_colors = {
    "apple": "red",
    "banana": "yellow",
    "cherry": "red"
}

2. Accessing and Modifying Data

Access a value using its key, add a new key-value pair, or update an existing one:

# Accessing a value
print(fruit_colors["apple"])  # Outputs: red

# Adding a new entry
fruit_colors["orange"] = "orange"

# Updating an entry
fruit_colors["banana"] = "green"

Iterate through keys and values using the items() method:

for fruit, color in fruit_colors.items():
    print(f"{fruit} is {color}")

Conditionals: if, elif and else

Conditional statements in Python allow you to execute code blocks based on whether a condition is True or False. The basic structure uses if, followed optionally by elif (else if), and else for fallback.


1. Basic if Statement

Use the if statement to execute code only when a condition is met:

x = 10
if x > 5:
    print("x is greater than 5")  
    # Outputs: x is greater than 5

2. if-else Statement

Include an else block to execute code when the condition is not met:

x = 3
if x > 5:
    print("x is greater than 5")
else:
    print("x is not greater than 5")  
    # Outputs: x is not greater than 5

3. if-elif-else Chain

For multiple conditions, use elif to check additional conditions:

x = 5
if x > 5:
    print("x is greater than 5")
elif x == 5:
    print("x is exactly 5")
else:
    print("x is less than 5")
    # Outputs: x is exactly 5

These constructs allow you to create robust decision-making structures in your Python programs.

for-loop

The for loop in Python is designed to iterate over any iterable object (lists, tuples, strings, dictionaries, generators, etc.). Under the hood, it retrieves an iterator from the iterable and repeatedly calls __next__() to fetch each item until exhaustion, then exits gracefully. This model makes for loops concise and powerful for traversing data collections.

Use for loops when you have a known collection or want to iterate a specific number of times using range(). They naturally handle nested structures and unpacking, enabling expressive patterns for data processing.

Iterating a List

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
    # Prints each fruit in the list in order

Using range() for Numeric Iteration

for i in range(1, 6, 2):
    print(i)
    # Prints 1, 3, 5 — start at 1, stop before 6, step by 2

This pattern is ideal when you need a loop counter without a collection.

Enumerate and Unpacking

names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names, start=1):
    print(f"{index}: {name}")
    # Outputs numbered list: 1: Alice, 2: Bob, 3: Charlie

enumerate() adds a counter to each item, and unpacking makes the code concise and readable.

Nested Loops

matrix = [[1, 2], [3, 4]]
for row in matrix:
    for value in row:
        print(value)
# Flattens and prints: 1, 2, 3, 4

Nested loops allow traversal of multi-dimensional structures like matrices or nested lists.

Common Pitfalls

Modifying Iterable Mid-Loop: Changing a list while iterating over it can lead to skipped items or unpredictable behavior:

nums = [1, 2, 3, 4]
for n in nums:
    if n % 2 == 0:
        nums.remove(n)
print(nums)  # Results may surprise: [1, 3]

Index Errors: Using range(len(collection)+1) without caution can trigger IndexError when the index equals the collection length.

Overall, for loops provide elegant iteration, but be mindful of modifying the underlying iterable and off-by-one errors when using indexes directly.

while-loop

The while loop is a control flow statement that repeatedly executes a block of code as long as a given condition remains True. Before each iteration, Python evaluates the condition; if it’s truthy, the loop body runs, otherwise execution continues after the loop. This design makes while loops particularly useful when the number of needed iterations cannot be determined in advance and depends on changing state or external input.

Common use-cases include waiting for user input, polling for resource availability, or processing data until a sentinel value is encountered. Careful management of the loop condition is crucial: forgetting to update variables within the loop can lead to infinite loops, while incorrect condition logic can cause premature exits.

Basic Counter Example

count = 0
while count < 3:
    print(f"Count: {count}")  # Prints current count
    count += 1               # Updates loop condition
    # After loop finishes, count == 3

This example demonstrates a simple counter: it prints numbers 0 through 2, then exits when count < 3 becomes False.

Loop with break and continue

n = 0
while True:
    n += 1
    if n >= 5:
        print("Reached limit, exiting loop.")
        break       # Immediately exits the loop
    if n % 2 == 0:
        continue    # Skips printing even numbers
    print(f"Odd number: {n}")
    # Outputs Odd number: 1, 3

Here, break provides a controlled exit when a condition is met, and continue skips the remainder of the loop body for even values of n.

Using else with while

i = 0
while i < 2:
    print(i)
    i += 1
else:
    print("Loop completed without break")
# If break never executes, the else block runs

The optional else clause executes only if the loop finishes normally (i.e., wasn’t terminated by a break).

Common Pitfalls

Infinite Loop: If the condition never becomes False, such as neglecting to modify the controlling variable, the loop runs endlessly:

x = 5
while x > 0:
    print(x)
# Missing x -= 1 leads to infinite repetition

Indentation Error: Python relies on indentation to define code blocks. Incorrect indentation inside a while can cause syntax errors or unintended loop behavior.

Functions and Lambda Expressions

Functions in Python are defined using the def keyword and allow you to encapsulate code for reuse. Additionally, lambda expressions provide a shorthand for creating small anonymous functions.


1. Defining Functions

Use def to define a function, optionally with parameters:

def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))  
# Outputs: Hello, Alice!

2. Lambda Functions

Lambda expressions create small anonymous functions. They are useful for short, simple functions:

# A lambda that adds two numbers
add = lambda a, b: a + b
print(add(3, 4))  # Outputs: 7

Both regular functions and lambda expressions are essential tools for organizing and simplifying your code.

Advanced Python Concepts

Beyond the basics, Python offers many advanced features to write concise, efficient, and robust code. Topics like list comprehensions, generators, and exception handling can help you take your programming skills to the next level.


1. List Comprehensions

List comprehensions provide a concise way to create lists. They can replace loops in many cases:

# Traditional loop
squares = []
for i in range(10):
    squares.append(i ** 2)

# Using list comprehension
squares = [i ** 2 for i in range(10)]
print(squares)

2. Exception Handling

Use try-except blocks to gracefully handle errors and exceptions:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero!")
else:
    # is executed if try did not work
    # and the exception is not the same as in except
    print("Not execute but no ZeroDivisionError.")
finally:
    # is always executed
    print("Execution complete.")
    # Outputs an error message 
    # and a final execution statement

3. Generators

Generators allow you to iterate over large data sets efficiently without storing the entire sequence in memory:

def count_up_to(n):
    count = 1
    while count <= n:
        yield count
        count += 1

for number in count_up_to(5):
    print(number)
    # Outputs: 1 2 3 4 5

Exploring these advanced topics can significantly enhance your Python programming capabilities.

Comments