30 Days Python Programming
30 Days Python Programming
🐍 30 Days Of Python
# Day Topics
01 Introduction
02 Variables, Built-in Functions
03 Operators
04 Strings
05 Lists
06 Tuples
07 Sets
08 Dictionaries
09 Conditionals
10 Loops
11 Functions
12 Modules
13 List Comprehension
14 Higher Order Functions
15 Python Type Errors
16 Python Date time
17 Exception Handling
18 Regular Expressions
19 File Handling
20 Python Package Manager
21 Classes and Objects
22 Web Scraping
23 Virtual Environment
24 Statistics
https://md2pdf.netlify.app 1/250
11/03/2023, 17:47
# Day Topics
25 Pandas
26 Python web
27 Python with MongoDB
28 API
29 Building API
30 Conclusions
🧡 🧡 🧡 HAPPY CODING 🧡 🧡 🧡
Support the author to create more educational materials
Paypal Logo
30 Days Of Python: Day 1 - Introduction
LinkedIn Follow @asabeneh
Number
String
Booleans
List
Dictionary
Tuple
Set
Checking Data types
Python File
💻 Exercises - Day 1
Exercise: Level 1
Exercise: Level 2
Exercise: Level 3
📘 Day 1
Welcome
Congratulations for deciding to participate in a 30 days of Python programming challenge . In this
challenge you will learn everything you need to be a python programmer and the whole concept of
programming. In the end of the challenge you will get a 30DaysOfPython programming challenge
certificate.
If you would like to actively engage in the challenge, you may join the 30DaysOfPython challenge
telegram group.
Introduction
Python is a high-level programming language for general-purpose programming. It is an open
source, interpreted, objected-oriented programming language. Python was created by a Dutch
programmer, Guido van Rossum. The name of Python programming language was derived from a
British sketch comedy series, Month Python's Flying Circus. The first version was released on
February 20, 1991. This 30 days of Python challenge will help you learn the latest version of Python,
Python 3 step by step. The topics are broken down into 30 days, where each day contains several
topics with easy-to-understand explanations, real-world examples, many hands on exercises and
projects.
This challenge is designed for beginners and professionals who want to learn python programming
language. It may take 30 to 100 days to complete the challenge, people who actively participate on
https://md2pdf.netlify.app 3/250
11/03/2023, 17:47
the telegram group have a high probability of completing the challenge. If you are a visual learner or
in favor of videos, you may get started with this Python for Absolute Beginners video.
Why Python ?
It is a programming language which is very close to human language and because of that it is easy
to learn and use. Python is used by various industries and companies (including Google). It has
been used to develop web applications, desktop applications, system adminstration, and machine
learning libraries. Python is highly embraced language in the data science and machine learning
community. I hope this is enough to convince you to start learning Python. Python is eating the
world and you are killing it before it eats you.
Environment Setup
Installing Python
To run a python script you need to install python. Let's download python. If your are a windows
user. Click the button encircled in red.
installing on Windows
If you are a macOS user. Click the button encircled in red.
installing on Windows
To check if python is installed write the following command on your device terminal.
python --version
Python Version
As you can see from the terminal, I am using Python 3.7.5 version at the moment. Your version of
Python might be different from mine by but it should be 3.6 or above. If you mange to see the
python version, well done. Python has been installed on your machine. Continue to the next
section.
Python Shell
Python is an interpreted scripting language, so it does not need to be compiled. It means it
executes the code line by line. Python comes with a Python Shell (Python Interactive Shell). It is
used to execute a single python command and get the result.
Python Shell waits for the Python code from the user. When you enter the code, it interprets the
code and shows the result in the next line. Open your terminal or command prompt(cmd) and write:
https://md2pdf.netlify.app 4/250
11/03/2023, 17:47
python
Open the visual studio code by double clicking the visual studio icon. When you open it you will get
this kind of interface. Try to interact with the labeled icons.
Visual studio Code
Create a folder named 30DaysOfPython on your desktop. Then open it using visual studio code.
Opening Project on Visual studio
Opening a project
After opening it you will see shortcuts for creating files and folders inside of 30DaysOfPython
project's directory. As you can see below, I have created the very first file, helloworld.py. You can do
the same.
Creating a python file
After a long day of coding, you want to close your code editor, right? This is how you will close the
opened project.
Closing project
Congratulations, you have finished setting up the development environment. Let us start coding.
Basic Python
Python Syntax
A Python script can be written in Python interactive shell or in the code editor. A Python file has an
extension .py.
Python Indentation
An indentation is a white space in a text. Indentation in many languages is used to increase code
readability, however Python uses indentation to create block of codes. In other programming
languages curly brackets are used to create blocks of codes instead of indentation. One of the
common bugs when writing python code is wrong indentation.
Indentation Error
Comments
Comments are very important to make the code more readable and to leave remarks in our code.
Python does not run comment parts of our code. Any text starting with hash(#) in Python is a
comment.
Example: Single Line Comment
https://md2pdf.netlify.app 7/250
11/03/2023, 17:47
Data types
In Python there are several types of data types. Let us get started with the most common ones.
Different data types will be covered in detail in other sections. For the time being, let us just go
through the different data types and get familiar with them. You do not have to have a clear
understanding now.
Number
Integer: Integer(negative, zero and positive) numbers Example: ... -3, -2, -1, 0, 1, 2, 3 ...
Float: Decimal number Example ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
Complex Example 1 + j, 2 + 4j
String
A collection of one or more characters under a single or double quote. If a string is more than one
sentence then we use a triple quote.
Example:
'Asabeneh'
'Finland'
'Python'
'I love teaching'
'I hope you are enjoying the first day of 30DaysOfPython Challenge'
Booleans
A boolean data type is either a True or False value. T and F should be always uppercase.
Example:
https://md2pdf.netlify.app 8/250
11/03/2023, 17:47
List
Python list is an ordered collection which allows to store different data type items. A list is similar to
an array in JavaScript.
Example:
[0, 1, 2, 3, 4, 5] # all are the same data types - a list of numbers
['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data types - a list of strings
['Finland','Estonia', 'Sweden','Norway'] # all the same data types - a list of strings
['Banana', 10, False, 9.81] # different data types in the list - string, integer, bool
Dictionary
A Python dictionary object is an unordered collection of data in a key value pair format.
Example:
{
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'country':'Finland',
'age':250,
'is_married':True,
'skills':['JS', 'React', 'Node', 'Python']
}
Tuple
A tuple is an ordered collection of different data types like list but tuples can not be modified once
they are created. They are immutable.
Example:
('Asabeneh', 'Pawel', 'Brook', 'Abraham', 'Lidiya') # Names
Set
https://md2pdf.netlify.app 9/250
11/03/2023, 17:47
A set is a collection of data types similar to list and tuple. Unlike list and tuple, set is not an ordered
collection of items. Like in Mathematics, set in Python stores only unique items.
In later sections, we will go in detail about each and every Python data type.
Example:
{2, 4, 3, 5}
{3.14, 9.81, 2.7} # order is not important in set
print(2 + 3) # addition(+)
print(3 - 1) # subtraction(-)
print(2 * 3) # multiplication(*)
print(3 / 2) # division(/)
print(3 ** 2) # exponential(**)
print(3 % 2) # modulus(%)
print(3 // 2) # Floor division operator(//)
To run the python file check the image below. You can run the python file either by running the
green button on Visual Studio Code or by typing python helloworld.py in the terminal .
Running python script
🌕 You are amazing. You have just completed day 1 challenge and you are on your way to
greatness. Now do some exercises for your brain and muscles.
💻 Exercises - Day 1
Exercise: Level 1
1. Check the python version you are using
2. Open the python interactive shell and do the following operations. The operands are 3 and 4.
addition(+)
subtraction(-)
multiplication(*)
modulus(%)
division(/)
exponential(**)
floor division operator(//)
3. Write strings on the python interactive shell. The strings are the following:
Your name
Your family name
Your country
I am enjoying 30 days of python
4. Check the data types of the following data:
10
9.8
3.14
4 - 4j
['Asabeneh', 'Python', 'Finland']
Your name
Your family name
Your country
Exercise: Level 2
https://md2pdf.netlify.app 11/250
11/03/2023, 17:47
1. Create a folder named day_1 inside 30DaysOfPython folder. Inside day_1 folder, create a python
file helloworld.py and repeat questions 1, 2, 3 and 4. Remember to use print() when you are
working on a python file. Navigate to the directory where you have saved your file, and run it.
Exercise: Level 3
1. Write an example for different Python data types such as Number(Integer, Float, Complex),
String, Boolean, List, Tuple, Set and Dictionary.
2. Find an Euclidian distance between (2, 3) and (10, 8)
🎉 CONGRATULATIONS ! 🎉
Day 2 >>
30 Days Of Python: Day 2 - Variables, Builtin
Functions
LinkedIn Follow @asabeneh
In Python we have lots of built-in functions. Built-in functions are globally available for your use that
mean you can make use of the built-in functions without importing or configuring. Some of the
most commonly used Python built-in functions are the following: print(), len(), type(), int(), float(),
str(), input(), list(), dict(), min(), max(), sum(), sorted(), open(), file(), help(), and dir(). In the
following table you will see an exhaustive list of Python built-in functions taken from python
documentation.
Built-in Functions
Let us open the Python shell and start using some of the most common built-in functions.
Built-in functions
Let us practice more by using different built-in functions
Help and Dir Built in Functions
As you can see from the terminal above, Python has got reserved words. We do not use reserved
words to declare variables or functions. We will cover variables in the next section.
I believe, by now you are familiar with built-in functions. Let us do one more practice of built-in
functions and we will move on to the next section.
Min Max Sum
Variables
Variables store data in a computer memory. Mnemonic variables are recommended to use in many
programming languages. A mnemonic variable is a variable name that can be easily remembered
and associated. A variable refers to a memory address in which data is stored. Number at the
beginning, special character, hyphen are not allowed when naming a variable. A variable can have a
short name (like x, y, z), but a more descriptive name (firstname, lastname, age, country) is highly
recommended.
Python Variable Name Rules
A variable name must start with a letter or the underscore character
A variable name cannot start with a number
A variable name can only contain alpha-numeric characters and underscores (A-z, 0-9, and _ )
Variable names are case-sensitive (firstname, Firstname, FirstName and FIRSTNAME) are
different variables)
Let us se valid variable names
firstname
lastname
https://md2pdf.netlify.app 13/250
11/03/2023, 17:47
age
country
city
first_name
last_name
capital_city
_if # if we want to use reserved word as a variable
year_2021
year2021
current_year_2021
birth_year
num1
num2
We will use standard Python variable naming style which has been adopted by many Python
developers. Python developers use snake case(snake_case) variable naming convention. We use
underscore character after each word for a variable containing more than one word(eg. first_name,
last_name, engine_rotation_speed). The example below is an example of standard naming of
variables, underscore is required when the variable name is more than one word.
When we assign a certain data type to a variable, it is called variable declaration. For instance in the
example below my first name is assigned to a variable first_name. The equal sign is an assignment
operator. Assigning means storing data in the variable. The equal sign in Python is not equality as in
Mathematics.
Example:
# Variables in Python
first_name = 'Asabeneh'
last_name = 'Yetayeh'
country = 'Finland'
city = 'Helsinki'
age = 250
is_married = True
skills = ['HTML', 'CSS', 'JS', 'React', 'Python']
person_info = {
'firstname':'Asabeneh',
'lastname':'Yetayeh',
'country':'Finland',
https://md2pdf.netlify.app 14/250
11/03/2023, 17:47
'city':'Helsinki'
}
Let us use the print() and len() built-in functions. Print function takes unlimited number of
arguments. An argument is a value which we can be passed or put inside the function parenthesis,
see the example below.
Example:
print('Hello, World!') # The text Hello, World! is an argument
print('Hello',',', 'World','!') # it can take multiple arguments, four arguments have
print(len('Hello, World!')) # it takes only one argument
Let us print and also find the length of the variables declared at the top:
Example:
# Printing the values stored in the variables
https://md2pdf.netlify.app 15/250
11/03/2023, 17:47
Getting user input using the input() built-in function. Let us assign the data we get from a user into
first_name and age variables. Example:
first_name = input('What is your name: ')
age = input('How old are you? ')
print(first_name)
print(age)
Data Types
There are several data types in Python. To identify the data type we use the type built-in function. I
would like to ask you to focus on understanding different data types very well. When it comes to
programming, it is all about data types. I introduced data types at the very beginning and it comes
again, because every topic is related to data types. We will cover data types in more detail in their
respective sections.
Checking Data types and Casting
Check Data types: To check the data type of certain data/variable we use the type Example:
# Different python data types
# Let's declare variables with various data types
Casting: Converting one data type to another data type. We use int(), float(), str(), list, set
When we do arithmetic operations string numbers should be first converted to int or float
https://md2pdf.netlify.app 16/250
11/03/2023, 17:47
otherwise it will return an error. If we concatenate a number with a string, the number should
be first converted to a string. We will talk about concatenation in String section.
Example:
# int to float
num_int = 10
print('num_int',num_int) # 10
num_float = float(num_int)
print('num_float:', num_float) # 10.0
# float to int
gravity = 9.81
print(int(gravity)) # 9
# int to str
num_int = 10
print(num_int) # 10
num_str = str(num_int)
print(num_str) # '10'
# str to list
first_name = 'Asabeneh'
print(first_name) # 'Asabeneh'
first_name_to_list = list(first_name)
print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h']
Numbers
Number data types in Python:
1. Integers: Integer(negative, zero and positive) numbers Example: ... -3, -2, -1, 0, 1, 2, 3 ...
2. Floating Point Numbers(Decimal numbers) Example: ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
3. Complex Numbers Example: 1 + j, 2 + 4j, 1 - 1j
🌕 You are awesome. You have just completed day 2 challenges and you are two steps ahead on
your way to greatness. Now do some exercises for your brain and muscles.
💻 Exercises - Day 2
Exercises: Level 1
https://md2pdf.netlify.app 17/250
11/03/2023, 17:47
1. Inside 30DaysOfPython create a folder called day_2. Inside this folder create a file named
variables.py
2. Write a python comment saying 'Day 2: 30 Days of python programming'
3. Declare a first name variable and assign a value to it
4. Declare a last name variable and assign a value to it
5. Declare a full name variable and assign a value to it
6. Declare a country variable and assign a value to it
7. Declare a city variable and assign a value to it
8. Declare an age variable and assign a value to it
9. Declare a year variable and assign a value to it
10. Declare a variable is_married and assign a value to it
11. Declare a variable is_true and assign a value to it
12. Declare a variable is_light_on and assign a value to it
13. Declare multiple variable on one line
Exercises: Level 2
1. Check the data type of all your variables using type() built-in function
2. Using the len() built-in function, find the length of your first name
3. Compare the length of your first name and your last name
4. Declare 5 as num_one and 4 as num_two
i. Add num_one and num_two and assign the value to a variable total
ii. Subtract num_two from num_one and assign the value to a variable diff
iii. Multiply num_two and num_one and assign the value to a variable product
iv. Divide num_one by num_two and assign the value to a variable division
v. Use modulus division to find num_two divided by num_one and assign the value to a
variable remainder
vi. Calculate num_one to the power of num_two and assign the value to a variable exp
vii. Find floor division of num_one by num_two and assign the value to a variable floor_division
5. The radius of a circle is 30 meters.
i. Calculate the area of a circle and assign the value to a variable name of area_of_circle
ii. Calculate the circumference of a circle and assign the value to a variable name of
circum_of_circle
iii. Take radius as user input and calculate the area.
6. Use the built-in input function to get first name, last name, country and age from a user and
store the value to their corresponding variable names
7. Run help('keywords') in Python shell or in your file to check for the Python reserved words or
keywords
https://md2pdf.netlify.app 18/250
11/03/2023, 17:47
🎉 CONGRATULATIONS ! 🎉
<< Day 1 | Day 3 >>
30 Days Of Python: Day 3 - Operators
LinkedIn Follow @asabeneh
Operators
Python language supports several types of operators. In this section, we will focus on few of them.
Assignment Operators
https://md2pdf.netlify.app 19/250
11/03/2023, 17:47
Assignment operators are used to assign values to variables. Let us take = as an example. Equal
sign in mathematics shows that two values are equal, however in Python it means we are storing a
value in a certain variable and we call it assignment or a assigning value to a variable. The table
below shows the different types of python assignment operators, taken from w3school.
Assignment Operators
Arithmetic Operators:
Addition(+): a + b
Subtraction(-): a - b
Multiplication(*): a * b
Division(/): a / b
Modulus(%): a % b
Floor division(//): a // b
Exponentiation(**): a ** b
Arithmetic Operators
Example:Integers
# Arithmetic Operations in Python
# Integers
print('Addition: ', 1 + 2) # 3
print('Subtraction: ', 2 - 1) # 1
print('Multiplication: ', 2 * 3) # 6
print ('Division: ', 4 / 2) # 2.0 Division in Python gives floating number
print('Division: ', 6 / 2) # 3.0
print('Division: ', 7 / 2) # 3.5
print('Division without the remainder: ', 7 // 2) # 3, gives without the floating n
print ('Division without the remainder: ',7 // 3) # 2
print('Modulus: ', 3 % 2) # 1, Gives the remainder
print('Exponentiation: ', 2 ** 3) # 9 it means 2 * 2 * 2
Example:Floats
# Floating numbers
print('Floating Point Number, PI', 3.14)
print('Floating Point Number, gravity', 9.81)
Example:Complex numbers
# Complex numbers
print('Complex number: ', 1 + 1j)
https://md2pdf.netlify.app 20/250
11/03/2023, 17:47
Let's declare a variable and assign a number data type. I am going to use single character variable
but remember do not develop a habit of declaring such types of variables. Variable names should
be all the time mnemonic.
Example:
# Declaring the variable at the top first
# I should have used sum instead of total but sum is a built-in function - try to avoi
print(total) # if you do not label your print with some string, you never know where t
print('a + b = ', total)
print('a - b = ', diff)
print('a * b = ', product)
print('a / b = ', division)
print('a % b = ', remainder)
print('a // b = ', floor_division)
print('a ** b = ', exponentiation)
Example:
print('== Addition, Subtraction, Multiplication, Division, Modulus ==')
# Arithmetic operations
total = num_one + num_two
diff = num_two - num_one
product = num_one * num_two
div = num_two / num_one
remainder = num_two % num_one
https://md2pdf.netlify.app 21/250
11/03/2023, 17:47
Let us start start connecting the dots and start making use of what we already know to calculate
(area, volume,density, weight, perimeter, distance, force).
Example:
# Calculating area of a circle
radius = 10 # radius of a circle
area_of_circle = 3.14 * radius ** 2 # two * sign means exponent or power
print('Area of a circle:', area_of_circle)
Comparison Operators
In programming we compare values, we use comparison operators to compare two values. We
check if a value is greater or less or equal to other value. The following table shows Python
comparison operators which was taken from w3shool.
Comparison Operators Example: Comparison Operators
print(3 > 2) # True, because 3 is greater than 2
print(3 >= 2) # True, because 3 is greater than 2
print(3 < 2) # False, because 3 is greater than 2
print(2 < 3) # True, because 2 is less than 3
print(2 <= 3) # True, because 2 is less than 3
print(3 == 2) # False, because 3 is not equal to 2
print(3 != 2) # True, because 3 is not equal to 2
print(len('mango') == len('avocado')) # False
https://md2pdf.netlify.app 22/250
11/03/2023, 17:47
Logical Operators
Unlike other programming languages python uses keywords and, or and not for logical operators.
Logical operators are used to combine conditional statements:
Logical Operators
print(3 > 2 and 4 > 3) # True - because both statements are true
print(3 > 2 and 4 < 3) # False - because the second statement is false
print(3 < 2 and 4 < 3) # False - because both statements are false
print('True and True: ', True and True)
print(3 > 2 or 4 > 3) # True - because both statements are true
print(3 > 2 or 4 < 3) # True - because one of the statements is true
print(3 < 2 or 4 < 3) # False - because both statements are false
print('True or False:', True or False)
print(not 3 > 2) # False - because 3 > 2 is true, then not True gives False
print(not True) # False - Negation, the not operator turns true to false
print(not False) # True
print(not not True) # True
https://md2pdf.netlify.app 23/250
11/03/2023, 17:47
🌕 You have boundless energy. You have just completed day 3 challenges and you are three steps
ahead on your way to greatness. Now do some exercises for your brain and your muscles.
💻 Exercises - Day 3
1. Declare your age as integer variable
2. Declare your height as a float variable
3. Declare a variable that store a complex number
4. Write a script that prompts the user to enter base and height of the triangle and calculate an
area of this triangle (area = 0.5 x b x h).
Enter base: 20
Enter height: 10
The area of the triangle is 100
5. Write a script that prompts the user to enter side a, side b, and side c of the triangle. Calculate
the perimeter of the triangle (perimeter = a + b + c).
Enter side a: 5
Enter side b: 4
Enter side c: 3
The perimeter of the triangle is 12
6. Get length and width of a rectangle using prompt. Calculate its area (area = length x width) and
perimeter (perimeter = 2 x (length + width))
7. Get radius of a circle using prompt. Calculate the area (area = pi x r x r) and circumference (c =
2 x pi x r) where pi = 3.14.
8. Calculate the slope, x-intercept and y-intercept of y = 2x -2
9. Slope is (m = y2-y1/x2-x1). Find the slope and Euclidean distance between point (2, 2) and
point (6,10)
10. Compare the slopes in tasks 8 and 9.
11. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x
value y is going to be 0.
12. Find the length of 'python' and 'dragon' and make a falsy comparison statement.
13. Use and operator to check if 'on' is found in both 'python' and 'dragon'
14. I hope this course is not full of jargon. Use in operator to check if jargon is in the sentence.
15. There is no 'on' in both dragon and python
16. Find the length of the text python and convert the value to float and convert it to string
https://md2pdf.netlify.app 24/250
11/03/2023, 17:47
17. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is
even or not using python?
18. Check if the floor division of 7 by 3 is equal to the int converted value of 2.7.
19. Check if type of '10' is equal to type of 10
20. Check if int('9.8') is equal to 10
21. Writ a script that prompts the user to enter hours and rate per hour. Calculate pay of the
person?
Enter hours: 40
Enter rate per hour: 28
Your weekly earning is 1120
22. Write a script that prompts the user to enter number of years. Calculate the number of
seconds a person can live. Assume a person can live hundred years
Enter number of years you have lived: 100
You have lived for 3153600000 seconds.
🎉 CONGRATULATIONS ! 🎉
<< Day 2 | Day 4 >>
30 Days Of Python: Day 4 - Strings
LinkedIn Follow @asabeneh
String Concatenation
Escape Sequences in Strings
String formatting
Old Style String Formatting (% Operator)
New Style String Formatting (str.format)
String Interpolation / f-Strings (Python 3.6+)
Python Strings as Sequences of Characters
Unpacking Characters
Accessing Characters in Strings by Index
Slicing Python Strings
Reversing a String
Skipping Characters While Slicing
String Methods
💻 Exercises - Day 4
Day 4
Strings
Text is a string data type. Any data type written as text is a string. Any data under single, double or
triple quote are strings. There are different string methods and built-in functions to deal with string
data types. To check the length of a string use the len() method.
Creating a String
letter = 'P' # A string could be a single character or a bunch of texts
print(letter) # P
print(len(letter)) # 1
greeting = 'Hello, World!' # String could be made using a single or double quote,"Hel
print(greeting) # Hello, World!
print(len(greeting)) # 13
sentence = "I hope you are enjoying 30 days of Python Challenge"
print(sentence)
Multiline string is created by using triple single (''') or triple double quotes ("""). See the example
below.
multiline_string = '''I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created 30 days of python.'''
print(multiline_string)
https://md2pdf.netlify.app 26/250
11/03/2023, 17:47
String Concatenation
We can connect strings together. Merging or connecting strings is called concatenation. See the
example below:
first_name = 'Asabeneh'
last_name = 'Yetayeh'
space = ' '
full_name = first_name + space + last_name
print(full_name) # Asabeneh Yetayeh
# Checking the length of a string using len() built-in function
print(len(first_name)) # 8
print(len(last_name)) # 7
print(len(first_name) > len(last_name)) # True
print(len(full_name)) # 16
# output
I hope every one is enjoying the Python Challenge.
https://md2pdf.netlify.app 27/250
11/03/2023, 17:47
Are you ?
Days Topics Exercises
Day 1 5 5
Day 2 6 20
Day 3 5 23
Day 4 1 35
This is a backslash symbol (\)
In every programming language it starts with "Hello, World!"
String formatting
Old Style String Formatting (% Operator)
In Python there are many ways of formatting strings. In this section, we will cover some of them.
The "%" operator is used to format a set of variables enclosed in a "tuple" (a fixed size list),
together with a format string, which contains normal text together with "argument specifiers",
special symbols like "%s", "%d", "%f", "%.number of digitsf".
%s - String (or any object with a string representation, like numbers)
%d - Integers
%f - Floating point numbers
"%.number of digitsf" - Floating point numbers with fixed precision
# Strings only
first_name = 'Asabeneh'
last_name = 'Yetayeh'
language = 'Python'
formated_string = 'I am %s %s. I teach %s' %(first_name, last_name, language)
print(formated_string)
first_name = 'Asabeneh'
last_name = 'Yetayeh'
https://md2pdf.netlify.app 28/250
11/03/2023, 17:47
language = 'Python'
formated_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language)
print(formated_string)
a = 4
b = 3
# output
4 + 3 = 7
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1.33
4 % 3 = 1
4 // 3 = 1
4 ** 3 = 64
Python strings are sequences of characters, and share their basic methods of access with other
Python ordered sequences of objects – lists and tuples. The simplest way of extracting single
characters from strings (and individual members from any sequence) is to unpack them into
corresponding variables.
Unpacking Characters
language = 'Python'
a,b,c,d,e,f = language # unpacking sequence characters into variables
print(a) # P
print(b) # y
print(c) # t
print(d) # h
print(e) # o
print(f) # n
If we want to start from right end we can use negative indexing. -1 is the last index.
language = 'Python'
last_letter = language[-1]
print(last_letter) # n
second_last = language[-2]
print(second_last) # o
print(first_three) #Pyt
last_three = language[3:6]
print(last_three) # hon
# Another way
last_three = language[-3:]
print(last_three) # hon
last_three = language[3:]
print(last_three) # hon
Reversing a String
We can easily reverse strings in python.
greeting = 'Hello, World!'
print(greeting[::-1]) # !dlroW ,olleH
String Methods
There are many string methods which allow us to format strings. See some of the string methods in
the following example:
capitalize(): Converts the first character of the string to capital letter
challenge = 'thirty days of python'
print(challenge.capitalize()) # 'Thirty days of python'
count(): returns occurrences of substring in string, count(substring, start=.., end=..). The start
is a starting indexing for counting and end is the last index to count.
challenge = 'thirty days of python'
print(challenge.count('y')) # 3
print(challenge.count('y', 7, 14)) # 1,
print(challenge.count('th')) # 2`
expandtabs(): Replaces tab character with spaces, default tab size is 8. It takes tab size
argument
challenge = 'thirty\tdays\tof\tpython'
print(challenge.expandtabs()) # 'thirty days of python'
print(challenge.expandtabs(10)) # 'thirty days of python'
find(): Returns the index of the first occurrence of a substring, if not found returns -1
challenge = 'thirty days of python'
print(challenge.find('y')) # 16
print(challenge.find('th')) # 17
rfind(): Returns the index of the last occurrence of a substring, if not found returns -1
challenge = 'thirty days of python'
print(challenge.rfind('y')) # 5
print(challenge.rfind('th')) # 1
radius = 10
pi = 3.14
area = pi * radius ** 2
result = 'The area of a circle with radius {} is {}'.format(str(radius), str(area))
print(result) # The area of a circle with radius 10 is 314
index(): Returns the lowest index of a substring, additional arguments indicate starting and
ending index (default 0 and string length - 1). If the substring is not found it raises a valueError.
https://md2pdf.netlify.app 32/250
11/03/2023, 17:47
rindex(): Returns the highest index of a substring, additional arguments indicate starting and
ending index (default 0 and string length - 1)
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.rindex(sub_string)) # 8
print(challenge.rindex(sub_string, 9)) # error
challenge = '30DaysPython'
print(challenge.isalnum()) # True
isalpha(): Checks if all string elements are alphabet characters (a-z and A-Z)
challenge = 'thirty days of python'
print(challenge.isalpha()) # False, space is once again excluded
challenge = 'ThirtyDaysPython'
print(challenge.isalpha()) # True
num = '123'
print(num.isalpha()) # False
https://md2pdf.netlify.app 33/250
11/03/2023, 17:47
isdigit(): Checks if all characters in a string are numbers (0-9 and some other unicode
characters for numbers)
challenge = 'Thirty'
print(challenge.isdigit()) # False
challenge = '30'
print(challenge.isdigit()) # True
challenge = '\u00B2'
print(challenge.isdigit()) # True
isnumeric(): Checks if all characters in a string are numbers or number related (just like
isdigit(), just accepts more symbols, like ½)
num = '10'
print(num.isnumeric()) # True
num = '\u00BD' # ½
print(num.isnumeric()) # True
num = '10.5'
print(num.isnumeric()) # False
isidentifier(): Checks for a valid identifier - it checks if a string is a valid variable name
challenge = '30DaysOfPython'
print(challenge.isidentifier()) # False, because it starts with a number
challenge = 'thirty_days_of_python'
print(challenge.isidentifier()) # True
https://md2pdf.netlify.app 34/250
11/03/2023, 17:47
strip(): Removes all given characters starting from the beginning and end of the string
challenge = 'thirty days of pythoonnn'
print(challenge.strip('noth')) # 'irty days of py'
swapcase(): Converts all uppercase characters to lowercase and all lowercase characters to
uppercase characters
challenge = 'thirty days of python'
print(challenge.swapcase()) # THIRTY DAYS OF PYTHON
challenge = 'Thirty Days Of Python'
print(challenge.swapcase()) # tHIRTY dAYS oF pYTHON
🌕 You are an extraordinary person and you have a remarkable potential. You have just completed
day 4 challenges and you are four steps a head in to your way to greatness. Now do some exercises
for your brain and muscles.
💻 Exercises - Day 4
1. Concatenate the string 'Thirty', 'Days', 'Of', 'Python' to a single string, 'Thirty Days Of Python'.
2. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All'.
3. Declare a variable named company and assign it to an initial value "Coding For All".
4. Print the variable company using print().
5. Print the length of the company string using len() method and print().
6. Change all the characters to uppercase letters using upper() method.
7. Change all the characters to lowercase letters using lower() method.
8. Use capitalize(), title(), swapcase() methods to format the value of the string Coding For All.
9. Cut(slice) out the first word of Coding For All string.
10. Check if Coding For All string contains a word Coding using the method index, find or other
methods.
11. Replace the word coding in the string 'Coding For All' to Python.
12. Change Python for Everyone to Python for All using the replace method or other methods.
13. Split the string 'Coding For All' using space as the separator (split()) .
14. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma.
15. What is the character at index 0 in the string Coding For All.
16. What is the last index of the string Coding For All.
17. What character is at index 10 in "Coding For All" string.
18. Create an acronym or an abbreviation for the name 'Python For Everyone'.
19. Create an acronym or an abbreviation for the name 'Coding For All'.
20. Use index to determine the position of the first occurrence of C in Coding For All.
21. Use index to determine the position of the first occurrence of F in Coding For All.
22. Use rfind to determine the position of the last occurrence of l in Coding For All People.
23. Use index or find to find the position of the first occurrence of the word 'because' in the
following sentence: 'You cannot end a sentence with because because because is a
conjunction'
https://md2pdf.netlify.app 36/250
11/03/2023, 17:47
24. Use rindex to find the position of the last occurrence of the word because in the following
sentence: 'You cannot end a sentence with because because because is a conjunction'
25. Slice out the phrase 'because because because' in the following sentence: 'You cannot end a
sentence with because because because is a conjunction'
26. Find the position of the first occurrence of the word 'because' in the following sentence: 'You
cannot end a sentence with because because because is a conjunction'
27. Slice out the phrase 'because because because' in the following sentence: 'You cannot end a
sentence with because because because is a conjunction'
28. Does ''Coding For All' start with a substring Coding?
29. Does 'Coding For All' end with a substring coding?
30. ' Coding For All ' , remove the left and right trailing spaces in the given string.
31. Which one of the following variables return True when we use the method isidentifier():
30DaysOfPython
thirty_days_of_python
32. The following list contains the names of some of python libraries: ['Django', 'Flask', 'Bottle',
'Pyramid', 'Falcon']. Join the list with a hash with space string.
33. Use the new line escape sequence to separate the following sentences.
I am enjoying this challenge.
I just wonder what is next.
🎉 CONGRATULATIONS ! 🎉
https://md2pdf.netlify.app 37/250
11/03/2023, 17:47
Lists with initial values. We use len() to find the length of a list.
fruits = ['banana', 'orange', 'mango', 'lemon'] # list of fruits
vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] # list of vegetabl
animal_products = ['milk', 'meat', 'butter', 'yoghurt'] # list of animal p
web_techs = ['HTML', 'CSS', 'JS', 'React','Redux', 'Node', 'MongDB'] # list of web tec
countries = ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
https://md2pdf.netlify.app 39/250
11/03/2023, 17:47
output
Fruits: ['banana', 'orange', 'mango', 'lemon']
Number of fruits: 4
Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
Number of vegetables: 5
Animal products: ['milk', 'meat', 'butter', 'yoghurt']
Number of animal products: 4
Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB']
Number of web technologies: 7
Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
Number of countries: 5
Negative indexing means beginning from the end, -1 refers to the last item, -2 refers to the second
last item.
List negative indexing
fruits = ['banana', 'orange', 'mango', 'lemon']
first_fruit = fruits[-4]
last_fruit = fruits[-1]
second_last = fruits[-2]
print(first_fruit) # banana
print(last_fruit) # lemon
print(second_last) # mango
# First Example
fruits = ['banana', 'orange', 'mango', 'lemon','lime','apple']
first_fruit, second_fruit, third_fruit, *rest = lst
print(first_fruit) # banana
print(second_fruit) # orange
print(third_fruit) # mango
print(rest) # ['lemon','lime','apple']
# Second Example about unpacking list
first, second, third,*rest, tenth = [1,2,3,4,5,6,7,8,9,10]
print(first) # 1
print(second) # 2
print(third) # 3
print(rest) # [4,5,6,7,8,9]
print(tenth) # 10
# Third Example about unpacking list
countries = ['Germany', 'France','Belgium','Sweden','Denmark','Finland','Norway','Icel
gr, fr, bg, sw, *scandic, es = countries
print(gr)
print(fr)
print(bg)
print(sw)
print(scandic)
print(es)
https://md2pdf.netlify.app 41/250
Slicing Items from a List
11/03/2023, 17:47
Positive Indexing: We can specify a range of positive indexes by specifying the start, end and
step, the return value will be a new list. (default values for start = 0, end = len(lst) - 1 (last
item), step = 1)
fruits = ['banana', 'orange', 'mango', 'lemon']
all_fruits = fruits[0:4] # it returns all the fruits
# this will also give the same result as the one above
all_fruits = fruits[0:] # if we don't set where to stop it takes all the rest
orange_and_mango = fruits[1:3] # it does not include the first index
orange_mango_lemon = fruits[1:]
orange_and_lemon = fruits[::2] # here we used a 3rd argument, step. It will take every
Negative Indexing: We can specify a range of negative indexes by specifying the start, end and
step, the return value will be a new list.
fruits = ['banana', 'orange', 'mango', 'lemon']
all_fruits = fruits[-4:] # it returns all the fruits
orange_and_mango = fruits[-3:-1] # it does not include the last index,['orange', 'mang
orange_mango_lemon = fruits[-3:] # this will give starting from -3 to the end,['orange
reverse_fruits = fruits[::-1] # a negative step will take the list in reverse order,['
Modifying Lists
List is a mutable or modifiable ordered collection of items. Lets modify the fruit list.
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits[0] = 'avocado'
print(fruits) # ['avocado', 'orange', 'mango', 'lemon']
fruits[1] = 'apple'
print(fruits) # ['avocado', 'apple', 'mango', 'lemon']
last_index = len(fruits) - 1
fruits[last_index] = 'lime'
print(fruits) # ['avocado', 'apple', 'mango', 'lime']
https://md2pdf.netlify.app 42/250
Adding Items to a List
11/03/2023, 17:47
To add item to the end of an existing list we use the method append().
# syntax
lst = list()
lst.append(item)
https://md2pdf.netlify.app 43/250
11/03/2023, 17:47
fruits.remove('lemon')
print(fruits) # ['orange', 'mango', 'banana']
fruits.pop(0)
print(fruits) # ['orange', 'mango']
https://md2pdf.netlify.app 44/250
11/03/2023, 17:47
# syntax
lst = ['item1', 'item2']
lst.clear()
Copying a List
It is possible to copy a list by reassigning it to a new variable in the following way: list2 = list1. Now,
list2 is a reference of list1, any changes we make in list2 will also modify the original, list1. But there
are lots of case in which we do not like to modify the original instead we like to have a different
copy. One of way of avoiding the problem above is using copy().
# syntax
lst = ['item1', 'item2']
lst_copy = lst.copy()
Joining Lists
There are several ways to join, or concatenate, two or more lists in Python.
Plus Operator (+)
# syntax
list3 = list1 + list2
positive_numbers = [1, 2, 3, 4, 5]
zero = [0]
negative_numbers = [-5,-4,-3,-2,-1]
integers = negative_numbers + zero + positive_numbers
print(integers) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
fruits = ['banana', 'orange', 'mango', 'lemon']
vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
fruits_and_vegetables = fruits + vegetables
print(fruits_and_vegetables ) # ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Pota
https://md2pdf.netlify.app 45/250
11/03/2023, 17:47
Joining using extend() method The extend() method allows to append list in a list. See the
example below.
# syntax
list1 = ['item1', 'item2']
list2 = ['item3', 'item4', 'item5']
list1.extend(list2)
num1 = [0, 1, 2, 3]
num2= [4, 5, 6]
num1.extend(num2)
print('Numbers:', num1) # Numbers: [0, 1, 2, 3, 4, 5, 6]
negative_numbers = [-5,-4,-3,-2,-1]
positive_numbers = [1, 2, 3,4,5]
zero = [0]
negative_numbers.extend(zero)
negative_numbers.extend(positive_numbers)
print('Integers:', negative_numbers) # Integers: [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
fruits = ['banana', 'orange', 'mango', 'lemon']
vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
fruits.extend(vegetables)
print('Fruits and vegetables:', fruits ) # Fruits and vegetables: ['banana', 'orange',
https://md2pdf.netlify.app 46/250
11/03/2023, 17:47
Reversing a List
The reverse() method reverses the order of a list.
# syntax
lst = ['item1', 'item2']
lst.reverse()
Example:
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.sort()
print(fruits) # sorted in alphabetical order, ['banana', 'lemon', 'man
fruits.sort(reverse=True)
print(fruits) # ['orange', 'mango', 'lemon', 'banana']
ages = [22, 19, 24, 25, 26, 24, 25, 24]
ages.sort()
print(ages) # [19, 22, 24, 24, 24, 25, 25, 26]
https://md2pdf.netlify.app 47/250
11/03/2023, 17:47
ages.sort(reverse=True)
print(ages) # [26, 25, 25, 24, 24, 24, 22, 19]
sorted(): returns the ordered list without modifying the original list Example:
fruits = ['banana', 'orange', 'mango', 'lemon']
print(sorted(fruits)) # ['banana', 'lemon', 'mango', 'orange']
# Reverse order
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits = sorted(fruits,reverse=True)
print(fruits) # ['orange', 'mango', 'lemon', 'banana']
🌕 You are diligent and you have already achieved quite a lot. You have just completed day 5
challenges and you are 5 steps a head in to your way to greatness. Now do some exercises for your
brain and muscles.
💻 Exercises: Day 5
Exercises: Level 1
1. Declare an empty list
2. Declare a list with more than 5 items
3. Find the length of your list
4. Get the first item, the middle item and the last item of the list
5. Declare a list called mixed_data_types, put your(name, age, height, marital status, address)
6. Declare a list variable named it_companies and assign initial values Facebook, Google,
Microsoft, Apple, IBM, Oracle and Amazon.
7. Print the list using print()
8. Print the number of companies in the list
9. Print the first, middle and last company
10. Print the list after modifying one of the companies
11. Add an IT company to it_companies
12. Insert an IT company in the middle of the companies list
13. Change one of the it_companies names to uppercase (IBM excluded!)
14. Join the it_companies with a string '#; '
https://md2pdf.netlify.app 48/250
11/03/2023, 17:47
27. After joining the lists in question 26. Copy the joined list and assign it to a variable full_stack.
Then insert Python and SQL after Redux.
Exercises: Level 2
1. The following is a list of 10 students ages:
ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24]
Sort the list and find the min and max age
Add the min age and the max age again to the list
Find the median age (one middle item or two middle items divided by two)
Find the average age (sum of all items divided by their number )
Find the range of the ages (max minus min)
Compare the value of (min - average) and (max - average), use abs() method
1. Find the middle country(ies) in the countries list
2. Divide the countries list into two equal lists if it is even if not one more country for the first half.
https://md2pdf.netlify.app 49/250
11/03/2023, 17:47
3. ['China', 'Russia', 'USA', 'Finland', 'Sweden', 'Norway', 'Denmark']. Unpack the first three
countries and the rest as scandic countries.
🎉 CONGRATULATIONS ! 🎉
<< Day 4 | Day 6 >>
30 Days Of Python: Day 6 - Tuples
LinkedIn Follow @asabeneh
Tuple length
We use the len() method to get the length of a tuple.
# syntax
tpl = ('item1', 'item2', 'item3')
len(tpl)
https://md2pdf.netlify.app 51/250
11/03/2023, 17:47
last_index =len(fruits) - 1
last_fruit = fruits[las_index]
Negative indexing Negative indexing means beginning from the end, -1 refers to the last item,
-2 refers to the second last and the negative of the list/tuple length refers to the first item.
Tuple Negative indexing
# Syntax
tpl = ('item1', 'item2', 'item3','item4')
first_item = tpl[-4]
second_item = tpl[-3]
Slicing tuples
We can slice out a sub-tuple by specifying a range of indexes where to start and where to end in
the tuple, the return value will be a new tuple with the specified items.
Range of Positive Indexes
# Syntax
tpl = ('item1', 'item2', 'item3','item4')
all_items = tpl[0:4] # all items
all_items = tpl[0:] # all items
middle_two_items = tpl[1:3] # does not include item at index 3
https://md2pdf.netlify.app 52/250
11/03/2023, 17:47
Joining Tuples
We can join two or more tuples using + operator
# syntax
tpl1 = ('item1', 'item2', 'item3')
tpl2 = ('item4', 'item5','item6')
tpl3 = tpl1 + tpl2
https://md2pdf.netlify.app 53/250
11/03/2023, 17:47
Deleting Tuples
It is not possible to remove a single item in a tuple but it is possible to delete the tuple itself using
del.
# syntax
tpl1 = ('item1', 'item2', 'item3')
del tpl1
🌕 You are so brave, you made it to this far. You have just completed day 6 challenges and you are
6 steps a head in to your way to greatness. Now do some exercises for your brain and for your
muscle.
💻 Exercises: Day 6
Exercises: Level 1
1. Create an empty tuple
2. Create a tuple containing names of your sisters and your brothers (imaginary siblings are fine)
3. Join brothers and sisters tuples and assign it to siblings
4. How many siblings do you have?
5. Modify the siblings tuple and add the name of your father and mother and assign it to
family_members
Exercises: Level 2
1. Unpack siblings and parents from family_members
2. Create fruits, vegetables and animal products tuples. Join the three tuples and assign it to a
variable called food_stuff_tp.
3. Change the about food_stuff_tp tuple to a food_stuff_lt list
4. Slice out the middle item or items from the food_stuff_tp tuple or food_stuff_lt list.
5. Slice out the first three items and the last three items from food_staff_lt list
6. Delete the food_staff_tp tuple completely
https://md2pdf.netlify.app 54/250
11/03/2023, 17:47
Sets
Set is a collection of items. Let me take you back to your elementary or high school Mathematics
lesson. The Mathematics definition of a set can be applied also in Python. Set is a collection of
unordered and un-indexed distinct elements. In Python set is used to store unique items, and it is
possible to find the union, intersection, difference, symmetric difference, subset, super set and
disjoint set among sets.
Creating a Set
We use curly brackets, {} to create a set or the set() built-in function.
Creating an empty set
# syntax
st = {}
# or
st = set()
Example:
# syntax
fruits = {'banana', 'orange', 'mango', 'lemon'}
Example:
https://md2pdf.netlify.app 56/250
11/03/2023, 17:47
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
print('mango' in fruits ) # True
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')
Add multiple items using update() The update() allows to add multiple items to a set. The
update() takes a list argument.
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])
https://md2pdf.netlify.app 57/250
11/03/2023, 17:47
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)
The pop() methods remove a random item from a list and it returns the removed item.
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.pop() # removes a random item from the set
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()
https://md2pdf.netlify.app 58/250
Deleting a Set
11/03/2023, 17:47
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
del fruits
Example:
fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}
Joining Sets
We can join two sets using the union() or update() method.
Union This method returns a new set
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2)
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
https://md2pdf.netlify.app 59/250
11/03/2023, 17:47
Example:
fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
fruits.update(vegetables)
print(fruits) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage',
Example:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.intersection(even_numbers) # {0, 2, 4, 6, 8, 10}
https://md2pdf.netlify.app 60/250
11/03/2023, 17:47
Example:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.issubset(even_numbers) # False, because it is a super set
whole_numbers.issuperset(even_numbers) # True
Example:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.difference(even_numbers) # {1, 3, 5, 7, 9}
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
https://md2pdf.netlify.app 61/250
11/03/2023, 17:47
# it means (A\B)∪(B\A)
st2.symmetric_difference(st1) # {'item1', 'item4'}
Example:
whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
some_numbers = {1, 2, 3, 4, 5}
whole_numbers.symmetric_difference(some_numbers) # {0, 6, 7, 8, 9, 10}
Joining Sets
If two sets do not have a common item or items we call them disjoint sets. We can check if two sets
are joint or disjoint using isdisjoint() method.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # False
Example:
even_numbers = {0, 2, 4 ,6, 8}
even_numbers = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # True, because no common item
🌕 You are a rising star . You have just completed day 7 challenges and you are 7 steps ahead in to
your way to greatness. Now do some exercises for your brain and muscles.
💻 Exercises: Day 7
# sets
it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'}
A = {19, 22, 24, 20, 25, 26}
B = {19, 22, 20, 25, 26, 24, 28, 27}
age = [22, 19, 24, 25, 26, 24, 25, 24]
https://md2pdf.netlify.app 62/250
Exercises: Level 1
11/03/2023, 17:47
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
https://md2pdf.netlify.app 64/250
11/03/2023, 17:47
}
}
The dictionary above shows that a value could be any data types:string, boolean, list, tuple, set or a
dictionary.
Dictionary Length
It checks the number of 'key: value' pairs in the dictionary.
# syntax
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
print(len(dct)) # 4
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
print(len(person)) # 7
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
https://md2pdf.netlify.app 65/250
11/03/2023, 17:47
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
print(person['first_name']) # Asabeneh
print(person['country']) # Finland
print(person['skills']) # ['JavaScript', 'React', 'Node', 'MongoDB', 'Python']
print(person['skills'][0]) # JavaScript
print(person['address']['street']) # Space street
print(person['city']) # Error
Accessing an item by key name raises an error if the key does not exist. To avoid this error first we
have to check if a key exist or we can use the get method. The get method returns None, which is a
NoneType object data type, if the key does not exist.
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
print(person.get('first_name')) # Asabeneh
print(person.get('country')) # Finland
print(person.get('skills')) #['HTML','CSS','JavaScript', 'React', 'Node', 'MongoDB', '
print(person.get('city')) # None
Example:
https://md2pdf.netlify.app 66/250
11/03/2023, 17:47
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
person['job_title'] = 'Instructor'
person['skills'].append('HTML')
print(person)
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
person['first_name'] = 'Eyob'
person['age'] = 252
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
person.pop('first_name') # Removes the firstname item
person.popitem() # Removes the address item
del person['is_married'] # Removes the is_married item
Clearing a Dictionary
If we don't want the items in a dictionary we can clear them using clear() method
https://md2pdf.netlify.app 68/250
11/03/2023, 17:47
# syntax
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
print(dct.clear()) # None
Deleting a Dictionary
If we do not use the dictionary we can delete it completely
# syntax
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
del dct
Copy a Dictionary
We can copy a dictionary using a copy() method. Using copy we can avoid mutation of the original
dictionary.
# syntax
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
dct_copy = dct.copy() # {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'va
🌕 You are astonishing. Now, you are super charged with the power of dictionaries. You have just
completed day 8 challenges and you are 8 steps a head in to your way to greatness. Now do some
exercises for your brain and muscles.
https://md2pdf.netlify.app 69/250
💻 Exercises: Day 8
11/03/2023, 17:47
Conditionals
By default, statements in Python script are executed sequentially from top to bottom. If the
processing logic require so, the sequential flow of execution can be altered in two way:
Conditional execution: a block of one or more statements will be executed if a certain
expression is true
Repetitive execution: a block of one or more statements will be repetitively executed as long as
a certain expression is true. In this section, we will cover if, else, elif statements. The
comparison and logical operators we learned in previous sections will be useful here.
If Condition
In python and other programming languages the key word if is used to check if a condition is true
and to execute the block code. Remember the indentation after the colon.
# syntax
if condition:
this part of code runs for truthy conditions
Example: 1
a = 3
if a > 0:
print('A is a positive number')
# A is a positive number
As you can see in the example above, 3 is greater than 0. The condition was true and the block
code was executed. However, if the condition is false, we do not see the result. In order to see the
result of the falsy condition, we should have another block, which is going to be else.
If Else
If condition is true the first block will be executed, if not the else condition will run.
# syntax
if condition:
this part of code runs for truthy conditions
else:
this part of code runs for false conditions
https://md2pdf.netlify.app 71/250
11/03/2023, 17:47
**Example: **
a = 3
if a < 0:
print('A is a negative number')
else:
print('A is a positive number')
The condition above proves false, therefore the else block was executed. How about if our
condition is more than two? We could use _ elif_.
If Elif Else
In our daily life, we make decisions on daily basis. We make decisions not by checking one or two
conditions but multiple conditions. As similar to life, programming is also full of conditions. We use
elif when we have multiple conditions.
# syntax
if condition:
code
elif condition:
code
else:
code
**Example: **
a = 0
if a > 0:
print('A is a positive number')
elif a < 0:
print('A is a negative number')
else:
print('A is zero')
Short Hand
# syntax
code if condition else code
**Example: **
https://md2pdf.netlify.app 72/250
11/03/2023, 17:47
a = 3
print('A is positive') if a > 0 else print('A is negative') # first condition met, 'A
Nested Conditions
Conditions can be nested
# syntax
if condition:
code
if condition:
code
**Example: **
a = 0
if a > 0:
if a % 2 == 0:
print('A is a positive and even integer')
else:
print('A is a positive number')
elif a == 0:
print('A is zero')
else:
print('A is a negative number')
**Example: **
a = 0
if a > 0 and a % 2 == 0:
print('A is an even and positive integer')
elif a > 0 and a % 2 != 0:
print('A is a positive integer')
elif a == 0:
print('A is zero')
https://md2pdf.netlify.app 73/250
11/03/2023, 17:47
else:
print('A is negative')
**Example: **
user = 'James'
access_level = 3
if user == 'admin' or access_level >= 4:
print('Access granted!')
else:
print('Access denied!')
🌕 You are doing great.Never give up because great things take time. You have just completed day
9 challenges and you are 9 steps a head in to your way to greatness. Now do some exercises for
your brain and muscles.
💻 Exercises: Day 9
Exercises: Level 1
1. Get user input using input(“Enter your age: ”). If user is 18 or older, give feedback: You are old
enough to drive. If below 18 give feedback to wait for the missing amount of years. Output:
Enter your age: 30
You are old enough to learn to drive.
Output:
Enter your age: 15
You need 3 more years to learn to drive.
2. Compare the values of my_age and your_age using if … else. Who is older (me or you)? Use
input(“Enter your age: ”) to get the age as input. You can use a nested condition to print 'year'
for 1 year difference in age, 'years' for bigger differences, and a custom text if my_age =
your_age. Output:
Enter your age: 30
You are 5 years older than me.
https://md2pdf.netlify.app 74/250
11/03/2023, 17:47
3. Get two numbers from the user using input prompt. If a is greater than b return a is greater
than b, if a is less b return a is smaller than b, else a is equal to b. Output:
Enter number one: 4
Enter number two: 3
4 is greater than 3
2. Check if the season is Autumn, Winter, Spring or Summer. If the user input is: September,
October or November, the season is Autumn. December, January or February, the season is
Winter. March, April or May, the season is Spring June, July or August, the season is Summer
3. The following list contains some fruits:
fruits = ['banana', 'orange', 'mango', 'lemon']
If a fruit doesn't exist in the list add the fruit to the list and print the modified list. If the fruit
exists print('That fruit already exist in the list')
Exercises: Level 3
4. Here we have a person dictionary. Feel free to modify it!
person={
'first_name': 'Asabeneh',
'last_name': 'Yetayeh',
'age': 250,
'country': 'Finland',
'is_marred': True,
'skills': ['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address': {
'street': 'Space street',
'zipcode': '02210'
}
}
https://md2pdf.netlify.app 75/250
11/03/2023, 17:47
* Check if the person dictionary has skills key, if so print out the middle skill in
* Check if the person dictionary has skills key, if so check if the person has 'Pytho
* If a person skills has only JavaScript and React, print('He is a front end develope
* If the person is married and if he lives in Finland, print the information in the f
🎉 CONGRATULATIONS ! 🎉
<< Day 8 | Day 10 >>
30 Days Of Python: Day 10 - Loops
LinkedIn Follow @asabeneh
Life is full of routines. In programming we also do lots of repetitive tasks. In order to handle
repetitive task programming languages use loops. Python programming language also provides the
following types of two loops:
1. while loop
2. for loop
While Loop
We use the reserved word while to make a while loop. It is used to execute a block of statements
repeatedly until a given condition is satisfied. When the condition becomes false, the lines of code
after the loop will be continued to be executed.
# syntax
while condition:
code goes here
Example:
count = 0
while count < 5:
print(count)
count = count + 1
#prints from 0 to 4
In the above while loop, the condition becomes false when count is 5. That is when the loop stops.
If we are interested to run block of code once the condition is no longer true, we can use else.
# syntax
while condition:
code goes here
else:
code goes here
Example:
count = 0
while count < 5:
print(count)
count = count + 1
else:
print(count)
https://md2pdf.netlify.app 77/250
11/03/2023, 17:47
The above loop condition will be false when count is 5 and the loop stops, and execution starts the
else statement. As a result 5 will be printed.
Break and Continue - Part 1
Break: We use break when we like to get out of or stop the loop.
# syntax
while condition:
code goes here
if another_condition:
break
Example:
count = 0
while count < 5:
print(count)
count = count + 1
if count == 3:
break
The above while loop only prints 0, 1, 2, but when it reaches 3 it stops.
Continue: With the continue statement we can skip the current iteration, and continue with the
next:
# syntax
while condition:
code goes here
if another_condition:
continue
Example:
count = 0
while count < 5:
if count == 3:
continue
print(count)
count = count + 1
A for keyword is used to make a for loop, similar with other programming languages, but with some
syntax differences. Loop is used for iterating over a sequence (that is either a list, a tuple, a
dictionary, a set, or a string).
For loop with list
# syntax
for iterator in lst:
code goes here
Example:
numbers = [0, 1, 2, 3, 4, 5]
for number in numbers: # number is temporary name to refer to the list's items, valid
print(number) # the numbers will be printed line by line, from 0 to 5
Example:
language = 'Python'
for letter in language:
print(letter)
for i in range(len(language)):
print(language[i])
Example:
numbers = (0, 1, 2, 3, 4, 5)
for number in numbers:
print(number)
https://md2pdf.netlify.app 79/250
11/03/2023, 17:47
For loop with dictionary Looping through a dictionary gives you the key of the dictionary.
# syntax
for iterator in dct:
code goes here
Example:
person = {
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'age':250,
'country':'Finland',
'is_marred':True,
'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address':{
'street':'Space street',
'zipcode':'02210'
}
}
for key in person:
print(key)
Loops in set
# syntax
for iterator in st:
code goes here
Example:
it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'}
for company in it_companies:
print(company)
https://md2pdf.netlify.app 80/250
11/03/2023, 17:47
if condition:
break
Example:
numbers = (0,1,2,3,4,5)
for number in numbers:
print(number)
if number == 3:
break
Example:
numbers = (0,1,2,3,4,5)
for number in numbers:
print(number)
if number == 3:
continue
print('Next number should be ', number + 1) if number != 5 else print("loop's end"
print('outside the loop')
In the example above, if the number equals 3, the step after the condition (but inside the loop) is
skipped and the execution of the loop continues if there are any iterations left.
The Range Function
The range() function is used list of numbers. The range(start, end, step) takes three parameters:
starting, ending and increment. By default it starts from 0 and the increment is 1. The range
sequence needs at least 1 argument (end). Creating sequences using range
lst = list(range(11))
print(lst) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
st = set(range(1, 11)) # 2 arguments indicate start and end of the sequence, step s
print(st) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
lst = list(range(0,11,2))
https://md2pdf.netlify.app 81/250
11/03/2023, 17:47
# syntax
for iterator in range(start, end, step):
Example:
for number in range(11):
print(number) # prints 0 to 10, not including 11
Example:
person = {
'first_name': 'Asabeneh',
'last_name': 'Yetayeh',
'age': 250,
'country': 'Finland',
'is_marred': True,
'skills': ['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
'address': {
'street': 'Space street',
'zipcode': '02210'
}
}
for key in person:
if key == 'skills':
for skill in person['skills']:
print(skill)
For Else
If we want to execute some message when the loop ends, we use else.
https://md2pdf.netlify.app 82/250
11/03/2023, 17:47
# syntax
for iterator in range(start, end, step):
do something
else:
print('The loop ended')
Example:
for number in range(11):
print(number) # prints 0 to 10, not including 11
else:
print('The loop stops at', number)
Pass
In python when statement is required (after semicolon), but we don't like to execute any code
there, we can write the word pass to avoid errors. Also we can use it as a placeholder, for future
statements.
Example:
for number in range(6):
pass
🌕 You established a big milestone, you are unstoppable. Keep going! You have just completed day
10 challenges and you are 10 steps a head in to your way to greatness. Now do some exercises for
your brain and muscles.
💻 Exercises: Day 10
Exercises: Level 1
1. Iterate 0 to 10 using for loop, do the same using while loop.
2. Iterate 10 to 0 using for loop, do the same using while loop.
3. Write a loop that makes seven calls to print(), so we get on the output the following triangle:
#
##
###
####
#####
https://md2pdf.netlify.app 83/250
11/03/2023, 17:47
######
#######
6. Iterate through the list, ['Python', 'Numpy','Pandas','Django', 'Flask'] using a for loop and print
out the items.
7. Use for loop to iterate from 0 to 100 and print only even numbers
8. Use for loop to iterate from 0 to 100 and print only odd numbers
Exercises: Level 2
1. Use for loop to iterate from 0 to 100 and print the sum of all numbers.
The sum of all numbers is 5050.
1. Use for loop to iterate from 0 to 100 and print the sum of all evens and the sum of all odds.
The sum of all evens is 2550. And the sum of all odds is 2500.
https://md2pdf.netlify.app 84/250
Exercises: Level 3
11/03/2023, 17:47
1. Go to the data folder and use the countries.py file. Loop through the countries and extract all
the countries containing the word land.
2. This is a fruit list, ['banana', 'orange', 'mango', 'lemon'] reverse the order using loop.
3. Go to the data folder and use the countries_data.py file.
i. What are the total number of languages in the data
ii. Find the ten most spoken languages from the data
iii. Find the 10 most populated countries in the world
🎉 CONGRATULATIONS ! 🎉
<< Day 9 | Day 11 >>
30 Days Of Python: Day 11 - Functions
LinkedIn Follow @asabeneh
Functions
So far we have seen many built-in Python functions. In this section, we will focus on custom
functions. What is a function? Before we start making functions, let us learn what a function is and
why we need them?
Defining a Function
A function is a reusable block of code or programming statements designed to perform a certain
task. To define or declare a function, Python provides the def keyword. The following is the syntax
for defining a function. The function block of code is executed only if the function is called or
invoked.
Declaring and Calling a Function
When we make a function, we call it declaring a function. When we start using the it, we call it
calling or invoking a function. Function can be declared with or without parameters.
# syntax
# Declaring a function
def function_name():
codes
codes
# Calling a function
function_name()
https://md2pdf.netlify.app 86/250
11/03/2023, 17:47
Example:
def greetings (name):
message = name + ', welcome to Python for Everyone!'
return message
https://md2pdf.netlify.app 87/250
11/03/2023, 17:47
print(greetings('Asabeneh'))
def add_ten(num):
ten = 10
return num + ten
print(add_ten(90))
def square_number(x):
return x * x
print(square_number(2))
def sum_of_numbers(n):
total = 0
for i in range(n+1):
total+=i
print(total)
print(sum_of_numbers(10)) # 55
print(sum_of_numbers(100)) # 5050
Two Parameter: A function may or may not have a parameter or parameters. A function may
also have two or more parameters. If our function takes parameters we should call it with
arguments. Let us check a function with two parameters:
# syntax
# Declaring a function
def function_name(para1, para2):
codes
codes
# Calling function
print(function_name(arg1, arg2))
Example:
def generate_full_name (first_name, last_name):
space = ' '
full_name = first_name + space + last_name
return full_name
print('Full Name: ', generate_full_name('Asabeneh','Yetayeh'))
https://md2pdf.netlify.app 88/250
11/03/2023, 17:47
Example:
def print_fullname(firstname, lastname):
space = ' '
full_name = firstname + space + lastname
print(full_name)
print(print_fullname(firstname = 'Asabeneh', lastname = 'Yetayeh'))
https://md2pdf.netlify.app 89/250
11/03/2023, 17:47
def print_name(firstname):
return firstname
print_name('Asabeneh') # Asabeneh
Returning a number:
Example:
def add_two_numbers (num1, num2):
total = num1 + num2
return total
print(add_two_numbers(2, 3))
Sometimes we pass default values to parameters, when we invoke the function. If we do not pass
arguments when calling the function, their default values will be used.
# syntax
# Declaring a function
def function_name(param = value):
codes
codes
# Calling function
function_name()
function_name(arg)
Example:
def greetings (name = 'Peter'):
message = name + ', welcome to Python for Everyone!'
return message
print(greetings())
print(greetings('Asabeneh'))
print(generate_full_name())
print(generate_full_name('David','Smith'))
https://md2pdf.netlify.app 91/250
11/03/2023, 17:47
codes
# Calling function
function_name(param1, param2, param3,..)
Example:
def sum_all_nums(*nums):
total = 0
for num in nums:
total += num # same as total = total + num
return total
print(sum_all_nums(2, 3, 5)) # 10
🌕 You achieved quite a lot so far. Keep going! You have just completed day 11 challenges and you
are 11 steps a head in to your way to greatness. Now do some exercises for your brain and muscles.
Testimony
Now it is time to express your thoughts about the Author and 30DaysOfPython. You can leave your
testimonial on this link
💻 Exercises: Day 11
Exercises: Level 1
1. Declare a function add_two_numbers. It takes two parameters and it returns a sum.
https://md2pdf.netlify.app 92/250
11/03/2023, 17:47
10. Declare a function named capitalize_list_items. It takes a list as a parameter and it returns a
capitalized list of items
11. Declare a function named add_item. It takes a list and an item parameters. It returns a list with
the item added at the end.
food_staff = ['Potato', 'Tomato', 'Mango', 'Milk'];
print(add_item(food_staff, 'Meat')) # ['Potato', 'Tomato', 'Mango', 'Milk','Meat']
numbers = [2, 3, 7, 9];
print(add_item(numbers, 5)) [2, 3, 7, 9, 5]
12. Declare a function named remove_item. It takes a list and an item parameters. It returns a list
with the item removed from it.
food_staff = ['Potato', 'Tomato', 'Mango', 'Milk'];
print(remove_item(food_staff, 'Mango')) # ['Potato', 'Tomato', 'Milk'];
numbers = [2, 3, 7, 9];
print(remove_item(numbers, 3)) # [2, 7, 9]
13. Declare a function named sum_of_numbers. It takes a number parameter and it adds all the
numbers in that range.
https://md2pdf.netlify.app 93/250
11/03/2023, 17:47
print(sum_of_numbers(5)) # 15
print(sum_all_numbers(10)) # 55
print(sum_all_numbers(100)) # 5050
14. Declare a function named sum_of_odds. It takes a number parameter and it adds all the odd
numbers in that range.
15. Declare a function named sum_of_even. It takes a number parameter and it adds all the even
numbers in that - range.
Exercises: Level 2
1. Declare a function named evens_and_odds . It takes a positive integer as parameter and it
counts number of evens and odds in the number.
print(evens_and_odds(100))
# The number of odds are 50.
# The number of evens are 51.
1. Call your function factorial, it takes a whole number as a parameter and it return a factorial of
the number
2. Call your function is_empty, it takes a parameter and it checks if it is empty or not
3. Write different functions which take lists. They should calculate_mean, calculate_median,
calculate_mode, calculate_range, calculate_variance, calculate_std (standard deviation).
Exercises: Level 3
1. Write a function called is_prime, which checks if a number is prime.
2. Write a functions which checks if all items are unique in the list.
3. Write a function which checks if all the items of the list are of the same data type.
4. Write a function which check if provided variable is a valid python variable
5. Go to the data folder and access the countries-data.py file.
Create a function called the most_spoken_languages in the world. It should return 10 or 20
most spoken languages in the world in descending order
Create a function called the most_populated_countries. It should return 10 or 20 most
populated countries in descending order.
🎉 CONGRATULATIONS ! 🎉
<< Day 10 | Day 12 >>
30 Days Of Python: Day 12 - Modules
https://md2pdf.netlify.app 94/250
11/03/2023, 17:47
https://md2pdf.netlify.app 95/250
11/03/2023, 17:47
# mymodule.py file
def generate_full_name(firstname, lastname):
return firstname + ' ' + lastname
Create main.py file in your project directory and import the mymodule.py file.
Importing a Module
To import the file we use the import keyword and the name of the file only.
# main.py file
import mymodule
print(mymodule.generate_full_name('Asabeneh', 'Yetayeh')) # Asabeneh Yetayeh
Like other programming languages we can also import modules by importing the file/function using
the key word import. Let's import the common module we will use most of the time. Some of the
common built-in modules: math, datetime, os,sys, random, statistics, collections, json,re
OS Module
Using python os module it is possible to automatically perform many operating system tasks. The
OS module in Python provides functions for creating, changing current working directory, and
removing a directory (folder), fetching its contents, changing and identifying the current directory.
# import the module
import os
# Creating a directory
os.mkdir('directory_name')
# Changing the current directory
os.chdir('path')
# Getting current working directory
os.getcwd()
# Removing directory
os.rmdir()
Sys Module
The sys module provides functions and variables used to manipulate different parts of the Python
runtime environment. Function sys.argv returns a list of command line arguments passed to a
Python script. The item at index 0 in this list is always the name of the script, at index 1 is the
argument passed from the command line.
Example of a script.py file:
import sys
#print(sys.argv[0], argv[1],sys.argv[2]) # this line would print out: filename argume
print('Welcome {}. Enjoy {} challenge!'.format(sys.argv[1], sys.argv[2]))
The result:
Welcome Asabeneh. Enjoy 30DayOfPython challenge!
# to exit sys
sys.exit()
# To know the largest integer variable it takes
sys.maxsize
# To know environment path
sys.path
# To know the version of python you are using
sys.version
Statistics Module
The statistics module provides functions for mathematical statistics of numeric data. The popular
statistical functions which are defined in this module: mean, median, mode, stdev etc.
from statistics import * # importing all the statistics modules
ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26]
print(mean(ages)) # ~22.9
print(median(ages)) # 23
print(mode(ages)) # 20
print(stdev(ages)) # ~2.3
Math Module
Module containing many mathematical operations and constants.
import math
print(math.pi) # 3.141592653589793, pi constant
print(math.sqrt(2)) # 1.4142135623730951, square root
print(math.pow(2, 3)) # 8.0, exponential function
print(math.floor(9.81)) # 9, rounding to the lowest
print(math.ceil(9.81)) # 10, rounding to the highest
print(math.log10(100)) # 2, logarithm with 10 as base
Now, we have imported the math module which contains lots of function which can help us to
perform mathematical calculations. To check what functions the module has got, we can use
help(math), or dir(math). This will display the available functions in the module. If we want to import
only a specific function from the module we import it as follows:
from math import pi
print(pi)
https://md2pdf.netlify.app 98/250
11/03/2023, 17:47
But if we want to import all the function in math module we can use * .
from math import *
print(pi) # 3.141592653589793, pi constant
print(sqrt(2)) # 1.4142135623730951, square root
print(pow(2, 3)) # 8.0, exponential
print(floor(9.81)) # 9, rounding to the lowest
print(ceil(9.81)) # 10, rounding to the highest
print(math.log10(100)) # 2
String Module
A string module is a useful module for many purposes. The example below shows some use of the
string module.
import string
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits) # 0123456789
print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Random Module
By now you are familiar with importing modules. Let us do one more import to get very familiar with
it. Let us import random module which gives us a random number between 0 and 0.9999.... The
random module has lots of functions but in this section we will only use random and randint.
from random import random, randint
print(random()) # it doesn't take any arguments; it returns a value between 0 and 0.
print(randint(5, 20)) # it returns a random integer number between [5, 20] inclusive
https://md2pdf.netlify.app 99/250
11/03/2023, 17:47
🌕 You are going far. Keep going! You have just completed day 12 challenges and you are 12 steps
a head in to your way to greatness. Now do some exercises for your brain and muscles.
💻 Exercises: Day 12
Exercises: Level 1
1. Writ a function which generates a six digit/character random_user_id.
print(random_user_id());
'1ee33d'
2. Modify the previous task. Declare a function named user_id_gen_by_user. It doesn’t take any
parameters but it takes two inputs using input(). One of the inputs is the number of characters
and the second input is the number of IDs which are supposed to be generated.
print(user_id_gen_by_user()) # user input: 5 5
#output:
#kcsy2
#SMFYb
#bWmeq
#ZXOYh
#2Rgxf
print(user_id_gen_by_user()) # 16 5
#1GCSgPLMaBAVQZ26
#YD7eFwNQKNs7qXaT
#ycArC5yrRupyG00S
#UbGxOFI7UXSWAyKN
#dIV0SSUTgAdKwStr
3. Write a function named rgb_color_gen. It will generate rgb colors (3 values ranging from 0 to
255 each).
print(rgb_color_gen())
# rgb(125,244,255) - the output should be in this form
Exercises: Level 2
1. Write a function list_of_hexa_colors which returns any number of hexadecimal colors in an
array (six hexadecimal numbers written after #. Hexadecimal numeral system is made out of 16
symbols, 0-9 and first 6 letters of the alphabet, a-f. Check the task 6 for output examples).
2. Write a function list_of_rgb_colors which returns any number of RGB colors in an array.
3. Write a function generate_colors which can generate any number of hexa or rgb colors.
https://md2pdf.netlify.app 100/250
11/03/2023, 17:47
generate_colors('hexa', 3) # ['#a3e12f','#03ed55','#eb3d2b']
generate_colors('hexa', 1) # ['#b334ef']
generate_colors('rgb', 3) # ['rgb(5, 55, 175','rgb(50, 105, 100','rgb(15, 26, 80']
generate_colors('rgb', 1) # ['rgb(33,79, 176)']
Exercises: Level 3
1. Call your function shuffle_list, it takes a list as a parameter and it returns a shuffled list
2. Write a function which returns an array of seven random numbers in a range of 0-9. All the
numbers must be unique.
🎉 CONGRATULATIONS ! 🎉
<< Day 11 | Day 13>>
30 Days Of Python: Day 13 - List
Comprehension
LinkedIn Follow @asabeneh
# syntax
[i for i in iterable if expression]
Example:1
For instance if you want to change a string to a list of characters. You can use a couple of methods.
Let's see some of them:
# One way
language = 'Python'
lst = list(language) # changing the string to list
print(type(lst)) # list
print(lst) # ['P', 'y', 't', 'h', 'o', 'n']
Example:2
For instance if you want to generate a list of numbers
# Generating numbers
numbers = [i for i in range(11)] # to generate numbers from 0 to 10
print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Example:2
List comprehension can be combined with if expression
# Generating even numbers
even_numbers = [i for i in range(21) if i % 2 == 0] # to generate even numbers list i
print(even_numbers) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
https://md2pdf.netlify.app 102/250
11/03/2023, 17:47
Lambda Function
Lambda function is a small anonymous function without a name. It can take any number of
arguments, but can only have one expression. Lambda function is similar to anonymous functions in
JavaScript. We need it when we want to write an anonymous function inside another function.
Creating a Lambda Function
To create a lambda function we use lambda keyword followed by a parameter(s), followed by an
expression. See the syntax and the example below. Lambda function does not use return but it
explicitly returns the expression.
# syntax
x = lambda param1, param2, param3: param1 + param2 + param2
print(x(arg1, arg2, arg3))
Example:
# Named function
def add_two_nums(a, b):
return a + b
print(add_two_nums(2, 3)) # 5
# Lets change the above function to a lambda function
add_two_nums = lambda a, b: a + b
print(add_two_nums(2,3)) # 5
square = lambda x : x ** 2
print(square(3)) # 9
cube = lambda x : x ** 3
print(cube(3)) # 27
# Multiple variables
https://md2pdf.netlify.app 103/250
11/03/2023, 17:47
multiple_variable = lambda a, b, c: a ** 2 - 3 * b + 4 * c
print(multiple_variable(5, 5, 3)) # 22
cube = power(2)(3) # function power now need 2 arguments to run, in separate rounded
print(cube) # 8
two_power_of_five = power(2)(5)
print(two_power_of_five) # 32
🌕 Keep up the good work. Keep the momentum going, the sky is the limit! You have just
completed day 13 challenges and you are 13 steps a head in to your way to greatness. Now do
some exercises for your brain and muscles.
💻 Exercises: Day 13
1. Filter only negative and zero in the list using list comprehension
numbers = [-4, -3, -2, -1, 0, 2, 4, 6]
output
[1, 2, 3, 4, 5, 6, 7, 8, 9]
https://md2pdf.netlify.app 104/250
11/03/2023, 17:47
7. Write a lambda function which can solve a slope or y-intercept of linear functions.
🎉 CONGRATULATIONS ! 🎉
<< Day 12 | Day 14>>
30 Days Of Python: Day 14 - Higher Order
Functions
LinkedIn Follow @asabeneh
https://md2pdf.netlify.app 106/250
11/03/2023, 17:47
result = higher_order_function('square')
print(result(3)) # 9
result = higher_order_function('cube')
print(result(3)) # 27
result = higher_order_function('absolute')
print(result(-3)) # 3
You can see from the above example that the higher order function is returning different functions
depending on the passed parameter
Python Closures
Python allows a nested function to access the outer scope of the enclosing function. This is is
known as a Closure. Let us have a look at how closures work in Python. In Python, closure is
created by nesting a function inside another encapsulating function and then returning the inner
function. See the example below.
Example:
def add_ten():
ten = 10
def add(num):
https://md2pdf.netlify.app 107/250
11/03/2023, 17:47
closure_result = add_ten()
print(closure_result(5)) # 15
print(closure_result(10)) # 20
Python Decorators
A decorator is a design pattern in Python that allows a user to add new functionality to an existing
object without modifying its structure. Decorators are usually called before the definition of a
function you want to decorate.
Creating Decorators
To create a decorator function, we need an outer function with an inner wrapper function.
Example:
# Normal function
def greeting():
return 'Welcome to Python'
def uppercase_decorator(function):
def wrapper():
func = function()
make_uppercase = func.upper()
return make_uppercase
return wrapper
g = uppercase_decorator(greeting)
print(g()) # WELCOME TO PYTHON
# First Decorator
def uppercase_decorator(function):
def wrapper():
func = function()
make_uppercase = func.upper()
return make_uppercase
return wrapper
# Second decorator
def split_string_decorator(function):
def wrapper():
func = function()
splitted_string = func.split()
return splitted_string
return wrapper
@split_string_decorator
@uppercase_decorator # order with decorators is important in this case - .upper()
def greeting():
return 'Welcome to Python'
print(greeting()) # WELCOME TO PYTHON
@decorator_with_parameters
def print_full_name(first_name, last_name, country):
print("I am {} {}. I love to teach.".format(
first_name, last_name, country))
print_full_name("Asabeneh", "Yetayeh",'Finland')
Some of the built-in higher order functions that we cover in this part are map(), filter, and reduce.
Lambda function can be passed as a parameter and the best use case of lambda functions is in
functions like map, filter and reduce.
Python - Map Function
The map() function is a built-in function that takes a function and iterable as parameters.
# syntax
map(function, iterable)
Example:1
numbers = [1, 2, 3, 4, 5] # iterable
def square(x):
return x ** 2
numbers_squared = map(square, numbers)
print(list(numbers_squared)) # [1, 4, 9, 16, 25]
# Lets apply it with a lambda function
numbers_squared = map(lambda x : x ** 2, numbers)
print(list(numbers_squared)) # [1, 4, 9, 16, 25]
Example:2
numbers_str = ['1', '2', '3', '4', '5'] # iterable
numbers_int = map(int, numbers_str)
print(list(numbers_int)) # [1, 2, 3, 4, 5]
Example:3
names = ['Asabeneh', 'Lidiya', 'Ermias', 'Abraham'] # iterable
def change_to_upper(name):
return name.upper()
What actually map does is iterating over a list. For instance, it changes the names to upper case
and returns a new list.
https://md2pdf.netlify.app 110/250
Python - Filter Function
11/03/2023, 17:47
The filter() function calls the specified function which returns boolean for each item of the specified
iterable (list). It filters the items that satisfy the filtering criteria.
# syntax
filter(function, iterable)
Example:1
# Lets filter only even nubers
numbers = [1, 2, 3, 4, 5] # iterable
def is_even(num):
if num % 2 == 0:
return True
return False
Example:2
numbers = [1, 2, 3, 4, 5] # iterable
def is_odd(num):
if num % 2 != 0:
return True
return False
The reduce() function is defined in the functools module and we should import it from this module.
Like map and filter it takes two parameters, a function and an iterable. However, it does not return
another iterable, instead it returns a single value. Example:1
numbers_str = ['1', '2', '3', '4', '5'] # iterable
def add_two_nums(x, y):
return int(x) + int(y)
💻 Exercises: Day 14
countries = ['Estonia', 'Finland', 'Sweden', 'Denmark', 'Norway', 'Iceland']
names = ['Asabeneh', 'Lidiya', 'Ermias', 'Abraham']
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Exercises: Level 1
1. Explain the difference between map, filter, and reduce.
2. Explain the difference between higher order function, closure and decorator
3. Define a call function before map, filter or reduce, see examples.
4. Use for loop to print each country in the countries list.
5. Use for to print each name in the names list.
6. Use for to print each number in the numbers list.
Exercises: Level 2
1. Use map to create a new list by changing each country to uppercase in the countries list
2. Use map to create a new list by changing each number to its square in the numbers list
3. Use map to change each name to uppercase in the names list
4. Use filter to filter out countries containing 'land'.
5. Use filter to filter out countries having exactly six characters.
6. Use filter to filter out countries containing six letters and more in the country list.
7. Use filter to filter out countries starting with an 'E'
8. Chain two or more list iterators (eg. arr.map(callback).filter(callback).reduce(callback))
9. Declare a function called get_string_lists which takes a list as a parameter and then returns a
list containing only string items.
10. Use reduce to sum all the numbers in the numbers list.
https://md2pdf.netlify.app 112/250
11/03/2023, 17:47
11. Use reduce to concatenate all the countries and to produce this sentence: Estonia, Finland,
Sweden, Denmark, Norway, and Iceland are north European countries
12. Declare a function called categorize_countries that returns a list of countries with some
common pattern (you can find the countries list in this repository as countries.js(eg 'land', 'ia',
'island', 'stan')).
13. Create a function returning a dictionary, where keys stand for starting letters of countries and
values are the number of country names starting with that letter.
14. Declare a get_first_ten_countries function - it returns a list of first ten countries from the
countries.js list in the data folder.
15. Declare a get_last_ten_countries function that returns the last ten countries in the countries
list.
Exercises: Level 3
1. Use the countries_data.py (https://github.com/Asabeneh/30-Days-Of-
Python/blob/master/data/countries-data.py) file and follow the tasks below:
Sort countries by name, by capital, by population
Sort out the ten most spoken languages by location.
Sort out the ten most populated countries.
🎉 CONGRATULATIONS ! 🎉
<< Day 13 | Day 15>>
30 Days Of Python: Day 15 - Python Type
Errors
LinkedIn Follow @asabeneh
AttributeError
KeyError
TypeError
ImportError
ValueError
ZeroDivisionError
💻 Exercises: Day 15
📘 Day 15
Python Error Types
When we write code it is common that we make a typo or some other common error. If our code
fails to run, the Python interpreter will display a message, containing feedback with information on
where the problem occurs and the type of an error. It will also sometimes gives us suggestions on a
possible fix. Understanding different types of errors in programming languages will help us to
debug our code quickly and also it makes us better at what we do.
Let us see the most common error types one by one. First let us open our Python interactive shell.
Go to your you computer terminal and write 'python'. The python interactive shell will be opened.
SyntaxError
Example 1: SyntaxError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'hello world'
File "<stdin>", line 1
print 'hello world'
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello world')
>>>
As you can see we made a syntax error because we forgot to enclose the string with parenthesis
and Python already suggests the solution. Let us fix it.
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
https://md2pdf.netlify.app 114/250
11/03/2023, 17:47
The error was a SyntaxError. After the fix our code was executed without a hitch. Let see more error
types.
NameError
Example 1: NameError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>>
As you can see from the message above, name age is not defined. Yes, it is true that we did not
define an age variable but we were trying to print it out as if we had had declared it. Now, lets fix
this by declaring it and assigning with a value.
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>> age = 25
>>> print(age)
25
>>>
The type of error was a NameError. We debugged the error by defining the variable name.
IndexError
https://md2pdf.netlify.app 115/250
11/03/2023, 17:47
Example 1: IndexError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> numbers = [1, 2, 3, 4, 5]
>>> numbers[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>
In the example above, Python raised an IndexError, because the list has only indexes from 0 to 4 ,
so it was out of range.
ModuleNotFoundError
Example 1: ModuleNotFoundError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import maths
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'maths'
>>>
In the example above, I added an extra s to math deliberately and ModuleNotFoundError was
raised. Lets fix it by removing the extra s from math.
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import maths
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'maths'
>>> import math
>>>
We fixed it, so let's use some of the functions from the math module.
AttributeError
https://md2pdf.netlify.app 116/250
11/03/2023, 17:47
Example 1: AttributeError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import maths
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'maths'
>>> import math
>>> math.PI
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'math' has no attribute 'PI'
>>>
As you can see, I made a mistake again! Instead of pi, I tried to call a PI function from maths
module. It raised an attribute error, it means, that the function does not exist in the module. Lets fix
it by changing from PI to pi.
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import maths
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'maths'
>>> import math
>>> math.PI
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'math' has no attribute 'PI'
>>> math.pi
3.141592653589793
>>>
Now, when we call pi from the math module we got the result.
KeyError
Example 1: KeyError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
https://md2pdf.netlify.app 117/250
11/03/2023, 17:47
As you can see, there was a typo in the key used to get the dictionary value. so, this is a key error
and the fix is quite straight forward. Let's do this!
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> user = {'name':'Asab', 'age':250, 'country':'Finland'}
>>> user['name']
'Asab'
>>> user['county']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'county'
>>> user['country']
'Finland'
>>>
We debugged the error, our code ran and we got the value.
TypeError
Example 1: TypeError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 4 + '3'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
In the example above, a TypeError is raised because we cannot add a number to a string. First
solution would be to convert the string to int or float. Another solution would be converting the
number to a string (the result then would be '43'). Let us follow the first fix.
https://md2pdf.netlify.app 118/250
11/03/2023, 17:47
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 4 + '3'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 4 + int('3')
7
>>> 4 + float('3')
7.0
>>>
There is no function called power in the math module, it goes with a different name: pow. Let's
correct it:
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from math import power
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'power' from 'math'
>>> from math import pow
>>> pow(2,3)
8.0
>>>
ValueError
https://md2pdf.netlify.app 119/250
11/03/2023, 17:47
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> int('12a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12a'
>>>
In this case we cannot change the given string to a number, because of the 'a' letter in it.
ZeroDivisionError
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>>
With dir or help built-in commands it is possible to know the available functions in a certain module.
As you can see, in the datetime module there are many functions, but we will focus on date,
datetime, time and timedelta. Let se see them one by one.
Getting datetime Information
from datetime import datetime
now = datetime.now()
print(now) # 2021-07-08 07:34:46.549883
day = now.day # 8
month = now.month # 7
year = now.year # 2021
hour = now.hour # 7
https://md2pdf.netlify.app 121/250
11/03/2023, 17:47
minute = now.minute # 38
second = now.second
timestamp = now.timestamp()
print(day, month, year, hour, minute)
print('timestamp', timestamp)
print(f'{day}/{month}/{year}, {hour}:{minute}') # 8/7/2021, 7:38
Timestamp or Unix timestamp is the number of seconds elapsed from 1st of January 1970 UTC.
Formatting Date Output Using strftime
from datetime import datetime
new_year = datetime(2020, 1, 1)
print(new_year) # 2020-01-01 00:00:00
day = new_year.day
month = new_year.month
year = new_year.year
hour = new_year.hour
minute = new_year.minute
second = new_year.second
print(day, month, year, hour, minute) #1 1 2020 0 0
print(f'{day}/{month}/{year}, {hour}:{minute}') # 1/1/2020, 0:0
Formatting date time using strftime method and the documentation can be found here.
from datetime import datetime
# current date and time
now = datetime.now()
t = now.strftime("%H:%M:%S")
print("time:", t)
time_one = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("time one:", time_one)
time_two = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("time two:", time_two)
time: 01:05:01
time one: 12/05/2019, 01:05:01
time two: 05/12/2019, 01:05:01
Here are all the strftime symbols we use to format time. An example of all the formats for this
module.
strftime
https://md2pdf.netlify.app 122/250
String to Time Using strptime
11/03/2023, 17:47
output
a = 00:00:00
b = 10:30:50
https://md2pdf.netlify.app 123/250
11/03/2023, 17:47
c = 10:30:50
d = 10:30:50.200555
Difference Between Two Points in Time Using
today = date(year=2019, month=12, day=5)
new_year = date(year=2020, month=1, day=1)
time_left_for_newyear = new_year - today
# Time left for new year: 27 days, 0:00:00
print('Time left for new year: ', time_left_for_newyear)
🌕 You are an extraordinary. You are 16 steps a head to your way to greatness. Now do some
exercises for your brain and muscles.
💻 Exercises: Day 16
1. Get the current day, month, year, hour, minute and timestamp from datetime module
2. Format the current date using this format: "%m/%d/%Y, %H:%M:%S")
3. Today is 5 December, 2019. Change this time string to time.
4. Calculate the time difference between now and new year.
5. Calculate the time difference between 1 January 1970 and now.
6. Think, what can you use the datetime module for? Examples:
Time series analysis
To get a timestamp of any activities in an application
Adding posts on a blog
https://md2pdf.netlify.app 124/250
11/03/2023, 17:47
🎉 CONGRATULATIONS ! 🎉
<< Day 15 | Day 17 >>
30 Days Of Python: Day 17 - Exception
Handling
LinkedIn Follow @asabeneh
We have covered the different Python error types in the previous section. If we use try and except
in our program, then it will not raise errors in those blocks.
Try and Except
try:
code in this block if things go well
except:
code in this block run if things go wrong
Example:
try:
print(10 + '5')
except:
print('Something went wrong')
In the example above the second operand is a string. We could change it to float or int to add it with
the number to make it work. But without any changes, the second block, except, will be executed.
Example:
try:
name = input('Enter your name:')
year_born = input('Year you were born:')
age = 2019 - year_born
print(f'You are {name}. And your age is {age}.')
except:
print('Something went wrong')
In the above example, the exception block will run and we do not know exactly the problem. To
analyze the problem, we can use the different error types with except.
In the following example, it will handle the error and will also tell us the kind of error raised.
try:
name = input('Enter your name:')
year_born = input('Year you were born:')
age = 2019 - year_born
print(f'You are {name}. And your age is {age}.')
except TypeError:
print('Type error occured')
except ValueError:
https://md2pdf.netlify.app 126/250
11/03/2023, 17:47
In the code above the output is going to be TypeError. Now, let's add an additional block:
try:
name = input('Enter your name:')
year_born = input('Year you born:')
age = 2019 - int(year_born)
print('You are {name}. And your age is {age}.')
except TypeError:
print('Type error occur')
except ValueError:
print('Value error occur')
except ZeroDivisionError:
print('zero division error occur')
else:
print('I usually run with the try block')
finally:
print('I alway run.')
lst = [1, 2, 3, 4, 5]
print(sum_of_five_nums(lst)) # TypeError: sum_of_five_nums() missing 4 required positi
When we run the this code, it raises an error, because this function takes numbers (not a list) as
arguments. Let us unpack/destructure the list.
def sum_of_five_nums(a, b, c, d, e):
return a + b + c + d + e
lst = [1, 2, 3, 4, 5]
print(sum_of_five_nums(*lst)) # 15
We can also use unpacking in the range built-in function that expects a start and an end.
numbers = range(2, 7) # normal call with separate arguments
print(list(numbers)) # [2, 3, 4, 5, 6]
args = [2, 7]
numbers = range(*args) # call with arguments unpacked from a list
print(numbers) # [2, 3, 4, 5,6]
https://md2pdf.netlify.app 128/250
11/03/2023, 17:47
Unpacking Dictionaries
def unpacking_person_info(name, country, city, age):
return f'{name} lives in {country}, {city}. He is {age} year old.'
dct = {'name':'Asabeneh', 'country':'Finland', 'city':'Helsinki', 'age':250}
print(unpacking_person_info(**dct)) # Asabeneh lives in Finland, Helsinki. He is 250 y
Packing
Sometimes we never know how many arguments need to be passed to a python function. We can
use the packing method to allow our function to take unlimited number or arbitrary number of
arguments.
Packing Lists
def sum_all(*args):
s = 0
for i in args:
s += i
return s
print(sum_all(1, 2, 3)) # 6
print(sum_all(1, 2, 3, 4, 5, 6, 7)) # 28
Packing Dictionaries
def packing_person_info(**kwargs):
# check the type of kwargs and it is a dict type
# print(type(kwargs))
# Printing dictionary items
for key in kwargs:
print("{key} = {kwargs[key]}")
return kwargs
print(packing_person_info(name="Asabeneh",
country="Finland", city="Helsinki", age=250))
name = Asabeneh
country = Finland
city = Helsinki
age = 250
{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}
Spreading in Python
https://md2pdf.netlify.app 129/250
11/03/2023, 17:47
Enumerate
If we are interested in an index of a list, we use enumerate built-in function to get the index of each
item in the list.
for index, item in enumerate([20, 30, 40]):
print(index, item)
Zip
Sometimes we would like to combine lists when looping through them. See the example below:
fruits = ['banana', 'orange', 'mango', 'lemon', 'lime']
vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot']
fruits_and_veges = []
for f, v in zip(fruits, vegetables):
fruits_and_veges.append({'fruit':f, 'veg':v})
print(fruits_and_veges)
https://md2pdf.netlify.app 130/250
11/03/2023, 17:47
🌕 You are determined. You are 17 steps a head to your way to greatness. Now do some exercises
for your brain and muscles.
Exercises: Day 17
1. names = ['Finland', 'Sweden', 'Norway','Denmark','Iceland', 'Estonia','Russia']. Unpack the first
five countries and store them in a variable nordic_countries, store Estonia and Russia in es, and
ru respectively.
🎉 CONGRATULATIONS ! 🎉
<< Day 16 | Day 18 >>
30 Days Of Python: Day 18 - Regular
Expressions
LinkedIn Follow @asabeneh
Quantifier in RegEx
Cart ^
💻 Exercises: Day 18
Exercises: Level 1
Exercises: Level 2
Exercises: Level 3
📘 Day 18
Regular Expressions
A regular expression or RegEx is a special text string that helps to find patterns in data. A RegEx
can be used to check if some pattern exists in a different data type. To use RegEx in python first we
should import the RegEx module which is called re.
The re Module
After importing the module we can use it to detect or find patterns.
import re
Methods in re Module
To find a pattern we use different set of re character sets that allows to search for a match in a
string.
re.match(): searches only in the beginning of the first line of the string and returns matched
objects if found, else returns None.
re.search: Returns a match object if there is one anywhere in the string, including multiline
strings.
re.findall: Returns a list containing all matches
re.split: Takes a string, splits it at the match points, returns a list
re.sub: Replaces one or many matches within a string
Match
# syntac
re.match(substring, string, re.I)
# substring is a string or a pattern, string is the text we look for a pattern , re.I
https://md2pdf.netlify.app 132/250
11/03/2023, 17:47
import re
As you can see from the example above, the pattern we are looking for (or the substring we are
looking for) is I love to teach. The match function returns an object only if the text starts with the
pattern.
import re
The string does not string with I like to teach, therefore there was no match and the match method
returned None.
Search
# syntax
re.match(substring, string, re.I)
# substring is a pattern, string is the text we look for a pattern , re.I is case igno
import re
txt = '''Python is the most beautiful language that a human being has ever created.
I recommend python for a first programming language'''
As you can see, search is much better than match because it can look for the pattern throughout
the text. Search returns a match object with a first match that was found, otherwise it returns None.
A much better re function is findall. This function checks for the pattern through the whole string
and returns all the matches as a list.
Searching for All Matches Using findall
findall() returns all the matches as a list
txt = '''Python is the most beautiful language that a human being has ever created.
I recommend python for a first programming language'''
# It return a list
matches = re.findall('language', txt, re.I)
print(matches) # ['language', 'language']
As you can see, the word language was found two times in the string. Let us practice some more.
Now we will look for both Python and python words in the string:
txt = '''Python is the most beautiful language that a human being has ever created.
I recommend python for a first programming language'''
# It returns list
matches = re.findall('python', txt, re.I)
print(matches) # ['Python', 'python']
Since we are using re.I both lowercase and uppercase letters are included. If we do not have the re.I
flag, then we will have to write our pattern differently. Let us check it out:
txt = '''Python is the most beautiful language that a human being has ever created.
I recommend python for a first programming language'''
#
matches = re.findall('[Pp]ython', txt)
print(matches) # ['Python', 'python']
Replacing a Substring
https://md2pdf.netlify.app 134/250
11/03/2023, 17:47
txt = '''Python is the most beautiful language that a human being has ever created.
I recommend python for a first programming language'''
Let us add one more example. The following string is really hard to read unless we remove the %
symbol. Replacing the % with an empty string will clean the text.
['I am teacher and I love teaching.', 'There is nothing as rewarding as educating and
https://md2pdf.netlify.app 135/250
11/03/2023, 17:47
import re
regex_pattern = r'apple'
txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has
matches = re.findall(regex_pattern, txt)
print(matches) # ['apple']
Using the square bracket and or operator , we manage to extract Apple, apple, Banana and banana.
Escape character(\) in RegEx
regex_pattern = r'\d' # d is a special character which means digits
txt = 'This regular expression example was made on December 6, 2019 and revised on Ju
matches = re.findall(regex_pattern, txt)
print(matches) # ['6', '2', '0', '1', '9', '8', '2', '0', '2', '1'], this is not what
Period(.)
regex_pattern = r'[a].' # this square bracket means a and . means any character excep
txt = '''Apple and banana are fruits'''
matches = re.findall(regex_pattern, txt)
https://md2pdf.netlify.app 137/250
11/03/2023, 17:47
Quantifier in RegEx
We can specify the length of the substring we are looking for in a text, using a curly bracket. Let us
imagine, we are interested in a substring with a length of 4 characters:
txt = 'This regular expression example was made on December 6, 2019 and revised on Ju
regex_pattern = r'\d{4}' # exactly four times
matches = re.findall(regex_pattern, txt)
print(matches) # ['2019', '2021']
txt = 'This regular expression example was made on December 6, 2019 and revised on Ju
regex_pattern = r'\d{1, 4}' # 1 to 4
matches = re.findall(regex_pattern, txt)
print(matches) # ['6', '2019', '8', '2021']
Cart ^
Starts with
https://md2pdf.netlify.app 138/250
11/03/2023, 17:47
txt = 'This regular expression example was made on December 6, 2019 and revised on Ju
regex_pattern = r'^This' # ^ means starts with
matches = re.findall(regex_pattern, txt)
print(matches) # ['This']
Negation
txt = 'This regular expression example was made on December 6, 2019 and revised on Ju
regex_pattern = r'[^A-Za-z ]+' # ^ in set character means negation, not A to Z, not a
matches = re.findall(regex_pattern, txt)
print(matches) # ['6,', '2019', '8', '2021']
💻 Exercises: Day 18
Exercises: Level 1
1. What is the most frequent word in the following paragraph?
paragraph = 'I love teaching. If you do not love teaching what else can you love.
[
(6, 'love'),
(5, 'you'),
(3, 'can'),
(2, 'what'),
(2, 'teaching'),
(2, 'not'),
(2, 'else'),
(2, 'do'),
(2, 'I'),
(1, 'which'),
(1, 'to'),
(1, 'the'),
(1, 'something'),
(1, 'if'),
(1, 'give'),
(1, 'develop'),
(1, 'capabilities'),
(1, 'application'),
(1, 'an'),
(1, 'all'),
(1, 'Python'),
(1, 'If')
]
https://md2pdf.netlify.app 139/250
11/03/2023, 17:47
2. The position of some particles on the horizontal x-axis are -12, -4, -3 and -1 in the negative
direction, 0 at origin, 4 and 8 in the positive direction. Extract these numbers from this whole
text and find the distance between the two furthest particles.
points = ['-1', '2', '-4', '-3', '-1', '0', '4', '8']
sorted_points = [-4, -3, -1, -1, 0, 2, 4, 8]
distance = 8 -(-4) # 12
Exercises: Level 2
1. Write a pattern which identifies if a string is a valid python variable
is_valid_variable('first_name') # True
is_valid_variable('first-name') # False
is_valid_variable('1first_name') # False
is_valid_variable('firstname') # True
Exercises: Level 3
1. Clean the following text. After cleaning, count three most frequent words in the string.
sentence = '''%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothin
print(clean_text(sentence));
I am a teacher and I love teaching There is nothing as more rewarding as educating
print(most_frequent_words(cleaned_text)) # [(3, 'I'), (2, 'teaching'), (2, 'teache
🎉 CONGRATULATIONS ! 🎉
<< Day 17 | Day 19>>
30 Days Of Python: Day 19 - File Handling
LinkedIn Follow @asabeneh
Author: Asabeneh Yetayeh
Second Edition: July, 2021
<< Day 18 | Day 20 >>
30DaysOfPython
📘 Day 19
File Handling
Opening Files for Reading
Opening Files for Writing and Updating
https://md2pdf.netlify.app 140/250
11/03/2023, 17:47
Deleting Files
File Types
File with txt Extension
File with json Extension
Changing JSON to Dictionary
Changing Dictionary to JSON
Saving as JSON File
File with csv Extension
File with xlsx Extension
File with xml Extension
💻 Exercises: Day 19
Exercises: Level 1
Exercises: Level 2
Exercises: Level 3
📘 Day 19
File Handling
So far we have seen different Python data types. We usually store our data in different file formats.
In addition to handling files, we will also see different file formats(.txt, .json, .xml, .csv, .tsv, .excel) in
this section. First, let us get familiar with handling files with common file format(.txt).
File handling is an import part of programming which allows us to create, read, update and delete
files. In Python to handle data we use open() built-in function.
# Syntax
open('filename', mode) # mode(r, a, w, x, t,b) could be to read, write, update
"r" - Read - Default value. Opens a file for reading, it returns an error if the file does not exist
"a" - Append - Opens a file for appending, creates the file if it does not exist
"w" - Write - Opens a file for writing, creates the file if it does not exist
"x" - Create - Creates the specified file, returns an error if the file exists
"t" - Text - Default value. Text mode
"b" - Binary - Binary mode (e.g. images)
Opening Files for Reading
https://md2pdf.netlify.app 141/250
11/03/2023, 17:47
The default mode of open is reading, so we do not have to specify 'r' or 'rt'. I have created and
saved a file named reading_file_example.txt in the files directory. Let us see how it is done:
f = open('./files/reading_file_example.txt')
print(f) # <_io.TextIOWrapper name='./files/reading_file_example.txt' mode='r' encodin
As you can see in the example above, I printed the opened file and it gave some information about
it. Opened file has different reading methods: read(), readline, readlines. An opened file has to be
closed with close() method.
read(): read the whole text as string. If we want to limit the number of characters we want to
read, we can limit it by passing int value to the read(number) method.
f = open('./files/reading_file_example.txt')
txt = f.read()
print(type(txt))
print(txt)
f.close()
# output
<class 'str'>
This is an example to show how to open a file and read.
This is the second line of the text.
Instead of printing all the text, let us print the first 10 characters of the text file.
f = open('./files/reading_file_example.txt')
txt = f.read(10)
print(type(txt))
print(txt)
f.close()
# output
<class 'str'>
This is an
https://md2pdf.netlify.app 142/250
11/03/2023, 17:47
# output
<class 'str'>
This is an example to show how to open a file and read.
readlines(): read all the text line by line and returns a list of lines
f = open('./files/reading_file_example.txt')
lines = f.readlines()
print(type(lines))
print(lines)
f.close()
# output
<class 'list'>
['This is an example to show how to open a file and read.\n', 'This is the second line
# output
<class 'list'>
['This is an example to show how to open a file and read.', 'This is the second line o
After we open a file, we should close it. There is a high tendency of forgetting to close them. There
is a new way of opening files using with - closes the files by itself. Let us rewrite the the previous
example with the with method:
with open('./files/reading_file_example.txt') as f:
lines = f.read().splitlines()
print(type(lines))
print(lines)
# output
<class 'list'>
['This is an example to show how to open a file and read.', 'This is the second line o
https://md2pdf.netlify.app 143/250
Opening Files for Writing and Updating
11/03/2023, 17:47
To write to an existing file, we must add a mode as parameter to the open() function:
"a" - append - will append to the end of the file, if the file does not it creates a new file.
"w" - write - will overwrite any existing content, if the file does not exist it creates.
Let us append some text to the file we have been reading:
with open('./files/reading_file_example.txt','a') as f:
f.write('This text has to be appended at the end')
The method below creates a new file, if the file does not exist:
with open('./files/writing_file_example.txt','w') as f:
f.write('This text will be written in a newly created file')
Deleting Files
We have seen in previous section, how to make and remove a directory using os module. Again
now, if we want to remove a file we use os module.
import os
os.remove('./files/example.txt')
If the file does not exist, the remove method will raise an error, so it is good to use a condition like
this:
import os
if os.path.exists('./files/example.txt'):
os.remove('./files/example.txt')
else:
print('The file does not exist')
File Types
File with txt Extension
File with txt extension is a very common form of data and we have covered it in the previous
section. Let us move to the JSON file
File with json Extension
https://md2pdf.netlify.app 144/250
11/03/2023, 17:47
JSON stands for JavaScript Object Notation. Actually, it is a stringified JavaScript object or Python
dictionary.
Example:
# dictionary
person_dct= {
"name":"Asabeneh",
"country":"Finland",
"city":"Helsinki",
"skills":["JavaScrip", "React","Python"]
}
# JSON: A string form a dictionary
person_json = "{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'skills'
# we use three quotes and make it multiple line to make it more readable
person_json = '''{
"name":"Asabeneh",
"country":"Finland",
"city":"Helsinki",
"skills":["JavaScrip", "React","Python"]
}'''
# output
<class 'dict'>
{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'skills': ['JavaScrip',
Asabeneh
To change a dictionary to a JSON we use dumps method from the json module.
import json
# python dictionary
person = {
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}
# let's convert it to json
person_json = json.dumps(person, indent=4) # indent could be 2, 4, 8. It beautifies th
print(type(person_json))
print(person_json)
# output
# when you print it, it does not have the quote, but actually it is a string
# JSON does not have type, it is a string type.
<class 'str'>
{
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": [
"JavaScrip",
"React",
"Python"
]
}
https://md2pdf.netlify.app 146/250
11/03/2023, 17:47
In the code above, we use encoding and indentation. Indentation makes the json file easy to read.
File with csv Extension
CSV stands for comma separated values. CSV is a simple file format used to store tabular data,
such as a spreadsheet or database. CSV is a very common data format in data science.
Example:
"name","country","city","skills"
"Asabeneh","Finland","Helsinki","JavaScript"
Example:
import csv
with open('./files/csv_example.csv') as f:
csv_reader = csv.reader(f, delimiter=',') # w use, reader method to read csv
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are :{", ".join(row)}')
line_count += 1
else:
print(
f'\t{row[0]} is a teachers. He lives in {row[1]}, {row[2]}.')
line_count += 1
print(f'Number of lines: {line_count}')
# output:
Column names are :name, country, city, skills
Asabeneh is a teacher. He lives in Finland, Helsinki.
Number of lines: 2
XML is another structured data format which looks like HTML. In XML the tags are not predefined.
The first line is an XML declaration. The person tag is the root of the XML. The person has a gender
attribute. Example:XML
<?xml version="1.0"?>
<person gender="female">
<name>Asabeneh</name>
<country>Finland</country>
<city>Helsinki</city>
<skills>
<skill>JavaScrip</skill>
<skill>React</skill>
<skill>Python</skill>
</skills>
</person>
For more information on how to read an XML file check the documentation
import xml.etree.ElementTree as ET
tree = ET.parse('./files/xml_example.xml')
root = tree.getroot()
print('Root tag:', root.tag)
print('Attribute:', root.attrib)
for child in root:
print('field: ', child.tag)
# output
Root tag: person
Attribute: {'gender': 'male'}
field: name
field: country
field: city
field: skills
🌕 You are making a big progress. Maintain your momentum, keep the good work. Now do some
exercises for your brain and muscles.
💻 Exercises: Day 19
Exercises: Level 1
1. Write a function which count number of lines and number of words in a text. All the files are in
the data the folder: a) Read obama_speech.txt file and count number of lines and words b)
Read michelle_obama_speech.txt file and count number of lines and words c) Read
https://md2pdf.netlify.app 148/250
11/03/2023, 17:47
donald_speech.txt file and count number of lines and words d) Read melina_trump_speech.txt
file and count number of lines and words
2. Read the countries_data.json data file in data directory, create a function that finds the ten
most spoken languages
# Your output should look like this
print(most_spoken_languages(filename='./data/countries_data.json', 10))
[(91, 'English'),
(45, 'French'),
(25, 'Arabic'),
(24, 'Spanish'),
(9, 'Russian'),
(9, 'Portuguese'),
(8, 'Dutch'),
(7, 'German'),
(5, 'Chinese'),
(4, 'Swahili'),
(4, 'Serbian')]
3. Read the countries_data.json data file in data directory, create a function that creates a list of
the ten most populated countries
# Your output should look like this
print(most_populated_countries(filename='./data/countries_data.json', 10))
[
{'country': 'China', 'population': 1377422166},
{'country': 'India', 'population': 1295210000},
{'country': 'United States of America', 'population': 323947000},
{'country': 'Indonesia', 'population': 258705000},
{'country': 'Brazil', 'population': 206135893},
{'country': 'Pakistan', 'population': 194125062},
{'country': 'Nigeria', 'population': 186988000},
{'country': 'Bangladesh', 'population': 161006790},
{'country': 'Russian Federation', 'population': 146599183},
{'country': 'Japan', 'population': 126960000}
]
print(most_populated_countries(filename='./data/countries_data.json', 3))
[
{'country': 'China', 'population': 1377422166},
https://md2pdf.netlify.app 149/250
11/03/2023, 17:47
Exercises: Level 2
4. Extract all incoming email addresses as a list from the email_exchange_big.txt file.
5. Find the most common words in the English language. Call the name of your function
find_most_common_words, it will take two parameters - a string or a file and a positive integer,
indicating the number of words. Your function will return an array of tuples in descending
order. Check the output
# Your output should look like this
print(find_most_common_words('sample.txt', 10))
[(10, 'the'),
(8, 'be'),
(6, 'to'),
(6, 'of'),
(5, 'and'),
(4, 'a'),
(4, 'in'),
(3, 'that'),
(2, 'have'),
(2, 'I')]
[(10, 'the'),
(8, 'be'),
(6, 'to'),
(6, 'of'),
(5, 'and')]
6. Use the function, find_most_frequent_words to find: a) The ten most frequent words used in
Obama's speech b) The ten most frequent words used in Michelle's speech c) The ten most
frequent words used in Trump's speech d) The ten most frequent words used in Melina's
speech
7. Write a python application that checks similarity between two texts. It takes a file or a string as
a parameter and it will evaluate the similarity of the two texts. For instance check the similarity
between the transcripts of Michelle's and Melina's speech. You may need a couple of
functions, function to clean the text(clean_text), function to remove support
words(remove_support_words) and finally to check the similarity(check_text_similarity). List of
stop words are in the data directory
8. Find the 10 most repeated words in the romeo_and_juliet.txt
https://md2pdf.netlify.app 150/250
11/03/2023, 17:47
9. Read the hacker news csv file and find out: a) Count the number of lines containing python or
Python b) Count the number lines containing JavaScript, javascript or Javascript c) Count the
number lines containing Java and not JavaScript
Exercises: Level 3
🎉 CONGRATULATIONS ! 🎉
<< Day 18 | Day 20 >>
30 Days Of Python: Day 20 - PIP
LinkedIn Follow @asabeneh
PIP stands for Preferred installer program. We use pip to install different Python packages. Package
is a Python module that can contain one or more modules or other packages. A module or modules
that we can install to our application is a package. In programming, we do not have to write every
utility program, instead we install packages and import them to our applications.
Installing PIP
If you did not install pip, let us install it now. Go to your terminal or command prompt and copy and
paste this:
asabeneh@Asabeneh:~$ pip install pip
As you can see, I am using pip version 21.1.3, if you see some number a bit below or above that,
means you have pip installed.
Let us check some of the packages used in the Python community for different purposes. Just to
let you know that there are lots of packages available for use with different applications.
Installing packages using pip
Let us try to install numpy, called numeric python. It is one of the most popular packages in
machine learning and data science community.
NumPy is the fundamental package for scientific computing with Python. It contains among
other things:
a powerful N-dimensional array object
sophisticated (broadcasting) functions
tools for integrating C/C++ and Fortran code
useful linear algebra, Fourier transform, and random number capabilities
asabeneh@Asabeneh:~$ pip install numpy
Let us start using numpy. Open your python interactive shell, write python and then import numpy
as follows:
https://md2pdf.netlify.app 152/250
11/03/2023, 17:47
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.20.1'
>>> lst = [1, 2, 3,4, 5]
>>> np_arr = numpy.array(lst)
>>> np_arr
array([1, 2, 3, 4, 5])
>>> len(np_arr)
5
>>> np_arr * 2
array([ 2, 4, 6, 8, 10])
>>> np_arr + 2
array([3, 4, 5, 6, 7])
>>>
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
This section is not about numpy nor pandas, here we are trying to learn how to install packages and
how to import them. If it is needed, we will talk about different packages in other sections.
Let us import a web browser module, which can help us to open any website. We do not need to
install this module, it is already installed by default with Python 3. For instance if you like to open
any number of websites at any time or if you like to schedule something, this webbrowser module
can be used.
import webbrowser # web browser module to open websites
https://md2pdf.netlify.app 153/250
11/03/2023, 17:47
'https://twitter.com/Asabeneh',
]
Uninstalling Packages
If you do not like to keep the installed packages, you can remove them using the following
command.
pip uninstall packagename
List of Packages
To see the installed packages on our machine. We can use pip followed by list.
pip list
Show Package
To show information about a package
pip show packagename
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/local/lib/python3.7/site-packages
Requires: numpy, pytz, python-dateutil
Required-by:
Metadata-Version: 2.1
Installer: pip
Classifiers:
Development Status :: 5 - Production/Stable
Environment :: Console
Operating System :: OS Independent
Intended Audience :: Science/Research
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Cython
Topic :: Scientific/Engineering
Entry-points:
[pandas_plotting_backends]
matplotlib = pandas:plotting._matplotlib
PIP Freeze
Generate installed Python packages with their version and the output is suitable to use it in a
requirements file. A requirements.txt file is a file that should contain all the installed Python
packages in a Python project.
asabeneh@Asabeneh:~$ pip freeze
docutils==0.11
Jinja2==2.7.2
MarkupSafe==0.19
Pygments==1.6
Sphinx==1.2.2
The pip freeze gave us the packages used, installed and their version. We use it with
requirements.txt file for deployment.
Reading from URL
By now you are familiar with how to read or write on a file located on you local machine. Sometimes,
we would like to read from a website using url or from an API. API stands for Application Program
Interface. It is a means to exchange structured data between servers primarily as json data. To
open a network connection, we need a package called requests - it allows to open a network
https://md2pdf.netlify.app 155/250
11/03/2023, 17:47
connection and to implement CRUD(create, read, update and delete) operations. In this section, we
will cover only reading ore getting part of a CRUD.
Let us install requests:
asabeneh@Asabeneh:~$ pip install requests
We will see get, status_code, headers, text and json methods in requests module:
get(): to open a network and fetch data from url - it returns a response object
status_code: After we fetched data, we can check the status of the operation (success, error,
etc)
headers: To check the header types
text: to extract the text from the fetched response object
json: to extract json data Let's read a txt file from this website,
https://www.w3.org/TR/PNG/iso_8859-1.txt.
import requests # importing the request module
<Response [200]>
200
{'date': 'Sun, 08 Dec 2019 18:00:31 GMT', 'last-modified': 'Fri, 07 Nov 2003 05:51:11
Let us read from an API. API stands for Application Program Interface. It is a means to
exchange structure data between servers primarily a json data. An example of an
API:https://restcountries.eu/rest/v2/all. Let us read this API using requests module.
import requests
url = 'https://restcountries.eu/rest/v2/all' # countries api
response = requests.get(url) # opening a network and fetching a data
print(response) # response object
print(response.status_code) # status code, success:200
countries = response.json()
print(countries[:1]) # we sliced only the first country, remove the slicing to see al
https://md2pdf.netlify.app 156/250
11/03/2023, 17:47
<Response [200]>
200
[{'alpha2Code': 'AF',
'alpha3Code': 'AFG',
'altSpellings': ['AF', 'Afġānistān'],
'area': 652230.0,
'borders': ['IRN', 'PAK', 'TKM', 'UZB', 'TJK', 'CHN'],
'callingCodes': ['93'],
'capital': 'Kabul',
'cioc': 'AFG',
'currencies': [{'code': 'AFN', 'name': 'Afghan afghani', 'symbol': '؋'}],
'demonym': 'Afghan',
'flag': 'https://restcountries.eu/data/afg.svg',
'gini': 27.8,
'languages': [{'iso639_1': 'ps',
'iso639_2': 'pus',
'name': 'Pashto',
'nativeName': '}'پښتو,
{'iso639_1': 'uz',
'iso639_2': 'uzb',
'name': 'Uzbek',
'nativeName': 'Oʻzbek'},
{'iso639_1': 'tk',
'iso639_2': 'tuk',
'name': 'Turkmen',
'nativeName': 'Türkmen'}],
'latlng': [33.0, 65.0],
'name': 'Afghanistan',
'nativeName': ''افغانستان,
'numericCode': '004',
'population': 27657145,
'region': 'Asia',
'regionalBlocs': [{'acronym': 'SAARC',
'name': 'South Asian Association for Regional Cooperation',
'otherAcronyms': [],
'otherNames': []}],
'subregion': 'Southern Asia',
'timezones': ['UTC+04:30'],
'topLevelDomain': ['.af'],
'translations': {'br': 'Afeganistão',
'de': 'Afghanistan',
'es': 'Afganistán',
'fa': ''افغانستان,
'fr': 'Afghanistan',
'hr': 'Afganistan',
'it': 'Afghanistan',
'ja': 'アフガニスタン ',
'nl': 'Afghanistan',
'pt': 'Afeganistão'}}]
https://md2pdf.netlify.app 157/250
11/03/2023, 17:47
We use json() method from response object, if the we are fetching JSON data. For txt, html, xml
and other file formats we can use text.
Creating a Package
We organize a large number of files in different folders and sub-folders based on some criteria, so
that we can find and manage them easily. As you know, a module can contain multiple objects, such
as classes, functions, etc. A package can contain one or more relevant modules. A package is
actually a folder containing one or more module files. Let us create a package named mypackage,
using the following steps:
Create a new folder named mypacakge inside 30DaysOfPython folder Create an empty init.py file
in the mypackage folder. Create modules arithmetic.py and greet.py with following code:
# mypackage/arithmetics.py
# arithmetics.py
def add_numbers(*args):
total = 0
for num in args:
total += num
return total
# mypackage/greet.py
# greet.py
def greet_person(firstname, lastname):
return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!'
─ mypackage
├── __init__.py
├── arithmetic.py
└── greet.py
Now let's open the python interactive shell and try the package we have created:
asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mypackage import arithmetics
>>> arithmetics.add_numbers(1, 2, 3, 5)
11
>>> arithmetics.subtract(5, 3)
2
>>> arithmetics.multiple(5, 3)
15
>>> arithmetics.division(5, 3)
1.6666666666666667
>>> arithmetics.remainder(5, 3)
2
>>> arithmetics.power(5, 3)
125
>>> from mypackage import greet
>>> greet.greet_person('Asabeneh', 'Yetayeh')
'Asabeneh Yetayeh, welcome to 30DaysOfPython Challenge!'
>>>
As you can see our package works perfectly. The package folder contains a special file called
init.py - it stores the package's content. If we put init.py in the package folder, python start
recognizes it as a package. The init.py exposes specified resources from its modules to be
imported to other python files. An empty init.py file makes all functions available when a package is
imported. The init.py is essential for the folder to be recognized by Python as a package.
Further Information About Packages
Database
SQLAlchemy or SQLObject - Object oriented access to several different database systems
pip install SQLAlchemy
Web Development
Django - High-level web framework.
pip install django
Flask - micro framework for Python based on Werkzeug, Jinja 2. (It's BSD licensed)
https://md2pdf.netlify.app 159/250
11/03/2023, 17:47
1. Read this url and find the 10 most frequent words. romeo_and_juliet =
'http://www.gutenberg.org/files/1112/1112.txt'
2. Read the cats API and cats_api = 'https://api.thecatapi.com/v1/breeds' and find :
i. the min, max, mean, median, standard deviation of cats' weight in metric units.
ii. the min, max, mean, median, standard deviation of cats' lifespan in years.
iii. Create a frequency table of country and breed of cats
3. Read the countries API and find
i. the 10 largest countries
ii. the 10 most spoken languages
iii. the total number of languages in the countries API
4. UCI is one of the most common places to get data sets for data science and machine learning.
Read the content of UCL (https://archive.ics.uci.edu/ml/datasets.php). Without additional
libraries it will be difficult, so you may try it with BeautifulSoup4
🎉 CONGRATULATIONS ! 🎉
<< Day 19 | Day 21 >>
30 Days Of Python: Day 21 - Classes and
Objects
LinkedIn Follow @asabeneh
💻 Exercises: Day 21
Exercises: Level 1
Exercises: Level 2
Exercises: Level 3
📘 Day 21
Classes and Objects
Python is an object oriented programming language. Everything in Python is an object, with its
properties and methods. A number, string, list, dictionary, tuple, set etc. used in a program is an
object of a corresponding built-in class. We create class to create an object. A class is like an
object constructor, or a "blueprint" for creating objects. We instantiate a class to create an object.
The class defines attributes and the behavior of the object, while the object, on the other hand,
represents the class.
We have been working with classes and objects right from the beginning of this challenge
unknowingly. Every element in a Python program is an object of a class. Let us check if everything
in python is a class:
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> num = 10
>>> type(num)
<class 'int'>
>>> string = 'string'
>>> type(string)
<class 'str'>
>>> boolean = True
>>> type(boolean)
<class 'bool'>
>>> lst = []
>>> type(lst)
<class 'list'>
>>> tpl = ()
>>> type(tpl)
<class 'tuple'>
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> dct = {}
>>> type(dct)
<class 'dict'>
https://md2pdf.netlify.app 162/250
Creating a Class
11/03/2023, 17:47
To create a class we need the key word class followed by the name and colon. Class name should
be CamelCase.
# syntax
class ClassName:
code goes here
Example:
class Person:
pass
print(Person)
Creating an Object
We can create an object by calling the class.
p = Person()
print(p)
Class Constructor
In the examples above, we have created an object from the Person class. However, a class without
a constructor is not really useful in real applications. Let us use constructor function to make our
class more useful. Like the constructor function in Java or JavaScript, Python has also a built-in
init() constructor function. The init constructor function has self parameter which is a reference to
the current instance of the class Examples:
class Person:
def __init__ (self, name):
# self allows to attach parameter to the class
self.name =name
p = Person('Asabeneh')
print(p.name)
print(p)
https://md2pdf.netlify.app 163/250
11/03/2023, 17:47
# output
Asabeneh
<__main__.Person object at 0x2abf46907e80>
# output
Asabeneh
Yetayeh
250
Finland
Helsinki
Object Methods
Objects can have methods. The methods are functions which belong to the object.
Example:
class Person:
def __init__(self, firstname, lastname, age, country, city):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in
https://md2pdf.netlify.app 164/250
11/03/2023, 17:47
# output
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in
p1 = Person()
print(p1.person_info())
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
# output
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
https://md2pdf.netlify.app 165/250
11/03/2023, 17:47
self.country = country
self.city = city
self.skills = []
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in
def add_skill(self, skill):
self.skills.append(skill)
p1 = Person()
print(p1.person_info())
p1.add_skill('HTML')
p1.add_skill('CSS')
p1.add_skill('JavaScript')
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
print(p1.skills)
print(p2.skills)
# output
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
['HTML', 'CSS', 'JavaScript']
[]
Inheritance
Using inheritance we can reuse parent class code. Inheritance allows us to define a class that
inherits all the methods and properties from parent class. The parent class or super or base class is
the class which gives all the methods and properties. Child class is the class that inherits from
another or parent class. Let us create a student class by inheriting from person class.
class Student(Person):
pass
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
https://md2pdf.netlify.app 166/250
11/03/2023, 17:47
print(s2.skills)
output
Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland.
['JavaScript', 'React', 'Python']
Lidiya Teklemariam is 28 years old. He lives in Espoo, Finland.
['Organizing', 'Marketing', 'Digital Marketing']
We did not call the init() constructor in the child class. If we didn't call it then we can still access all
the properties from the parent. But if we do call the constructor we can access the parent
properties by calling super.
We can add a new method to the child or we can override the parent class methods by creating the
same method name in the child class. When we add the init() function, the child class will no longer
inherit the parent's init() function.
Overriding parent method
class Student(Person):
def __init__ (self, firstname='Asabeneh', lastname='Yetayeh',age=250, country='Fin
self.gender = gender
super().__init__(firstname, lastname,age, country, city)
def person_info(self):
gender = 'He' if self.gender =='male' else 'She'
return f'{self.firstname} {self.lastname} is {self.age} years old. {gender} li
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
https://md2pdf.netlify.app 167/250
11/03/2023, 17:47
We can use super() built-in function or the parent name Person to automatically inherit the
methods and properties from its parent. In the example above we override the parent method. The
child method has a different feature, it can identify, if the gender is male or female and assign the
proper pronoun(He/She).
🌕 Now, you are fully charged with a super power of programming. Now do some exercises for your
brain and muscles.
💻 Exercises: Day 21
Exercises: Level 1
1. Python has the module called statistics and we can use this module to do all the statistical
calculations. However, to learn how to make function and reuse function let us try to develop a
program, which calculates the measure of central tendency of a sample (mean, median, mode)
and measure of variability (range, variance, standard deviation). In addition to those measures,
find the min, max, count, percentile, and frequency distribution of the sample. You can create a
class called Statistics and create all the functions that do statistical calculations as methods
for the Statistics class. Check the output below.
ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31
print('Count:', data.count()) # 25
print('Sum: ', data.sum()) # 744
print('Min: ', data.min()) # 24
print('Max: ', data.max()) # 38
print('Range: ', data.range() # 14
print('Mean: ', data.mean()) # 30
print('Median: ', data.median()) # 29
print('Mode: ', data.mode()) # {'mode': 26, 'count': 5}
print('Standard Deviation: ', data.std()) # 4.2
print('Variance: ', data.var()) # 17.5
print('Frequency Distribution: ', data.freq_dist()) # [(20.0, 26), (16.0, 27), (12.0,
https://md2pdf.netlify.app 168/250
11/03/2023, 17:47
Exercises: Level 2
1. Create a class called PersonAccount. It has firstname, lastname, incomes, expenses properties
and it has total_income, total_expense, account_info, add_income, add_expense and
account_balance methods. Incomes is a set of incomes and its description. The same goes for
expenses.
Exercises: Level 3
🎉 CONGRATULATIONS ! 🎉
<< Day 20 | Day 22 >>
30 Days Of Python: Day 22 - Web Scraping
LinkedIn Follow @asabeneh
In this section, we will use beautifulsoup and requests package to scrape data. The package
version we are using is beautifulsoup 4.
To start scraping websites you need requests, beautifoulSoup4 and a website.
pip install requests
pip install beautifulsoup4
To scrape data from websites, basic understanding of HTML tags and CSS selectors is needed. We
target content from a website using HTML tags, classes or/and ids. Let us import the requests and
BeautifulSoup module
import requests
from bs4 import BeautifulSoup
Let us declare url variable for the website which we are going to scrape.
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
# Lets use the requests get method to fetch the data from url
response = requests.get(url)
# lets check the status
status = response.status_code
print(status) # 200 means the fetching was successful
200
response = requests.get(url)
content = response.content # we get all the content from the website
soup = BeautifulSoup(content, 'html.parser') # beautiful soup will give a chance to pa
print(soup.title) # <title>UCI Machine Learning Repository: Data Sets</title>
print(soup.title.get_text()) # UCI Machine Learning Repository: Data Sets
print(soup.body) # gives the whole page on the website
print(response.status_code)
https://md2pdf.netlify.app 170/250
11/03/2023, 17:47
If you run this code, you can see that the extraction is half done. You can continue doing it because
it is part of exercise 1. For reference check the beautifulsoup documentation
🌕 You are so special, you are progressing everyday. You are left with only eight days to your way to
greatness. Now do some exercises for your brain and muscles.
💻 Exercises: Day 22
1. Scrape the following website and store the data as json file(url =
'http://www.bu.edu/president/boston-university-facts-stats/').
2. Extract the table in this url (https://archive.ics.uci.edu/ml/datasets.php) and change it to a json
file
3. Scrape the presidents table and store the data as
json(https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States). The table is not
very structured and the scrapping may take very long time.
🎉 CONGRATULATIONS ! 🎉
<< Day 21 | Day 23 >>
30 Days Of Python: Day 23 - Virtual
Environment
LinkedIn Follow @asabeneh
To start with project, it would be better to have a virtual environment. Virtual environment can help
us to create an isolated or separate environment. This will help us to avoid conflicts in
dependencies across projects. If you write pip freeze on your terminal you will see all the installed
packages on your computer. If we use virtualenv, we will access only packages which are specific
for that project. Open your terminal and install virtualenv
asabeneh@Asabeneh:~$ pip install virtualenv
For Windows:
C:\Users\User\Documents\30DaysOfPython\flask_project>python -m venv venv
I prefer to call the new project venv, but feel free to name it differently. Let us check if the the venv
was created by using ls (or dir for windows command prompt) command.
asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ ls
venv/
Let us activate the virtual environment by writing the following command at our project folder.
For Mac/Linux:
asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ source venv/bin/activate
Activation of the virtual environment in Windows may very on Windows Power shell and git bash.
For Windows Power Shell:
C:\Users\User\Documents\30DaysOfPython\flask_project> venv\Scripts\activate
After you write the activation command, your project directory will start with venv. See the example
below.
(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$
Now, lets check the available packages in this project by writing pip freeze. You will not see any
packages.
We are going to do a small flask project so let us install flask package to this project.
(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ pip install Flask
Now, let us write pip freeze to see a list of installed packages in the project:
(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ pip freeze
Click==7.0
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
When you finish you should dactivate active project using deactivate.
(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ deactivate
The necessary modules to work with flask are installed. Now, your project directory is ready for a
flask project. You should include the venv to your .gitignore file not to push it to github.
💻 Exercises: Day 23
1. Create a project directory with a virtual environment based on the example given above.
🎉 CONGRATULATIONS ! 🎉
<< Day 22 | Day 24 >>
30 Days Of Python: Day 24 - Statistics
https://md2pdf.netlify.app 173/250
11/03/2023, 17:47
https://md2pdf.netlify.app 174/250
Statistics Module
11/03/2023, 17:47
The Python statistics module provides functions for calculating mathematical statistics of numerical
data. The module is not intended to be a competitor to third-party libraries such as NumPy, SciPy,
or proprietary full-featured statistics packages aimed at professional statisticians such as Minitab,
SAS and Matlab. It is aimed at the level of graphing and scientific calculators.
NumPy
In the first section we defined Python as a great general-purpose programming language on its
own, but with the help of other popular libraries as(numpy, scipy, matplotlib, pandas etc) it
becomes a powerful environment for scientific computing.
NumPy is the core library for scientific computing in Python. It provides a high-performance
multidimensional array object, and tools for working with arrays.
So far, we have been using vscode but from now on I would recommend using Jupyter Notebook.
To access jupyter notebook let's install anaconda. If you are using anaconda most of the common
packages are included and you don't have install packages if you installed anaconda.
asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ pip install numpy
Importing NumPy
Jupyter notebook is available if your are in favor of jupyter notebook
# How to import numpy
import numpy as np
# How to check the version of the numpy package
print('numpy:', np.__version__)
# Checking the available methods
print(dir(np))
#
print(python_list) # [1, 2, 3, 4, 5]
numpy_array_from_list = np.array(python_list)
print(type (numpy_array_from_list)) # <class 'numpy.ndarray'>
print(numpy_array_from_list) # array([1, 2, 3, 4, 5])
<class 'numpy.ndarray'>
[[0 1 2]
[3 4 5]
[6 7 8]]
https://md2pdf.netlify.app 176/250
Converting numpy array to list
11/03/2023, 17:47
<class 'list'>
one dimensional array: [1, 2, 3, 4, 5]
two dimensional array: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
numpy_array_from_tuple = np.array(python_tuple)
print(type (numpy_array_from_tuple)) # <class 'numpy.ndarray'>
print('numpy_array_from_tuple: ', numpy_array_from_tuple) # numpy_array_from_tuple: [
[1 2 3 4 5]
shape of nums: (5,)
[[0 1 2]
[3 4 5]
[6 7 8]]
https://md2pdf.netlify.app 177/250
11/03/2023, 17:47
print(int_array)
print(int_array.dtype)
print(float_array)
print(float_array.dtype)
[-3 -2 -1 0 1 2 3]
int64
[-3. -2. -1. 0. 1. 2. 3.]
float64
The size: 5
The size: 9
Addition (+)
Subtraction (-)
Multiplication (*)
Division (/)
Modules (%)
Floor Division(//)
Exponential(**)
Addition
# Mathematical Operation
# Addition
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_plus_original = numpy_array_from_list + 10
print(ten_plus_original)
original array: [1 2 3 4 5]
[11 12 13 14 15]
Subtraction
# Subtraction
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_minus_original = numpy_array_from_list - 10
print(ten_minus_original)
original array: [1 2 3 4 5]
[-9 -8 -7 -6 -5]
Multiplication
# Multiplication
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_times_original = numpy_array_from_list * 10
print(ten_times_original)
https://md2pdf.netlify.app 179/250
11/03/2023, 17:47
original array: [1 2 3 4 5]
[10 20 30 40 50]
Division
# Division
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_times_original = numpy_array_from_list / 10
print(ten_times_original)
original array: [1 2 3 4 5]
[0.1 0.2 0.3 0.4 0.5]
Modulus
# Modulus; Finding the remainder
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_times_original = numpy_array_from_list % 3
print(ten_times_original)
original array: [1 2 3 4 5]
[1 2 0 1 2]
Floor Division
# Floor division: the division result without the remainder
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_times_original = numpy_array_from_list // 10
print(ten_times_original)
Exponential
# Exponential is finding some number the power of another:
numpy_array_from_list = np.array([1, 2, 3, 4, 5])
print('original array: ', numpy_array_from_list)
ten_times_original = numpy_array_from_list ** 2
print(ten_times_original)
https://md2pdf.netlify.app 180/250
11/03/2023, 17:47
original array: [1 2 3 4 5]
[ 1 4 9 16 25]
print(numpy_int_arr.dtype)
print(numpy_float_arr.dtype)
print(numpy_bool_arr.dtype)
int64
float64
bool
Converting types
We can convert the data types of numpy array
1. Int to Float
numpy_int_arr = np.array([1,2,3,4], dtype = 'float')
numpy_int_arr
2. Float to Int
numpy_int_arr = np.array([1., 2., 3., 4.], dtype = 'int')
numpy_int_arr
array([1, 2, 3, 4])
3. Int ot boolean
np.array([-3, -2, 0, 1,2,3], dtype='bool')
https://md2pdf.netlify.app 181/250
11/03/2023, 17:47
4. Int to str
numpy_float_list.astype('int').astype('str')
Multi-dimensional Arrays
# 2 Dimension Array
two_dimension_array = np.array([(1,2,3),(4,5,6), (7,8,9)])
print(type (two_dimension_array))
print(two_dimension_array)
print('Shape: ', two_dimension_array.shape)
print('Size:', two_dimension_array.size)
print('Data type:', two_dimension_array.dtype)
<class 'numpy.ndarray'>
[[1 2 3]
[4 5 6]
[7 8 9]]
Shape: (3, 3)
Size: 9
Data type: int64
First row: [1 2 3]
Second row: [4 5 6]
https://md2pdf.netlify.app 182/250
11/03/2023, 17:47
Third row: [7 8 9]
first_column= two_dimension_array[:,0]
second_column = two_dimension_array[:,1]
third_column = two_dimension_array[:,2]
print('First column:', first_column)
print('Second column:', second_column)
print('Third column: ', third_column)
print(two_dimension_array)
First column: [1 4 7]
Second column: [2 5 8]
Third column: [3 6 9]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2]
[4 5]]
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
https://md2pdf.netlify.app 183/250
11/03/2023, 17:47
array([[9, 8, 7],
[6, 5, 4],
[3, 2, 1]])
[[1 2 3]
[4 5 6]
[7 8 9]]
[[ 1 2 3]
[ 4 55 44]
[ 7 8 9]]
# Numpy Zeroes
# numpy.zeros(shape, dtype=float, order='C')
numpy_zeroes = np.zeros((3,3),dtype=int,order='C')
numpy_zeroes
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
# Numpy Zeroes
numpy_ones = np.ones((3,3),dtype=int,order='C')
print(numpy_ones)
[[1 1 1]
[1 1 1]
[1 1 1]]
https://md2pdf.netlify.app 184/250
11/03/2023, 17:47
twoes = numpy_ones * 2
# Reshape
# numpy.reshape(), numpy.flatten()
first_shape = np.array([(1,2,3), (4,5,6)])
print(first_shape)
reshaped = first_shape.reshape(3,2)
print(reshaped)
[[1 2 3]
[4 5 6]]
[[1 2]
[3 4]
[5 6]]
flattened = reshaped.flatten()
flattened
array([1, 2, 3, 4, 5, 6])
## Horitzontal Stack
np_list_one = np.array([1,2,3])
np_list_two = np.array([4,5,6])
print(np_list_one + np_list_two)
[5 7 9]
Horizontal Append: [1 2 3 4 5 6]
## Vertical Stack
print('Vertical Append:', np.vstack((np_list_one, np_list_two)))
0.018929887384753874
# Generating a random integers between 2 and 11, and creating a one row array
random_int = np.random.randint(2,10, size=4)
random_int
array([8, 8, 8, 2])
array([[3, 5, 3],
[7, 3, 6],
[2, 3, 3]])
https://md2pdf.netlify.app 186/250
11/03/2023, 17:47
normal_array
(array([2., 0., 0., 0., 1., 2., 2., 0., 2., 0., 0., 1., 2., 2., 1., 4., 3.,
4., 2., 7., 2., 2., 5., 4., 2., 4., 3., 2., 1., 5., 3., 0., 3., 2.,
1., 0., 0., 1., 3., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1.]),
array([ 38.69307086, 40.37038529, 42.04769973, 43.72501417,
45.4023286 , 47.07964304, 48.75695748, 50.43427191,
52.11158635, 53.78890079, 55.46621523, 57.14352966,
58.8208441 , 60.49815854, 62.17547297, 63.85278741,
65.53010185, 67.20741628, 68.88473072, 70.56204516,
72.23935959, 73.91667403, 75.59398847, 77.27130291,
78.94861734, 80.62593178, 82.30324622, 83.98056065,
85.65787509, 87.33518953, 89.01250396, 90.6898184 ,
92.36713284, 94.04444727, 95.72176171, 97.39907615,
99.07639058, 100.75370502, 102.43101946, 104.1083339 ,
105.78564833, 107.46296277, 109.14027721, 110.81759164,
112.49490608, 114.17222052, 115.84953495, 117.52684939,
https://md2pdf.netlify.app 187/250
11/03/2023, 17:47
Matrix in numpy
four_by_four_matrix = np.matrix(np.ones((4,4), dtype=float))
four_by_four_matrix
np.asarray(four_by_four_matrix)[2] = 2
four_by_four_matrix
Numpy numpy.arange()
What is Arrange?
Sometimes, you want to create values that are evenly spaced within a defined interval. For
instance, you want to create values from 1 to 10; you can use numpy.arange() function
# creating list using range(starting, stop, step)
lst = range(0, 11, 2)
lst
range(0, 11, 2)
for l in lst:
print(l)
https://md2pdf.netlify.app 188/250
11/03/2023, 17:47
2
4
6
8
10
https://md2pdf.netlify.app 189/250
11/03/2023, 17:47
# LogSpace
# LogSpace returns even spaced numbers on a log scale. Logspace has the same parameter
# Syntax:
x.itemsize
16
array([[1, 2, 3],
[4, 5, 6]])
https://md2pdf.netlify.app 190/250
11/03/2023, 17:47
First row: [1 2 3]
Second row: [4 5 6]
First column: [1 4]
Second column: [2 5]
Third column: [3 6]
https://md2pdf.netlify.app 191/250
11/03/2023, 17:47
min: 1
max: 55
mean: 14.777777777777779
sd: 18.913709183069525
min: 1
max: 55
mean: 14.777777777777779
sd: 18.913709183069525
print(two_dimension_array)
print('Column with minimum: ', np.amin(two_dimension_array,axis=0))
print('Column with maximum: ', np.amax(two_dimension_array,axis=0))
print('=== Row ==')
print('Row with minimum: ', np.amin(two_dimension_array,axis=1))
print('Row with maximum: ', np.amax(two_dimension_array,axis=1))
[[ 1 2 3]
[ 4 55 44]
[ 7 8 9]]
Column with minimum: [1 2 3]
Column with maximum: [ 7 55 44]
=== Row ==
Row with minimum: [1 4 7]
Row with maximum: [ 3 55 9]
Tile: [1 2 3 1 2 3]
Repeat: [1 1 2 2 3 3]
0.6149403282678213
0.4763968133790438
0.4763968133790438
['u' 'o' 'o' 'i' 'e' 'e' 'u' 'o' 'u' 'a']
['i' 'u' 'e' 'o' 'a' 'i' 'e' 'u' 'o' 'i']
['iueoaieuoi']
array([[0.97992598, 0.79642484],
[0.65263629, 0.55763145]])
rand2 = np.random.randn(2,2)
rand2
https://md2pdf.netlify.app 193/250
11/03/2023, 17:47
array([[0, 7, 5],
[4, 1, 4],
[3, 5, 3],
[4, 3, 8],
[4, 6, 7]])
min: 3.557811005458804
max: 6.876317743643499
mean: 5.035832048106663
median: 5.020161980441937
mode: ModeResult(mode=array([3.55781101]), count=array([1]))
sd: 0.489682424165213
png
# numpy.dot(): Dot Product in Python using Numpy
# Dot Product
# Numpy is powerful library for matrices computation. For instance, you can compute th
https://md2pdf.netlify.app 194/250
11/03/2023, 17:47
# Syntax
# numpy.dot(x, y, out=None)
Linear Algebra
1. Dot Product
## Linear algebra
### Dot product: product of two arrays
f = np.array([1,2,3])
g = np.array([4,5,3])
### 1*4+2*5 + 3*6
np.dot(f, g) # 23
array([[19, 22],
[43, 50]])
np.linalg.det(i)
-1.999999999999999
Z = np.zeros((8,8))
Z[1::2,::2] = 1
Z[::2,1::2] = 1
https://md2pdf.netlify.app 195/250
11/03/2023, 17:47
new_list
https://md2pdf.netlify.app 196/250
11/03/2023, 17:47
plt.xticks(np.arange(0, 6, step=0.5))
plt.show()
png
To draw the Gaussian normal distribution using numpy. As you can see below, the numpy can
generate random numbers. To create random sample, we need the mean(mu), sigma(standard
deviation), mumber of data points.
mu = 28
sigma = 15
samples = 100000
png
Summery
To summarize, the main differences with python lists are:
1. Arrays support vectorized operations, while lists don’t.
2. Once an array is created, you cannot change its size. You will have to create a new array or
overwrite the existing one.
3. Every array has one and only one dtype. All items in it should be of that dtype.
4. An equivalent numpy array occupies much less space than a python list of lists.
5. numpy arrays support boolean indexing.
💻 Exercises: Day 24
1. Repeat all the examples
🎉 CONGRATULATIONS ! 🎉
<< Day 23 | Day 25 >>
30 Days Of Python: Day 25 - Pandas
LinkedIn Follow @asabeneh
https://md2pdf.netlify.app 197/250
11/03/2023, 17:47
sorting
slicing
aggregation
imputation. If you are using anaconda, you do not have install pandas.
Installing Pandas
For Mac:
pip install conda
conda install pandas
For Windows:
pip install conda
pip install pandas
Next, we will see how to import pandas and how to create Series and DataFrames using pandas
Importing Pandas
import pandas as pd # importing pandas as pd
import numpy as np # importing numpy as np
0 1
1 2
2 3
3 4
4 5
dtype: int64
1 1
2 2
3 3
4 4
5 5
dtype: int64
fruits = ['Orange','Banana','Mango']
fruits = pd.Series(fruits, index=[1, 2, 3])
print(fruits)
1 Orange
2 Banana
3 Mango
dtype: object
https://md2pdf.netlify.app 200/250
Creating Pandas Series from a Dictionary
11/03/2023, 17:47
dct = {'name':'Asabeneh','country':'Finland','city':'Helsinki'}
s = pd.Series(dct)
print(s)
name Asabeneh
country Finland
city Helsinki
dtype: object
1 10
2 10
3 10
dtype: int64
0 5.000000
1 6.666667
2 8.333333
3 10.000000
4 11.666667
5 13.333333
6 15.000000
7 16.666667
8 18.333333
9 20.000000
dtype: float64
DataFrames
https://md2pdf.netlify.app 201/250
11/03/2023, 17:47
https://md2pdf.netlify.app 202/250
11/03/2023, 17:47
df = pd.read_csv('weight-height.csv')
print(df)
Data Exploration
Let us read only the first 5 rows using head()
print(df.head()) # give five rows we can increase the number of rows by passing argume
https://md2pdf.netlify.app 203/250
11/03/2023, 17:47
(10000, 3)
print(heights)
0 73.847017
1 68.781904
2 74.110105
3 71.730978
4 69.881796
...
9995 66.172652
9996 67.067155
9997 63.867992
9998 69.034243
https://md2pdf.netlify.app 204/250
11/03/2023, 17:47
9999 61.944246
Name: Height, Length: 10000, dtype: float64
print(weights)
0 241.893563
1 162.310473
2 212.740856
3 220.042470
4 206.349801
...
9995 136.777454
9996 170.867906
9997 128.475319
9998 163.852461
9999 113.649103
Name: Weight, Length: 10000, dtype: float64
print(len(heights) == len(weights))
True
count 10000.000000
mean 66.367560
std 3.847528
min 54.263133
25% 63.505620
50% 66.318070
75% 69.174262
max 78.998742
Name: Height, dtype: float64
print(weights.describe())
https://md2pdf.netlify.app 205/250
11/03/2023, 17:47
count 10000.000000
mean 161.440357
std 32.108439
min 64.700127
25% 135.818051
50% 161.212928
75% 187.169525
max 269.989699
Name: Weight, dtype: float64
Height Weight
count 10000.000000 10000.000000
mean 66.367560 161.440357
std 3.847528 32.108439
min 54.263133 64.700127
25% 63.505620 135.818051
50% 66.318070 161.212928
75% 69.174262 187.169525
max 78.998742 269.989699
Similar to describe(), the info() method also give information about the dataset.
Modifying a DataFrame
Modifying a DataFrame: * We can create a new DataFrame * We can create a new column and add
it to the DataFrame, * we can remove an existing column from a DataFrame, * we can modify an
existing column in a DataFrame, * we can change the data type of column values in the DataFrame
Creating a DataFrame
As always, first we import the necessary packages. Now, lets import pandas and numpy, two best
friends ever.
import pandas as pd
import numpy as np
data = [
{"Name": "Asabeneh", "Country":"Finland","City":"Helsinki"},
https://md2pdf.netlify.app 206/250
11/03/2023, 17:47
As you can see in the DataFrame above, we did add new columns, Weight and Height. Let's add
one additional column called BMI(Body Mass Index) by calculating their BMI using thier mass and
height. BMI is mass divided by height squared (in meters) - Weight/Height * Height.
As you can see, the height is in centimeters, so we shoud change it to meters. Let's modify the
height row.
Modifying column values
df['Height'] = df['Height'] * 0.01
df
bmi = calculate_bmi()
df['BMI'] = bmi
df
The BMI column values of the DataFrame are float with many significant digits after decimal. Let's
change it to one significant digit after point.
df['BMI'] = round(df['BMI'], 1)
print(df)
dtype('int64')
https://md2pdf.netlify.app 209/250
11/03/2023, 17:47
dtype('int32')
dtype('int32')
Now, the column values of birth year and current year are integers. We can calculate the age.
ages = df['Current Year'] - df['Birth Year']
ages
0 251
1 35
2 30
dtype: int32
df['Ages'] = ages
print(df)
https://md2pdf.netlify.app 210/250
11/03/2023, 17:47
Mean: 32.5
Boolean Indexing
print(df[df['Ages'] > 120])
Folder structure
After completing all the step, your project file structure should look like this:
├── Procfile
├── app.py
├── env
│ ├── bin
├── requirements.txt
├── static
│ └── css
│ └── main.css
└── templates
├── about.html
├── home.html
├── layout.html
├── post.html
└── result.html
Step 2:
asabeneh@Asabeneh:~/Desktop$ mkdir python_for_web
asabeneh@Asabeneh:~/Desktop$ cd python_for_web/
asabeneh@Asabeneh:~/Desktop/python_for_web$ virtualenv venv
asabeneh@Asabeneh:~/Desktop/python_for_web$ source venv/bin/activate
(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze
(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip install Flask
(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze
Click==7.0
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
(env) asabeneh@Asabeneh:~/Desktop/python_for_web$
We created a project director named python_for_web. Inside the project we created a virtual
environment venv which could be any name but I prefer to call it venv. Then we activated the virtual
https://md2pdf.netlify.app 213/250
11/03/2023, 17:47
environment. We used pip freeze to check the installed packages in the project directory. The result
of pip freeze was empty because a package was not installed yet.
Now, let's create app.py file in the project directory and write the following code. The app.py file will
be the main file in the project. The following code has flask module, os module.
Creating routes
The home route.
# let's import the flask
from flask import Flask
import os # importing operating system module
app = Flask(__name__)
@app.route('/about')
def about():
return '<h1>About us</h1>'
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
To run the flask application, write python app.py in the main flask application directory.
After you run python app.py check local host 5000.
Let us add additional route. Creating about route
# let's import the flask
from flask import Flask
import os # importing operating system module
app = Flask(__name__)
@app.route('/about')
def about():
https://md2pdf.netlify.app 214/250
11/03/2023, 17:47
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
Now, we added the about route in the above code. How about if we want to render an HTML file
instead of string? It is possible to render HTML file using the function render_templae. Let us create
a folder called templates and create home.html and about.html in the project directory. Let us also
import the render_template function from flask.
Creating templates
Create the HTML files inside templates folder.
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Home</title>
</head>
<body>
<h1>Welcome Home</h1>
</body>
</html>
about.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>About</title>
</head>
<body>
<h1>About Us</h1>
</body>
</html>
https://md2pdf.netlify.app 215/250
Python Script
11/03/2023, 17:47
app.py
# let's import the flask
from flask import Flask, render_template
import os # importing operating system module
app = Flask(__name__)
@app.route('/about')
def about():
return render_template('about.html')
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
As you can see to go to different pages or to navigate we need a navigation. Let's add a link to each
page or let's create a layout which we use to every page.
Navigation
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
Now, we can navigate between the pages using the above link. Let us create additional page which
handle form data. You can call it any name, I like to call it post.html.
We can inject data to the HTML files using Jinja2 template engine.
# let's import the flask
from flask import Flask, render_template, request, redirect, url_for
import os # importing operating system module
app = Flask(__name__)
@app.route('/about')
def about():
name = '30 Days Of Python Programming'
return render_template('about.html', name = name, title = 'About Us')
@app.route('/post')
def post():
name = 'Text Analyzer'
return render_template('post.html', name = name, title = name)
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
<body>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
<h1>Welcome to {{name}}</h1>
<ul>
{% for tech in techs %}
<li>{{tech}}</li>
{% endfor %}
</ul>
</body>
</html>
about.html
<!DOCTYPE html>
<html lang="en">
https://md2pdf.netlify.app 217/250
11/03/2023, 17:47
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>About Us</title>
</head>
<body>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
<h1>About Us</h1>
<h2>{{name}}</h2>
</body>
</html>
Creating a layout
In the template files, there are lots of repeated codes, we can write a layout and we can remove the
repetition. Let's create layout.html inside the templates folder. After we create the layout we will
import to every file.
Serving Static File
Create a static folder in your project directory. Inside the static folder create CSS or styles folder
and create a CSS stylesheet. We use the url_for module to serve the static file.
layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://fonts.googleapis.com/css?family=Lato:300,400|Nunito:300,400|Ralewa
rel="stylesheet"
/>
<link
rel="stylesheet"
href="{{ url_for('static', filename='css/main.css') }}"
/>
{% if title %}
<title>30 Days of Python - {{ title}}</title>
{% else %}
<title>30 Days of Python</title>
{% endif %}
</head>
<body>
https://md2pdf.netlify.app 218/250
11/03/2023, 17:47
<header>
<div class="menu-container">
<div>
<a class="brand-name nav-link" href="/">30DaysOfPython</a>
</div>
<ul class="nav-lists">
<li class="nav-list">
<a class="nav-link active" href="{{ url_for('home') }}">Home</a>
</li>
<li class="nav-list">
<a class="nav-link active" href="{{ url_for('about') }}">About</a>
</li>
<li class="nav-list">
<a class="nav-link active" href="{{ url_for('post') }}"
>Text Analyzer</a
>
</li>
</ul>
</div>
</header>
<main>
{% block content %} {% endblock %}
</main>
</body>
</html>
Now, lets remove all the repeated code in the other template files and import the layout.html. The
href is using url_for function with the name of the route function to connect each navigation route.
home.html
{% extends 'layout.html' %} {% block content %}
<div class="container">
<h1>Welcome to {{name}}</h1>
<p>
This application clean texts and analyse the number of word, characters and
most frequent words in the text. Check it out by click text analyzer at the
menu. You need the following technologies to build this web application:
</p>
<ul class="tech-lists">
{% for tech in techs %}
<li class="tech">{{tech}}</li>
{% endfor %}
</ul>
</div>
{% endblock %}
about.html
https://md2pdf.netlify.app 219/250
11/03/2023, 17:47
post.html
{% extends 'layout.html' %} {% block content %}
<div class="container">
<h1>Text Analyzer</h1>
<form action="https://thirtydaysofpython-v1.herokuapp.com/post" method="POST">
<div>
<textarea rows="25" name="content" autofocus></textarea>
</div>
<div>
<input type="submit" class="btn" value="Process Text" />
</div>
</form>
</div>
{% endblock %}
Request methods, there are different request methods(GET, POST, PUT, DELETE) are the common
request methods which allow us to do CRUD(Create, Read, Update, Delete) operation.
In the post, route we will use GET and POST method alternative depending on the type of request,
check how it looks in the code below. The request method is a function to handle request methods
and also to access form data. app.py
# let's import the flask
from flask import Flask, render_template, request, redirect, url_for
import os # importing operating system module
app = Flask(__name__)
# to stop caching static file
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
https://md2pdf.netlify.app 220/250
11/03/2023, 17:47
@app.route('/about')
def about():
name = '30 Days Of Python Programming'
return render_template('about.html', name = name, title = 'About Us')
@app.route('/result')
def result():
return render_template('result.html')
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
So far, we have seen how to use template and how to inject data to template, how to a common
layout. Now, lets handle static file. Create a folder called static in the project director and create a
folder called css. Inside css folder create main.css. Your main. css file will be linked to the
layout.html.
You don't have to write the css file, copy and use it. Let's move on to deployment.
Deployment
Creating Heroku account
Heroku provides a free deployment service for both front end and fullstack applications. Create an
account on heroku and install the heroku CLI for you machine. After installing heroku write the
following command
Login to Heroku
asabeneh@Asabeneh:~$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
https://md2pdf.netlify.app 221/250
11/03/2023, 17:47
Let's see the result by clicking any key from the keyboard. When you press any key from you
keyboard it will open the heroku login page and click the login page. Then you will local machine will
be connected to the remote heroku server. If you are connected to remote server, you will see this.
asabeneh@Asabeneh:~$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/be12987c-583a-4458-a2c2-ba
Logging in... done
Logged in as asabeneh@gmail.com
asabeneh@Asabeneh:~$
The Procfile will have the command which run the application in the web server in our case on
Heroku.
web: python app.py
Limiting documents
Find with sort
Update with query
Delete Document
Drop a collection
💻 Exercises: Day 27
📘 Day 27
Python with MongoDB
Python is a backend technology and it can be connected with different data base applications. It
can be connected to both SQL and noSQL databases. In this section, we connect Python with
MongoDB database which is noSQL database.
MongoDB
MongoDB is a NoSQL database. MongoDB stores data in a JSON like document which make
MongoDB very flexible and scalable. Let us see the different terminologies of SQL and NoSQL
databases. The following table will make the difference between SQL versus NoSQL databases.
SQL versus NoSQL
SQL versus NoSQL
In this section, we will focus on a NoSQL database MongoDB. Lets sign up on mongoDB by click on
the sign in button then click register on the next page.
MongoDB Sign up pages
Complete the fields and click continue
Mongodb register
Select the free plan
Mongodb free plan
Choose the proximate free region and give any name for you cluster.
Mongodb cluster name
Now, a free sandbox is created
https://md2pdf.netlify.app 224/250
11/03/2023, 17:47
Mongodb sandbox
All local host access
Mongodb allow ip access
Add user and password
Mongodb add user
Create a mongoDB uri link
Mongodb create uri
Select Python 3.6 or above driver
Mongodb python driver
Getting Connection String(MongoDB URI)
Copy the connection string link and you will get something like this
mongodb+srv://asabeneh:<password>@30daysofpython-twxkr.mongodb.net/test?retryWrites=tr
Do not worry about the url, it is a means to connect your application with mongoDB. Let us replace
the password placeholder with the password you used to add a user.
Example:
mongodb+srv://asabeneh:123123123@30daysofpython-twxkr.mongodb.net/test?retryWrites=tru
Now, I replaced everything and the password is 123123 and the name of the database is
thirty_days_python. This is just an example, your password must be a bit stronger than this.
Python needs a mongoDB driver to access mongoDB database. We will use pymongo with
dnspython to connect our application with mongoDB base . Inside your project directory install
pymongo and dnspython.
pip install pymongo dnspython
The "dnspython" module must be installed to use mongodb+srv:// URIs. The dnspython is a DNS
toolkit for Python. It supports almost all record types.
Connecting Flask application to MongoDB Cluster
https://md2pdf.netlify.app 225/250
11/03/2023, 17:47
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
When we run the above code we get the default mongoDB databases.
['admin', 'local']
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 226/250
11/03/2023, 17:47
After we create a database, we also created a students collection and we used insert_one() method
to insert a document. Now, the database thirty_days_of_python and students collection have been
created and the document has been inserted. Check your mongoDB cluster and you will see both
the database and the collection. Inside the collection, there will be a document.
['thirty_days_of_python', 'admin', 'local']
If you see this on the mongoDB cluster, it means you have successfully created a database and a
collection.
Creating database and collection
If you have seen on the figure, the document has been created with a long id which acts as a
primary key. Every time we create a document mongoDB create and unique id for it.
Inserting many documents to collection
The insert_one() method inserts one item at a time if we want to insert many documents at once
either we use insert_many() method or for loop. We can use for loop to inset many documents at
once.
# let's import the flask
from flask import Flask, render_template
import os # importing operating system module
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
students = [
{'name':'David','country':'UK','city':'London','age':34},
{'name':'John','country':'Sweden','city':'Stockholm','age':28},
{'name':'Sami','country':'Finland','city':'Helsinki','age':25},
]
for student in students:
db.students.insert_one(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
MongoDB Find
The find() and findOne() methods are common method to find data in a collection in mongoDB
database. It is similar to the SELECT statement in a MySQL database. Let us use the find_one()
https://md2pdf.netlify.app 227/250
11/03/2023, 17:47
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
The above query returns the first entry but we can target specific document using specific _id. Let
us do one example, use David's id to get David object.
'_id':ObjectId('5df68a23f106fe2d315bbc8c')
# let's import the flask
from flask import Flask, render_template
import os # importing operating system module
from bson.objectid import ObjectId # id object
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
student = db.students.find_one({'_id':ObjectId('5df68a23f106fe2d315bbc8c')})
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 228/250
11/03/2023, 17:47
We have seen, how to use find_one() using the above examples. Let's move one to find()
find(): returns all the occurrence from a collection if we don't pass a query object. The object is
pymongo.cursor object.
# let's import the flask
from flask import Flask, render_template
import os # importing operating system module
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
students = db.students.find()
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
We can specify which fields to return by passing second object in the find({}, {}). 0 means not
include and 1 means include but we can not mix 0 and 1, except for _id.
# let's import the flask
from flask import Flask, render_template
import os # importing operating system module
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
students = db.students.find({}, {"_id":0, "name": 1, "country":1}) # 0 means not incl
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 229/250
11/03/2023, 17:47
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {
"country":"Finland"
}
students = db.students.find(query)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
https://md2pdf.netlify.app 230/250
11/03/2023, 17:47
query = {
"city":"Helsinki"
}
students = db.students.find(query)
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {
"country":"Finland",
"city":"Helsinki"
}
students = db.students.find(query)
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 231/250
11/03/2023, 17:47
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {"age":{"$gt":30}}
students = db.students.find(query)
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {"age":{"$gt":30}}
students = db.students.find(query)
for student in students:
print(student)
Limiting documents
We can limit the number of documents we return using the limit() method.
https://md2pdf.netlify.app 232/250
11/03/2023, 17:47
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
db.students.find().limit(3)
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
students = db.students.find().sort('name')
for student in students:
print(student)
students = db.students.find().sort('name',-1)
for student in students:
print(student)
students = db.students.find().sort('age')
for student in students:
print(student)
students = db.students.find().sort('age',-1)
for student in students:
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
Ascending order
https://md2pdf.netlify.app 233/250
11/03/2023, 17:47
Descending order
{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'c
{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'ci
{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city'
{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland'
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {'age':250}
new_value = {'$set':{'age':38}}
db.students.update_one(query, new_value)
# lets check the result if the age is modified
for student in db.students.find():
print(student)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 234/250
11/03/2023, 17:47
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
query = {'name':'John'}
db.students.delete_one(query)
app = Flask(__name__)
if __name__ == '__main__':
# for deployment we use the environ
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
As you can see John has been removed from the collection.
When we want to delete many documents we use delete_many() method, it takes a query object. If
we pass an empty query object to delete_many({}) it will delete all the documents in the collection.
Drop a collection
https://md2pdf.netlify.app 235/250
11/03/2023, 17:47
MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mon
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
db.students.drop()
HTTP is an established communication protocol between a client and a server. A client in this case
is a browser and server is the place where you access data. HTTP is a network protocol used to
deliver resources which could be files on the World Wide Web, whether they are HTML files, image
files, query results, scripts, or other file types.
A browser is an HTTP client because it sends requests to an HTTP server (Web server), which then
sends responses back to the client.
Structure of HTTP
HTTP uses client-server model. An HTTP client opens a connection and sends a request message
to an HTTP server and the HTTP server returns response message which is the requested
resources. When the request response cycle completes the server closes the connection.
HTTP request response cycle
The format of the request and response messages are similar. Both kinds of messages have
an initial line,
zero or more header lines,
a blank line (i.e. a CRLF by itself), and
an optional message body (e.g. a file, or query data, or query output).
Let us an example of request and response messages by navigating this
site:https://thirtydaysofpython-v1-final.herokuapp.com/. This site has been deployed on Heroku
free dyno and in some months may not work because of high request. Support this work to make
the server run all the time.
Request and Response header
Initial Request Line(Status Line)
The initial request line is different from the response. A request line has three parts, separated by
spaces:
method name(GET, POST, HEAD)
path of the requested resource,
the version of HTTP being used. eg GET / HTTP/1.1
GET is the most common HTTP that helps to get or read resource and POST is a common request
method to create resource.
https://md2pdf.netlify.app 238/250
Initial Response Line(Status Line)
11/03/2023, 17:47
The initial response line, called the status line, also has three parts separated by spaces:
HTTP version
Response status code that gives the result of the request, and a reason which describes the
status code. Example of status lines are: HTTP/1.0 200 OK or HTTP/1.0 404 Not Found Notes:
The most common status codes are: 200 OK: The request succeeded, and the resulting resource
(e.g. file or script output) is returned in the message body. 500 Server Error A complete list of
HTTP status code can be found here. It can be also found here.
Header Fields
As you have seen in the above screenshot, header lines provide information about the request or
response, or about the object sent in the message body.
GET / HTTP/1.1
Host: thirtydaysofpython-v1-final.herokuapp.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: https://thirtydaysofpython-v1-final.herokuapp.com/post
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,fi-FI;q=0.8,fi;q=0.7,en-CA;q=0.6,en-US;q=0.5,fr;q=0.4
The GET, POST, PUT and DELETE are the HTTP request methods which we are going to implement
an API or a CRUD operation application.
1. GET: GET method is used to retrieve and get information from the given server using a given
URI. Requests using GET should only retrieve data and should have no other effect on the data.
2. POST: POST request is used to create data and send data to the server, for example, creating a
new post, file upload, etc. using HTML forms.
3. PUT: Replaces all current representations of the target resource with the uploaded content and
we use it modify or update data.
4. DELETE: Removes data
💻 Exercises: Day 28
1. Read about API and HTTP
🎉 CONGRATULATIONS ! 🎉
<< Day 27 | Day 29 >>
30 Days Of Python: Day 29 - Building an API
LinkedIn Follow @asabeneh
In this section, we will cove a RESTful API that uses HTTP request methods to GET, PUT, POST and
DELETE data.
RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST
and DELETE data. In the previous sections, we have learned about python, flask and mongoDB. We
will use the knowledge we acquire to develop a RESTful API using python flask and mongoDB.
Every application which has CRUD(Create, Read, Update, Delete) operation has an API to create
data, to get data, to update data or to delete data from database.
The browser can handle only get request. Therefore, we have to have a tool which can help us to
handle all request methods(GET, POST, PUT, DELETE).
Examples of API
Countries API: https://restcountries.eu/rest/v2/all
Cats breed API: https://api.thecatapi.com/v1/breeds
Postman is a very popular tool when it comes to API development. So, if you like to do this section
you need to download postman. An alternative of Postman is Insomnia.
Postman
Structure of an API
An API end point is a URL which can help to retrieve, create, update or delete a resource. The
structure looks like this: Example: https://api.twitter.com/1.1/lists/members.json Returns the
members of the specified list. Private list members will only be shown if the authenticated user
owns the specified list. The name of the company name followed by version followed by the
purpose of the API. The methods: HTTP methods & URLs
The API uses the following HTTP methods for object manipulation:
GET Used for object retrieval
POST Used for object creation and object actions
PUT Used for object update
DELETE Used for object deletion
Let us build an API which collects information about 30DaysOfPython students. We will collect the
name, country, city, date of birth, skills and bio.
To implement this API, we will use:
Postman
Python
https://md2pdf.netlify.app 241/250
11/03/2023, 17:47
Flask
MongoDB
Retrieving data using get
In this step, let us use dummy data and return it as a json. To return it as json, will use json module
and Response module.
# let's import the flask
app = Flask(__name__)
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
When you request the http://localhost:5000/api/v1.0/students url on the browser you will get this:
Get on browser
https://md2pdf.netlify.app 242/250
11/03/2023, 17:47
When you request the http://localhost:5000/api/v1.0/students url on the browser you will get this:
Get on postman
In stead of displaying dummy data let us connect the flask application with MongoDB and get data
from mongoDB database.
# let's import the flask
app = Flask(__name__)
#
MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/tes
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
By connecting the flask, we can fetch students collection data from the thirty_days_of_python
database.
[
{
"_id": {
"$oid": "5df68a21f106fe2d315bbc8b"
},
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"age": 38
},
{
"_id": {
"$oid": "5df68a23f106fe2d315bbc8c"
},
https://md2pdf.netlify.app 243/250
11/03/2023, 17:47
"name": "David",
"country": "UK",
"city": "London",
"age": 34
},
{
"_id": {
"$oid": "5df68a23f106fe2d315bbc8e"
},
"name": "Sami",
"country": "Finland",
"city": "Helsinki",
"age": 25
}
]
Getting a document by id
We can access signle document using an id, let's access Asabeneh using his id.
http://localhost:5000/api/v1.0/students/5df68a21f106fe2d315bbc8b
# let's import the flask
app = Flask(__name__)
#
MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/tes
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
https://md2pdf.netlify.app 244/250
11/03/2023, 17:47
[
{
"_id": {
"$oid": "5df68a21f106fe2d315bbc8b"
},
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"age": 38
}
]
app = Flask(__name__)
#
MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/tes
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
https://md2pdf.netlify.app 245/250
11/03/2023, 17:47
city = request.form['city']
skills = request.form['skills'].split(', ')
bio = request.form['bio']
birthyear = request.form['birthyear']
created_at = datetime.now()
student = {
'name': name,
'country': country,
'city': city,
'birthyear': birthyear,
'skills': skills,
'bio': bio,
'created_at': created_at
}
db.students.insert_one(student)
return ;
def update_student (id):
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
app = Flask(__name__)
#
MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/tes
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
}
db.students.insert_one(student)
return
@app.route('/api/v1.0/students/<id>', methods = ['PUT']) # this decorator create the h
def update_student (id):
query = {"_id":ObjectId(id)}
name = request.form['name']
country = request.form['country']
city = request.form['city']
skills = request.form['skills'].split(', ')
bio = request.form['bio']
birthyear = request.form['birthyear']
created_at = datetime.now()
student = {
'name': name,
'country': country,
'city': city,
'birthyear': birthyear,
'skills': skills,
'bio': bio,
'created_at': created_at
}
db.students.update_one(query, student)
# return Response(dumps({"result":"a new student has been created"}), mimetype='ap
return
def update_student (id):
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 247/250
Deleting a document using Delete
11/03/2023, 17:47
app = Flask(__name__)
#
MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/tes
client = pymongo.MongoClient(MONGODB_URI)
db = client['thirty_days_of_python'] # accessing the database
}
db.students.insert_one(student)
return
@app.route('/api/v1.0/students/<id>', methods = ['PUT']) # this decorator create the h
def update_student (id):
query = {"_id":ObjectId(id)}
https://md2pdf.netlify.app 248/250
11/03/2023, 17:47
name = request.form['name']
country = request.form['country']
city = request.form['city']
skills = request.form['skills'].split(', ')
bio = request.form['bio']
birthyear = request.form['birthyear']
created_at = datetime.now()
student = {
'name': name,
'country': country,
'city': city,
'birthyear': birthyear,
'skills': skills,
'bio': bio,
'created_at': created_at
}
db.students.update_one(query, student)
# return Response(dumps({"result":"a new student has been created"}), mimetype='ap
return
@app.route('/api/v1.0/students/<id>', methods = ['PUT']) # this decorator create the h
def update_student (id):
query = {"_id":ObjectId(id)}
name = request.form['name']
country = request.form['country']
city = request.form['city']
skills = request.form['skills'].split(', ')
bio = request.form['bio']
birthyear = request.form['birthyear']
created_at = datetime.now()
student = {
'name': name,
'country': country,
'city': city,
'birthyear': birthyear,
'skills': skills,
'bio': bio,
'created_at': created_at
}
db.students.update_one(query, student)
# return Response(dumps({"result":"a new student has been created"}), mimetype='ap
return ;
@app.route('/api/v1.0/students/<id>', methods = ['DELETE'])
def delete_student (id):
db.students.delete_one({"_id":ObjectId(id)})
return
if __name__ == '__main__':
# for deployment
# to make it work for both production and development
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
https://md2pdf.netlify.app 249/250
💻 Exercises: Day 29
11/03/2023, 17:47
https://md2pdf.netlify.app 250/250