Introduction to Python Programming


Introduction to Python Programming is a course designed to introduce students to the Python programming language. It is intended for students with little or no programming experience and aims to provide a strong foundation in the basics of computer programming using Python.


Upon completion of this course, students will be able to:

  • Understand the basic concepts of computer programming
  • Write simple programs in Python using basic programming constructs such as variables, loops, and conditional statements
  • Use Python to perform basic tasks such as reading and writing files, working with data, and interacting with the web
  • Understand the principles of object-oriented programming and be able to apply them in Python
  • Debug and troubleshoot Python programs.

Introduction to programming and Python

What is programming and why is it useful?

Programming is the process of creating instructions that a computer can follow to perform tasks. It is useful because it allows us to automate tasks, solve problems, and create complex systems by writing code.

What is Python and its benefits as a programming language?

Python is a high-level programming language that is widely used in a variety of fields, including web development, data analysis, and scientific computing. Some benefits of using Python include its simplicity, versatility, and a large community of users and developers.

Setting up a Python development environment

To start programming in Python, you will need to set up a development environment on your computer. This typically involves installing the Python interpreter and a code editor or integrated development environment (IDE). There are many options available for setting up a Python development environment, and you can choose the one that best fits your needs and preferences.

Variables, data types, and basic operations in Python

Introduction to variables and assignment statements

In Python, a variable is a named location in memory that is used to store a value. To create a variable, you give it a name and assign a value to it using the assignment operator (=). The value of a variable can be accessed and modified by using its name.

For example:

x = 10

y = "hello"

z = True

In the above code, we have created three variables: x, y, and z. The variable x is assigned the value 10, y is assigned the value "hello", and z is assigned the value True.

Basic data types in Python

In Python, there are several basic data types that can be used to store different kinds of information. These data types include:

  1. Numbers: Python has two types of numbers: integers (whole numbers) and floating-point numbers (decimal numbers).
  2. Strings: A string is a sequence of characters (letters, numbers, symbols) enclosed in quotation marks.
  3. Booleans: A boolean is a data type that can have one of two values: True or False.

For example:

x = 10          # x is an integer

y = 3.14        # y is a floating-point number

z = "hello"     # z is a string

a = True        # a is a boolean

Basic operations in Python

In Python, you can perform various operations on the basic data types. For example:

  1. Arithmetic operations: You can perform basic arithmetic operations such as addition, subtraction, multiplication, and division using the +, -, *, and / operators, respectively.
  2. String manipulation: You can concatenate (join) strings using the + operator, or repeat a string using the * operator. You can also access individual characters in a string using an index, and slice a string to extract a substring.
  3. Type conversion: You can convert values from one data type to another using built-in functions such as int(), float(), and str().

For example:

x = 10

y = 20

# Arithmetic operations

z = x + y     # 30

w = x - y     # -10

# String manipulation

s1 = "hello"

s2 = "world"

s3 = s1 + s2  # "helloworld"

# Type conversion

a = "10"

b = int(a)    # 10

c = str(b)    # "10"

Conditional statements and loops

Conditional statements (if, else, elif)

In Python, you can use conditional statements to execute certain blocks of code only if certain conditions are met. The basic syntax of an if statement is as follows:

if condition:

    # code to execute if condition is True

You can also use an else statement to specify a block of code that should be executed if the condition is not met:

if condition:

    # code to execute if condition is True


    # code to execute if condition is False

You can also use an elif (else-if) statement to specify additional conditions to be checked:

if condition1:

    # code to execute if condition1 is True

elif condition2:

    # code to execute if condition1 is False and condition2 is True


    # code to execute if condition1 and condition2 are False

For example:

x = 10

if x > 0:

    print("x is positive")

elif x < 0:

    print("x is negative")


    print("x is zero")

Loops (for, while)

In Python, you can use loops to execute a block of code repeatedly until a certain condition is met. There are two types of loops: for loops and while loops.

A for loop is used to iterate over a sequence of elements (such as a list or a string). The basic syntax of a for loop is as follows:

for variable in sequence:

    # code to execute for each element

A while loop is used to repeat a block of code as long as a certain condition is true. The basic syntax of a while loop is as follows:

while condition:

    # code to execute while condition is True

For example:

# For loop

for i in range(10):


# While loop

x = 10

while x > 0:


    x -= 1

Nesting and combining control structures

You can nest one control structure inside another, or combine multiple control structures in a single program. For example:

# Nesting

x = 10

y = 20

if x > 0:

    if y > 0:

        print("x and y are both positive")

# Combining

x = 10

y = 20

if x > 0 and y > 0:

    print("x and y are both positive")

if x > 0 or y > 0:

    print("x or y is positive")

Working with files and data in Python

Reading and writing files

In Python, you can read from and write to files using built-in functions such as open(), read(), write(), and close(). To read from a file, you first need to open it in reading mode using the open() function. This function returns a file object that you can use to access the contents of the file.

The basic syntax for reading from a file is as follows:

# Open file in reading mode

with open("filename.txt", "r") as f:

    # Read contents of file

    contents =

To write to a file, you can open it in writing mode using the "w" mode. If the file does not exist, it will be created. If the file already exists, its contents will be overwritten.

The basic syntax for writing to a file is as follows:

# Open file in writing mode

with open("filename.txt", "w") as f:

    # Write to file

    f.write("text to write")

For example:

# Read from file

with open("input.txt", "r") as f:

    contents =

# Write to file

with open("output.txt", "w") as f:


Working with data using lists, tuples, and dictionaries

In Python, you can use lists, tuples, and dictionaries to store and manipulate data.

Lists are ordered collections of items that can be of any data type. Lists are created using square brackets [].

Tuples are similar to lists, but they are immutable (cannot be modified once created). Tuples are created using parentheses ().

Dictionaries are unordered collections of key-value pairs. Dictionaries are created using curly braces {}.

For example:

# Lists

x = [1, 2, 3]

y = ["a", "b", "c"]

z = [1, "a", True]

# Tuples

a = (1, 2, 3)

b = ("a", "b", "c")

c = (1, "a", True)

# Dictionaries

d = { "key1": "value1", "key2": "value2" }

e = { 1: "one", 2: "two", 3: "three" }

f = { "a": 1, "b": 2, "c": 3 }

Handling exceptions and errors when working with files and data

When working with files and data, it is important to anticipate and handle potential errors and exceptions that may occur. For example, you might need to handle a file not found error if the file you are trying to open does not exist, or a value error if the data you are working with is not in the expected format.

To handle exceptions and errors in Python, you can use a try-except block. The syntax for a try-except block is as follows:


    # code to execute

except ExceptionType:

    # code to execute in case of exception

For example:


    with open("input.txt", "r") as f:

        contents =

Functions and modules in Python

Defining and calling functions

In Python, a function is a block of code that performs a specific task and can be called (executed) multiple times in a program. Functions are defined using the def keyword, followed by the function name and a list of parameters inside parentheses. The code block inside the function is indented and starts with a colon (:).

The basic syntax for defining a function in Python is as follows:

def function_name(parameters):

    # code to execute

To call (execute) a function, you use the function name followed by parentheses. You can also pass arguments (values) to the function inside the parentheses.

The basic syntax for calling a function in Python is as follows:


For example:

def greet(name):

    print("Hello, " + name + "!")

greet("John")  # prints "Hello, John!"

Passing arguments and returning values

When defining a function, you can specify parameters that the function expects to receive as arguments when it is called. When calling a function, you pass the arguments inside the parentheses.

For example:

def add(x, y):

    return x + y

result = add(10, 20)  # result is 30

You can also use the return statement inside a function to specify a value that the function should return to the caller. The value of the return statement is the value of the function.

For example:

def multiply(x, y):

    return x * y

result = multiply(10, 20)  # result is 200

Organizing code using modules and packages

As your programs get larger and more complex, you may want to organize your code into modules and packages to make it easier to manage and reuse.

A module is a file containing Python code (functions, variables, etc.) that can be imported and used in another Python program. A package is a collection of modules organized into a directory structure.

To use a module or package in a program, you can use the import statement. The syntax for importing a module or package is as follows:

import module_name

import package_name.module_name

For example:

# Import module

import math

# Import package and module

import numpy.random

Object-Oriented Programming in Python

Introduction to object-oriented programming

Object-oriented programming (OOP) is a programming paradigm that is based on the concept of "objects", which are data structures that contain data and functions (methods) that operate on that data. OOP is a way of organizing and structuring code in a way that is more modular, reusable, and extensible.

In Python, you can define classes to create objects that belong to that class. A class is a template that defines the attributes (data) and behaviors (methods) of an object.

Defining classes and creating objects

To define a class in Python, you use the class keyword, followed by the class name and a colon (:). The code block inside the class is indented and contains the attributes and methods of the class.

The basic syntax for defining a class in Python is as follows:

class ClassName:

    # attributes and methods

To create an object (an instance of a class), you use the class name followed by parentheses. This is known as instantiating the class.

The basic syntax for creating an object in Python is as follows:

object_name = ClassName()

For example:

class Dog:

    def __init__(self, name, breed): = name

        self.breed = breed

dog1 = Dog("Fido", "Labrador")

In the example above, the Dog class is defined with an init method that takes two parameters: "name" and "breed". The init method is a special method in Python that is called when an object is created from a class. It initializes the object by setting the attributes of the object to the values of the parameters.

To create an object (an instance) of the Dog class, you use the class name followed by parentheses and pass in the values for the "name" and "breed" parameters. This is known as instantiating the class.

dog1 = Dog("Fido", "

This creates a new Dog object with a "name" attribute set to "Fido" and a "breed" attribute set to "Labrador".

Inheritance and polymorphism

In OOP, inheritance is the ability of a class to inherit attributes and methods from a parent class. This allows you to create a new class (the child class) that is a modified version of an existing class (the parent class).

For example:

class Animal:

    def __init__(self, species):

        self.species = species

class Dog(Animal):

    def __init__(self, name, breed): = name

        self.breed = breed


dog1 = Dog("Fido", "Labrador")

print(dog1.species)  # prints "Canine"

In the example above, the Dog class is a child class of the Animal class and inherits the species attribute from the Animal class.

Polymorphism is the ability of a class to override or extend the methods of a parent class. This allows you to create multiple child classes that have different implementations of a method inherited from the parent class.

For example:

class Animal:

    def speak(self):

        print("I make a generic animal noise.")

class Dog(Animal):

    def speak(self):


class Cat(Animal):

    def speak(self):


dog1 = Dog()

dog1.speak()  # prints "Bark!"

cat1 = Cat()

cat1.speak()  # prints "Meow!"

In the example above, the Dog class and Cat class both inherit the speak() method from the Animal class, but they have different implementations of the method. This is an example of polymorphism.

Debugging and troubleshooting Python programs

Common errors and debugging techniques

As you write and test your Python programs, you may encounter errors or bugs that prevent the program from running as expected. Some common types of errors in Python include syntax errors, runtime errors, and semantic errors.

Syntax errors occur when the Python interpreter encounters code that is not written in a valid format. These errors are usually easy to fix, as they are pointed out by the interpreter when the program is run.

For example:

# Syntax error: missing closing quotation mark

print("Hello, world!)  # Error: EOL while scanning string literal

Runtime errors occur when the program runs into an issue while executing the code. These errors can be harder to debug, as they may not be immediately apparent.

For example:

# Runtime error: index out of range

numbers = [1, 2, 3]

print(numbers[3])  # Error: list index out of range

Semantic errors occur when the program is written correctly from a syntax standpoint, but the logic of the program is flawed. These errors can be difficult to detect and debug, as the program may not produce any errors when run, but it does not produce the expected output.

To debug your programs, you can use techniques such as adding print statements to trace the execution of the program, using a debugger to step through the code, and using tools such as PyLint to check for common issues.

Using the debugger and other tools for troubleshooting

Python includes a built-in debugger called pdb that allows you to step through your code and inspect the values of variables at different points in the execution. To use the debugger, you can insert a breakpoint into your code by using the pdb.set_trace() function.

For example:

import pdb

def add(x, y):

    pdb.set_trace()  # breakpoint

    return x + y

result = add(10, 20)

When you run the program, execution will pause at the breakpoint and you will be able to use the debugger commands to step through the code and inspect the values of variables.

There are also many third-party tools and libraries available for troubleshooting and debugging Python programs. Some examples include PyLint for checking code quality, unittest for writing and running unit tests, and the logging module for tracking the execution of a program.

Working with the web in Python

Making HTTP requests and parsing responses

The Hypertext Transfer Protocol (HTTP) is a protocol used for exchanging data on the web. In Python, you can use the requests module to make HTTP requests and parse the responses.

To make an HTTP request in Python, you can use the requests.get() function and pass in the URL of the resource you want to access. The function returns a response object that contains the response data and metadata.

For example:

import requests

response = requests.get("")

print(response.status_code)  # prints 200

print(response.text)  # prints the HTML content of the page

You can also use the function to make a POST request, or the requests.put() function to make a PUT request.

To parse the response data, you can use functions such as response.json() to parse a JSON response, or use a library such as Beautiful Soup to parse and extract data from an HTML or XML response.

Scraping web pages and data

Web scraping is the process of extracting data from a web page or website. In Python, you can use libraries such as Beautiful Soup to scrape data from web pages.

Beautiful Soup is a library that allows you to parse and navigate an HTML or XML document. It provides functions for finding and extracting data from the document.

To use Beautiful Soup, you first need to install it using pip:

pip install beautifulsoup4

Then, you can use the BeautifulSoup function to parse an HTML or XML document:

html_doc = """

<html><head><title>The Dormouse's story</title></head>


<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were

<a href="" class="sister" id="link1">Elsie</a>,

<a href="" class="sister" id="link2">Lacie</a> and

<a href="" class="sister" id="link3">Tillie</a>;

and they lived at the bottom of a well.</p>

<p class="story">...</p>


soup = BeautifulSoup(html_doc, 'html.parser')

Once you have a Beautiful Soup object, you can use functions such as find() and find_all() to search for and extract data from the document.

For example:

title = soup.find('title')

print(title.string)  # prints "The Dormouse's story"

links = soup.find_all('a')

for link in links:

    print(link['href'])  # prints the href attribute of each link

Interacting with web APIs

Web APIs, or Application Programming Interfaces, allow programs to interact with websites and web-based services. This can be useful for tasks such as retrieving data from a database, posting updates to social media, or automating tasks on a web-based platform.

In Python, there are several libraries that can be used to interact with web APIs. Some popular ones include requests, urllib, and httplib.

Using the requests library is a simple way to make HTTP requests in Python. For example, to make a GET request to the GitHub API to retrieve a list of repositories for a given user, we could use the following code:

import requests

url = "{username}/repos"

response = requests.get(url)

if response.status_code == 200:

    repos = response.json()

    print(f"Number of repositories: {len(repos)}")


    print("Could not retrieve repositories")

The urllib library is part of the Python standard library and provides functions for working with URLs. To make a GET request using urllib, we can use the urlopen function:

from urllib.request import urlopen

url = "{username}/repos"

response = urlopen(url)

if response.code == 200:

    data =

    print(f"Number of repositories: {len(data)}")


    print("Could not retrieve repositories")

The httplib library is another option for making HTTP requests in Python. It is a lower-level library than requests and urllib, but can be useful for more advanced use cases. To make a GET request using httplib, we can use the following code:

import httplib

conn = httplib.HTTPSConnection("")

conn.request("GET", "/users/{username}/repos")

response = conn.getresponse()

if response.status == 200:

    data =

    print(f"Number of repositories: {len(data)}")


    print("Could not retrieve repositories")

In each of these examples, we make a GET request to the GitHub API to retrieve a list of repositories for a given user. We then check the status code of the response to ensure that the request was successful, and if so, we print the number of repositories returned by the API.

Regardless of which library you choose to use, interacting with web APIs in Python is a powerful tool for automating tasks and retrieving data from the web.

In Conclusion

In this course, students have learned the basics of programming using the Python programming language. They have learned how to write simple programs, work with data and files, and use the principles of object-oriented programming. They have also gained skills in debugging and troubleshooting Python programs.

With this foundation, students can continue to learn more advanced programming concepts and techniques, and apply their skills to a wide range of applications.


Akanne Academy is an online learning platform that provides educational lecture materials, software tutorials, technological skills training, digital products, etc. Use the top right button to join our group.

Post a Comment

Previous Post Next Post