Archive
Python: Library Managment System -P1
Learning : Python, DataBase, SQlite
Subject: Create Simple Library Managment System
Details: The project is to Plann, design and builed a simple Library Managment System LMS (For Books), the main Functions in the system are: (In this Version 1)
- Add New Book.
- Edit an exsit Book.
- Delete a Book.
- Search.
Planning: In this step we need to sit with the Business owner to identify the problem and plann the project. Since we will work as Fullstack (mean we will do every thing) and this is a training session project, we will be the Business owner of the project and will talk about the problem.
The Problem: In a very simple way, we have some Books and we want a System to store the books in a way that we can retrieve it’s basic information such as Title, Author, Subject and other information about it. Also we need to do some basic search to get statistics about our Library.
Data Gathering: First we need to define the Data we want to stoe, as we are talking about a simple Books Library System we can predict this very easily by looking to a book that we have and write-dowan the keys part of the book we want to store.
In this project we have three main Entities : Books, Authors, Borrowers. In this version (V.01) of the project we will NOT cover the borrowing functionality. So we will store the following data:
Books Entity: Book Name, Book Author, Date of publish, Edition Number, Book classification number.
Author Entity : Author name, Author Nationality, email, SMA (social media account).
From the Author information we can see that we need to define a new Entity to hold the SMA. SMA Entity: SMA Name, SMA Link.
To Manage our System we will write Four main functions for each entity:
ADD, Edit, Delete and search.
Part 2: In Part-2 we will create the tables (The Entities), Insert the Zero-Row and create the Main Menu for each Entities.
:: Library Managment System ::
| Part 1 | Part 2 | Part 3 | Part 4 |
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Drawing Math Equations
Learning : Python and Math
Subject: Python Project to Draw a Math Equations
In the past week or so I saw a tweet from @matthen2 it was about drawing half circles on 99 points, the 99 points was distributed on a hidden circle, each line (or half circle) connecting x (a point on the circle) and it’s double, so point num 2 is connected to P num 4; (P3 to P6, P4 to P8, …) and so-on
This inspired me to write a Python app (code) to perform same action. Then I just upgrade the idea to draw any mathematical Equation. (Lets say simple mathematical Equations)
In our project, the user will enter the number of points and the starting circle radius, also I fond that we can do more by reducing the circle radius after each point, so i add this to the project.
Coding: We will write a function to collect the points in a list as [x,y], and returns the list. Then we pass each two points of (x1,y1) and (x2,y2) to another Function to draw a line between those points. In this version we will write the Equations as hard-code in our project.
So First Function will be the get_points() here the systems will ask the user to Enter some variables. We will collect the number of points P, the raidus of the circle circumference that points will be distributed On it’s, also we will ask the user if circle radius is fixed or decreased by a given factor.
Using mathematics we know that a circle has 360degree, so if we divide 360 over P we will have (if we can call it) the arc_angle. .. Here is the code for the function …
# Function to collect the x,y points
def get_points() :
p = int(input(' Enter number of Points: ')) # number of points.
arc_angle = 360 / p
circle_r = int(input(' Enter the Cricle Radius: ') )
fix_r = int(input(' Enter a number to reduce the Radius:'))
#To return the x,y list of the points that we want to connect.
p_list = []
t.goto(0,0)
t.setheading(-90)
for p in range (0,p+1) :
t.goto(0,0)
t.forward(circle_r)
nx = t.xcor()
ny = t.ycor()
# If the user want to reduce the radius.
circle_r = circle_r - fix_r
p_list.append([nx,ny])
t.right(-arc_angle)
return p_list
By now, we have a list of points [x,y], and we will passing two points to another function def draw_line(x1, y1, x2, y2): to draw a line between the points. Very simple and easy Function …
# Function to draw a line def draw_line(x1, y1, x2, y2): t.goto(x1,y1) t.pendown() t.goto(x2,y2) t.penup()
Now the tricky part, How to select the points?. To do this we assume we have an Equation (e1) and if we got any errors like (division by zero, or out of index) we will apply another Equation (e2), e1 and e2 will be hard-coded and each time we need to change it and run the application again to see the result. And to draw a line between the points based on e1 and e2 we will run a for loop …. Here is the code ..
# drawing the equations
for d in range(len(p_list)-1) :
e1 = d * 2
e2 = abs( len(p_list) - (d*2))
try:
draw_line(p_list[d][0], p_list[d][1],p_list[e1][0], p_list[e1][1])
except:
if e1 > len(p_list) :
draw_line(p_list[d][0], p_list[d][1],p_list[e2][0], p_list[e2][1])
Here is some output
|
|
![]() |
|
|
![]() |
This is the end of this project, Do we need any upgrading in any part of it?
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python : Triangle Parameters
Learning : Python to Draw a Triangle
Subject: To get the Parameters of a Triangle
A week ago I start helping a friend in a mathematics geometric to draw a Triangle from Two points that represent the The Hypotenuse of a Triangle, then I deside to write a python project to Draw a triangle based on two given points (x1,y1) and (x2,y2) and to print it’s parameter (other sides and angles). We will use the Trinket.io as a Python interrapter and will draw with turtle library.
Project Details: The system will ask the user to Enter the coordinates of Two points To draw a Right Angle Triangle. In our Triangle, we will call the (x1,y1) as Point A, and (x2,y2) as Point C. From our starting poins we can calculate the distance between point A and point (B), also the length of Hypotenuse and the angels in the Triangle.
So, What we have:
tri_opposite = abs( y2 – y1 )
tri_adjacent = abs( x2 – x1 )
From a mathimatics triangle formula we know that:
Opposite^2 + Adjacent^2 = Hypotenuse^2
where: x^2 = square(x)
So:
tri_hypo = tri_opposite**2 + tri_adjacent**2
tri_hypo = math.sqrt(tri_hypo)
tri_hypo is the distance between point A and Point C (the opposite
side of the right angle)
Now the Angels:
As we know that in a triangle the summation on all inside angles is 180deg, and in a Right Triangle we will have a one fixed 90 degree angle (ABC), so the first thing we will work on calculating the Opposite angle (BAC).
From a Triangle math:
tri_opposite = abs( y2 – y1)
tri_adjacent = abs(x2 -x1)
the_deg (BAC) = inverse tan for (tri_opposite / tri_adjacent)
# get the inverse of Tan
the_ang = math.degrees(math.atan(the_deg))
Now, lets do some coding ..
First thing we will import two libraries turtle and math, also we will do some setting for our turtle. … Here is the code ..
# Turtle setting
import turtle, math
# turtle_setting
t = turtle.Turtle()
t.penup()
t.shape("non")
#t.speed(9)
t.speed('fastes')
#t.visible = False
t.hideturtle()
Then we will write a code to draw a ‘Gray’ coordinates cross lines for our project. Here is the code for it ..
def the_cross() :
# To draw the cross represents the coordinate.
t.penup()
t.pencolor('gray')
t.goto(-200,0)
t.setheading(0)
t.pendown()
t.forward(400)
t.penup()
t.goto(0,200)
t.setheading(90)
t.pendown()
t.forward(-400)
t.penup()
t.goto(2,0)
t.pendown()
t.circle(2)
t.penup()
t.goto(0,0)
t.setheading(0)
# calling the function
the_cross()

Now we will write the main function code, First we will ask the user to enter the x,y for two points, then we will do our calculations to get other Triangle parameters and angles, finally we will draw the Triangle. .. Here is the code..
def draw_triangle(x1, y1, x2, y2) :
# draw the Triangle.
style = ('Courier', 20) # font style.
t.penup()
t.goto(x1,y1)
t.setheading(0)
t.pendown()
t.circle(1) # To draw small circle on point A.
t.write('A',font = style) # To write A next to the point.
t.forward((x2-x1))
x3 = t.xcor() # here is the x for point B
y3 = t.ycor() # here is the y for point B
t.right(-90)
t.forward((y2-y1))
t.write('C',font = style) # To write C next to the point.
t.goto(x2,y2)
t.setheading(0)
t.pendown()
t.circle(1) # To draw small circle on point C.
t.penup()
t.goto(x3,y3)
t.pendown()
t.circle(1) # To draw small circle on point B.
t.penup()
t.setpos(x3-15,y3-15)
t.write('B',font = style) # To write B next to the point.
# To calculate the angle of BAC using Triangle Math Equations.
tri_opposite = abs( y2 - y1)
tri_adjacent = abs(x2 -x1)
the_deg = tri_opposite / tri_adjacent
# get the inverse ot Tan using Triangle Math Equations.
the_ang = math.degrees(math.atan(the_deg)) #atan(x) is the inverse of math Tan function.
t.goto(x1,y1)
# To correct the rotation angle based on it's coordinates.
if (x1 > x3) and (y2 > y1) :
rotation = the_ang - 180
elif (x1 y1):
rotation = 360 - the_ang
elif (x1 > x3) and (y2 < y1) :
rotation = 180 - the_ang
elif (x1 < x3) and (y2 < y1) :
rotation = the_ang - 360
#t.right(rotation)
#t.pendown()
# From using Triangle Math Equations, we know that Hypotenuse^2 = Opposite^2 + adjacent^2.
tri_hypo = tri_opposite**2 + tri_adjacent**2
tri_hypo = math.sqrt(tri_hypo)
t.right(rotation)
t.pendown()
t.forward(tri_hypo)
t.penup()
print('\n The Triangle Information:')
print(' Point A= ({},{})'.format(x1,y1))
print(' Point B= ({},{})'.format(x3,y3))
print(' Point C= ({},{})'.format(x2,y2))
print(' Adjacent',tri_adjacent)
print(' Opposite',tri_opposite)
print(' Hypotenuse',tri_hypo)
print(' Angle: ABC = 90')
print(' Angle: BAC = ',the_ang)
print(' Angle: ACB = ',180 - the_ang - 90)
Finally, we need to call the function and pass the two point to it, to do this first we will ask the user to Enter the Two Points and we will make sure that the points are not the same.. Here is the code ..
# calling the draw_triangle function ..
print('\n To draw the Triangle you need to Enter Two Points as X,Y for each one.')
x1 = int(input(' Enter x for First point: '))
y1 = int(input(' Enter y for First point: '))
x2 = int(input(' Enter x for Second point: '))
y2 = int(input(' Enter y for Second point: '))
if (x2==x1) or (y2==y1) :
print(' Your Points are not valid, (x1,x2) or (y1,y2) can't be equal ')
else :
draw_triangle(x1, y1, x2, y2)
![]() |
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Covid19 Function Upgrade 1
Learning : Using Beautifulsoup in Python
Subject: Python & Covid19 Function ‘Data By Country Upgrade
In last post (Python and Covid19) we use the Beautifulsoup and other libraries to grab COVID19 data from the internet and display it on the screen using our Main-Menu and some functions, and we said that some of those functions need some enhancement. In this post we will do some upgrade to one of the functions ‘def covid19_in_country()‘ and we will add the version number to it’s name as (def covid19_in_country_v02()).
In the previous Version of the function, we list down all the countries name with there indexes and ask the user to enter the index number of a country to get it’s COVID19 Data. However in this version we will give the user an option to select wither to:
1. Select the Country Name from a list.
2. Write the Country Name.
So if the user go-for option [1] then this will be as version 1, and if the user select option [2] then we will provide the opportunity to Enter Full or Part of a country Name and we will search for similar input (in the country list) and list them. Here is a screen shot of the RUN-Time ..
![]() |
First we will write a code to create a list of Countries and there Indexes, this new function will called ‘def country_list()’ and it will return a list variable named ‘c_name_list’, here is the code for it.
# Function to create Country List
def country_list() :
c_name_list=[]
total_rows = soup.find_all('th',class_='covid-total-row')
Total_Countries = int((total_rows)[0].b.text)
for x in range (2,Total_Countries) :
try:
c_name_list.append([x,trs[x].find('a',title=re.compile('2020 coronavirus pandemic in *')).text])
except:
pass # If any errors, just pass.
return c_name_list

Now we will split a part that (displaying the Country Data) from the main function ‘covid19_in_country()’ to be as an objet so we can call it any time with passing the country index to it. Here is the code..
# Code to display COVID19 data on the screen.
def show_counry_data(user_c_index) :
# This will print the country name.
print('\n\n ',trs[int(user_c_index)].find('a',title=re.compile('2020 coronavirus pandemic in *')).text)
# This will print the country information.
tds = trs[int(user_c_index)].find_all('td')
print(' Country Rank is: ',int(user_c_index)-1)
print(' Cases:',tds[0].text.strip())
print(' Deths:',tds[1].text.strip())
print(' Recoveries:',tds[2].text.strip())

No we will re-write the main function of covid19_in_country() and we will add version number to it so it will be “covid19_in_country_v02()“. Here is the code ..
# covid19_in_country_v02()
def covid19_in_country_v02() :
"""
Version: 02.13.4.2020
"""
os.system('clear')
print('\n Covid19 Country Data.')
print('\n ',last_update,'\n')
while True:
print('\n Do you want to:' )
print(' 1. Select the Country name from a list.' )
print(' 2. Write the Country Name.')
country_as = input('\n Select from the Menu [1,2]: ')
if country_as in ['1','2'] :
break
else:
print('\n You Must Select [1 or 2] ... Try Again .. ')
c_name_list = country_list()
if country_as =='1' :
# First we will print-out the list of counries name.
for cou in range (0,(len(c_name_list)),4) :
try:
print (' ',c_name_list[cou],c_name_list[cou+1],c_name_list[cou+2],c_name_list[cou+3])
except:
pass # if any error just continue.
while True :
user_c_index = (input('\n\n Enter the Index number of the Country to see it''s Data. [e to Exit] '))
try :
show_counry_data(user_c_index)
except :
if ((str(user_c_index)) in ['e','E']) :
return
else :
print('\n You must Enter a Number or ''e''/''E'' to exit')
if country_as =='2' :
print('\n You Select the option to Enter a Country Name.')
search_country = input(' Enter the Country Name (or Part of it): ')
print(' You enter: ',search_country)
c_indexes=[]
for x in range (0,(len(c_name_list))) :
try :
if (search_country.casefold()) in (c_name_list[x][1]).casefold() :
c_indexes.append([c_name_list[x][0],c_name_list[x][1]])
except:
pass
if (len(c_indexes)==0) :
print('\n We can''t find your search, this may due to:')
print(' 1. Spelling error.')
print(' 2. Country Name drops for some technical error.')
input('\n ... Press any key ...'')
return
else :
print('\n We fond {} matches with your search, Enter the Index Number for the\n one you are looking for: '.format(len(c_indexes)))
print('\n\n ',c_indexes)
show_counry_data(int(input('\n Enter the Counrty Index Now: ')))
input(' ... Press Any Key ...')
This application and the code was written as a matter of training and learning. The owner/creator is not responsible for any missing or wrong data may exist in the file and/or the Data. (the code and/or the data-sets).
Note That: The file will only contain the changes in the function, NOT the Full COVID19 APP.
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python and Covid-19
Learning : Using Beautifulsoup in Python
Subject: Grab Data from a Website Using Python
In this article we will use Python codes to fetche some data from a website, the Data we are looking for is about Covid-19, to do this we can use an API but here I am using web crawler with Beautifulsoup. So let’s start.
Introduction: First we need a Data Source web-Page, if we search the web we will find a lot of pages there I select this one (en.m.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic_by_country_and_territory) Source:wikipedia.org, you need a basic knowledge about HTML to understand the stag’s. After reading the web-page source code we can found the following:
1. The HTML code structure contain 9 Tables.
2. The Data about Covid-19 is in Table No. 2.
3. The Table consist of several ‘tr’ Tag. In HTML ‘tr’ tag is Row.
4. Each ‘tr’ consist of several ‘td’ Tag. In HTML ‘td’ tag is Colunm.
5. Each ‘td’ may contain other tags or information, and some of those information are what we are looking for. We will talk about this later in bellow.
Now we will talk about our Python Application. We will write a Python Application that will display a Menu on the screen and ask the user to select from the Menu, and based on the user selection we will run a function to perform something, in our case we will have a Menu with four choice of selection as:
1. The Totals in the world.
2. The covid-19 by countries.
3. Covid-19 Table.
9. Exit.
To start writing our code, First we need to import some library we here is the code..
# To import needed Libraries import requests, os, re from bs4 import BeautifulSoup
The Menu: As we mentioned we will have a Main-Menu to help the users in there selections. Here is the code:
# COVID-19 APP MAIN MENU
def covid19_menu() :
while True :
# This will Clear the terminal
os.system('clear')
print ('\n =====[ COVID-19 APP MAIN MENU ]=====')
print(' 1. The Total in the World.')
print(' 2. The covid-19 by Countries')
print(' 3. Covid-19 Table. ')
print(' 9. Exit')
user_input = input('\n Enter Your choice: ')
if user_input in ['1','2','3','9'] :
if user_input =='1' :
covid19_world_total()
if user_input =='2' :
covid19_in_country()
if user_input =='3' :
covid19_table()
if user_input =='9' :
return
else :
print (' You Must select from the above Menu.')
input('\n ... Press any key ...')
![]() |
Now we will work on First function, before that we will write this two lines of code to set my_url (the webpage we want to read), and calling the BeautifulSoup for it, so all the webpage source will be as text in variable soup:
# To load the page in a variable soup my_url ='https://en.m.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic_by_country_and_territory' source = requests.get(my_url, headers = headers).text soup = BeautifulSoup(source, 'lxml')
Now our first function will get the last update of the data (Date and Time), after searching the web-site code, I found that the page contain 19 ‘P’ tag’s and the last update statement is in fifth Paragraph, but in case that the page may updated with more data or the page structure changed, we will write a code to search for it. Here is the function to get the Data last Update statement.
# Function to get Last update statement
def get_last_update():
update_date_time = soup.find_all('p')
# I found the date in P = 5, but i will search other the 19 P's
for thep in range (0,19) :
if 'UTC on' in update_date_time[thep].text :
last_update='The Data Updated on ' + update_date_time[thep].text[6:32]
return last_update
else:
thep = thep + 1
Now, our function will get the four set of information for Grand Totals in the world as Total Countries has COVID-19, Total Cases of COVID-19, Total Deaths by COVID-19 and Total Recoveries from COVID-19. Here is the function
# Function to get the covid19 World Totals
def covid19_world_total():
os.system('clear')
print('\n ',last_update,'\n')
# This section will fetch th Total Rows.
total_rows = soup.find_all('th',class_='covid-total-row')
# We know that total_rows has 4 lines, so we will access them as individual.
print('\n ::: TOTAL NUMBERS :::')
print(' Total Countries has COVID-19: ',(total_rows)[0].b.text)
print(' Total Cases of COVID-19: ',(total_rows)[1].b.text)
print(' Total Deaths by COVID-19: ',(total_rows)[2].b.text)
print(' Total Recoveries from COVID-19: ',(total_rows)[3].b.text)
input('\n ... Press any Key ...')
![]() |
RUN-Time: |
Second function we will work on is covid19_table, in this function we will print-out a table of covid19 contains countries Name, cases, Deaths and Recoveries sorted by Number of cases. In this version of application we will display only 10 records.
Enhancement: In a Coming version the user will select the number of records also the sorting type.
# Function to print-out the Covid19 cases.
def covid19_table(top =10):
"""
This Function will print-out the countries table sorted by Number of cases.
If the user did not select number of countries then defult will be first 10.
"""
os.system('clear')
print('\n The List of Countries has Covid-19, Sorted by Total Cases..')
print(' ',last_update,'\n')
r_spc = 30
tab_offset = (r_spc-1)
# To print the Table Header.
print('-'*r_spc,'+','-'*20, '+','-'*21,'+','-'*20)
print(' '*8,'{0:<20} | {1:<15}| {2:<17}| {3:<20}'.format('Countries','Cases','Deths','Recoveries'))
print('-'*r_spc,'+','-'*20, '+','-'*21,'+','-'*20)
droped_data =[]
c = 2
while c <= top :
try:
# This will print the country name.
contry_name = trs[c].find('a',title=re.compile('2020 coronavirus pandemic in *'))
tds = trs[c].find_all('td')
c_offset = len(contry_name.text.strip())
print(' ',c-1,'-',contry_name.text.strip(),' '*(tab_offset - c_offset),(tds[0].text).strip(),' '*(30 -(20 + len((tds[0].text).strip())) +10) ,(tds[1].text).strip(),' '*(30 -(20 + len((tds[1].text).strip())) +12),(tds[2].text).strip())
except :
droped_data.append([c])
c = c + 1
print('\n\n We have {} Droped Country(ies) due to some error'.format(len(droped_data)))
input('\n .. Press Any Key ... ')
RUN-TIME![]() |
In the last Function, we will let the user to select the Country name then we will display the Covid19 information regarding his selection. So to perform this action, First we will create a list of all Countries Name, and display the list on the screen asking the user to select (Enter) the index number of any Country, then we search for that country name and grab it’s Covid19 Data. Here is the code..
# Function to grab Covid19 Data by country.
def covid19_in_country() :
os.system('clear')
print('\n Covid19 Country Data.')
print('\n ',last_update,'\n')
# First we will build a list of counries name.
c_name_list=[]
total_rows = soup.find_all('th',class_='covid-total-row')
Total_Countries = int((total_rows)[0].b.text)
drops_c = 0
for x in range (2,Total_Countries) :
try:
c_name_list.append([x,trs[x].find('a',title=re.compile('2020 coronavirus pandemic in *')).text])
except:
drops_c +=1
print(' We miss {} Countries due to some errors.'.format(drops_c))
print('\n Enter the Country Number to show it''s Data.')
for cou in range (0,(len(c_name_list)),4) :
try:
print (' ',c_name_list[cou],c_name_list[cou+1],c_name_list[cou+2],c_name_list[cou+3])
except:
pass # If there is an error just pass.
while True :
user_c_index = (input('\n\n Enter the Index number of the Country to see it''s Data. [e to Exit] '))
try:
if (isinstance(int(user_c_index), int)) :
# This will print the country name.
print('\n\n ',trs[int(user_c_index)].find('a',title=re.compile('2020 coronavirus pandemic in *')).text)
# This will print the country information.
tds = trs[int(user_c_index)].find_all('td')
print(' Country Rank is: ',int(user_c_index)-1)
print(' Cases:',tds[0].text.strip())
print(' Deths:',tds[1].text.strip())
print(' Recoveries:',tds[2].text.strip())
except :
if ((str(user_c_index)) in ['e','E']) :
return
else :
print('\n You must Enter a Number or ''e''/''E'' to exit')
input(' ... Press Any Key ...')
This application and the code was written as a matter of training and learning. The owner/creator is not responsible for any missing or wrong data may exist in the file and/or the Data. (the code and/or the data-sets).
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python and Excel P1
Learning : Python and Excel Part-1
Subject: Read Excel file
In the coming four or five Lessons we will work on reading and writing to Excel file using Python code.
First we need to import os and Pandas as in coming code block, I will use os later to fetch file information. Also we will set the file_name variable to our file assuming it is in the same .py directory and we will call [read] the file in to df [dataframe]. Here is the code
# Import and call the File into DataFrame. import os, pandas as pd file_name = 'python_sheet_4.xlsx' df = pd.read_excel(file_name, sheet_name='Sheet1')
Now let’s talk about my excel file “python_sheet_4.xlsx” has two sheets named “sheet1 and sheet2” both contin same table sheet1 the table start from cell A1 and in sheet2 the table start from cell C7. So first we will work on sheet1 that’s way we call sheet1 in our df setting statement.
Now we have the df (dataframe), and if we run the this code:
# To print out the data from df DataFrame. print(df)
The Output..![]() |
Here is the original shot for our excel table
![]() |
Here is a list of commands that we can use..
To make things in a professional way, we will write a function so we can use it with other applications, here is it..
The Code |
[Out-Put]:![]() |
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Cooking App P-8
Learning : Python, Data-Base, SQlite
Subject: Writing a Cooking Application
RECIPES MENU: Show Recipe During writing all functions of the application I notes that my “Show Recipe” need to be updated, so in this post we will do some changes on “def show_all_rec(opt)” function.
First, we will change the if opt ==”name” to list all the Recipes Name with ID’s and ask the user to Enter a Recipe ID to show its information.
Here is the code ..
# Changes on show_all_rec(opt) - if opt =="name"
if opt =="name" :
#First we will list down all Recipes Names.
c.execute("select r_id,r_name from recipes where r_id > 0")
for each_r_name in c.fetchall():
print(' ID:',each_r_name[0], ' Name:',each_r_name[1])
get_rec_id = input ('\n Enter the Recipe ID you want to read: ')
# Get the Recipe information based on ID.
c.execute("select * from recipes where r_id ={}".format(get_rec_id))
for each_basic in c.fetchall():
print('\n ID: ',each_basic[0])
print(' Name: ',each_basic[1])
print(' Date: ',each_basic[2])
print(' Type: ',each_basic[3])
print(' Other: ',each_basic[4])
print('\n The Recipe Ingredients: ')
# Get all Recipe Ingredients.
get_sql = '''
select
i_name
from
ingredients_list
INNER JOIN rec_ingredient ON ingredients_list.i_l_id = rec_ingredient.i_l_id
where rec_ingredient.r_id = {}
'''
c.execute(get_sql.format(each_basic[0]))
st = 1
for each in c.fetchall():
print(' ',st,': ',each[0])
st = st + 1
print('\n\n Cooking Steps: ')
# Get the Cooking Steps.
c.execute("select * from recipes_steps where recipes_steps.r_id = {}".format(each_basic[0]))
st = 1
for each in c.fetchall():
print('\n Step-',st,': ',each[2])
st = st + 1
print('\n ---------------------------------------------')
Here is the out-put screen :
First we have the Menus, we select 1,1,1 to get “Show Recipe By Name” ![]() |
Here is the List of All Recipes and we will enter the ID of the one we want to see. ![]() |
Here is the Recipes Information. ![]() |
Notes That 1. We don’t have any Ingredient (we did not add any) so in coming post we will develop the Edit function to add some Ingredient and change/Update the Recipe Information. 2. We are not using any Validations, so if we enter any dummy data for Date the system will accept it. 3. We are not using any (avoiding Error code) such as Try…except.
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Cooking App P-7
Learning : Python, Data-Base, SQlite
Subject: Writing a Cooking Application
RECIPES MENU: Delete Recipe To Delete a recipe we need to point on it, we will do this by it’s ID. So we can show all recipes by names, then we select the one we want to delete and enter it’s ID, the system will ask to confirm this action by typing (y,Y) then it we will call the delete function. In Delete function “def del_recipe()” we need to delete all the data regarding this ID form three DB Tables, recipes, recipes_steps, rec_ingredient and photo. Although we did not use the photo table and and we just create it for future use, but er will write its code.
Future Plan: In coming weeks we will convert this application “Cooking Application” to GUI “Graphical User Interface” application using tkinter library (Tkinter: is a Python binding to the Tk GUI toolkit) .
Coding: So to Delete a recipe we will show all Recipes and there ID’s sorted by it’s Name and ask the user to enter the ID of the Recipe he/she want to delete.
# Code to Delete a Recipe
def del_recipe():
os.system("clear")
print('\n ====== Delete a Recipe =====')
# Start to list down all the Recipes Name.
print("\n\n List of ALL Recipes we have.")
c.execute("select r_id,r_name from recipes where r_id > 0")
for each_r_name in c.fetchall():
print(' ID:',each_r_name[0], 'Name:',each_r_name[1])
# Now we ask the user to Enter the Recipe ID.
rec_del = input('\n\n Enter an Recipe ID to be Deleted: ')
# Now we ask the user to Confirm Deleting Recipe.
sure_remove = input('\n The Recipe will be DELETE and can''t be Rolled-Back. Are you sure you want to Remove it [Y,N] ')
if sure_remove in ['y','Y']:
c.execute ("Delete from recipes_steps where r_id = {}".format(rec_del))
db_conn.commit()
c.execute ("Delete from recipes where r_id = {}".format(rec_del))
db_conn.commit()
c.execute ("Delete from rec_ingredient where r_id = {}".format(rec_del))
db_conn.commit()
c.execute ("Delete from photo where r_id = {}".format(rec_del))
db_conn.commit()
elif sure_remove in ['n','N']: # If the user decide not to delete and select N
print('\n You select NOT to remove the Recipe.')
else :# If the user enter anything else than Y or N
print('\n You must select (Y or N).')
input('\n .. One Recipe Removed .. Press any key .. ')
![]() |
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Cooking App P-6
Learning : Python, Data-Base, SQlite
Subject: Writing a Cooking Application
RECIPES MENU: Adding a Recipe.To Add a recipe we need to work on three tables, the user will not know that, the user dose’t care what happening in the application, he/she want the cooking information to be saved and retrieved whenever required.To do this we First will ask the user to Enter some basic information about the Recipe, such as Name, Date selecting it’s type like is it a Lunch or Dinner and other thing we will see it later while writing the code, then we need to enter the Ingredients of each Recipes, the Ingredients are store in another DB-Table based on our DB-design, so we will list down all the Ingredients and ask the user to select from the list by typing the ID’s of those they want, and if an ingredient does not exist in the list the user will write it.Finally we will ask the user to write the cooking steps.This is not easy way to do it using Terminal-screen or console (Command line application CLIs), we will convert this application to GUI (Graphical User Interface) later after we finish the application.
Now, let’s start with the basic information about the Recipes. In Basic Information we have:
Recipe Name: To give a Name to the Recipe.
Recipe Date: The user can Write a date.
Recipe Type: The user will select one of: [Breakfast, Dinner, Lunch, Snack, Sweet]
Recipe Details: Other Details such as the time needed for cooking, other notes.
Recipe Tags: Tags will not be available in this version, but we will work on it when we start doing the GUI version.
So let’s start writing the code..
# Adding New Recipe
def add_recipe():
os.system("clear")
print('\n ====== Adding New Recipe =====')
print('\n First let''s Enter some Information about the Recipe..')
r_name = input('\n\n Enter The Recipe Name: ').capitalize()
r_date = input('\n\n Enter The Date in dd.mm.yyyy format: ')
# Now to select the Recipe Type.
print('\n A Recipe Type can be:\n 1.Breakfast.\n 2.Dinner.\n 3.Lunch.\n 4.Snack.\n 5.Sweet. ')
r_type = False
while r_type == False :
rec_type = input('\n\n Select a Type [1,2,3,4,5]: ')
if rec_type =='1' :
rec_type ='Breakfast'
r_type = True
elif rec_type =='2' :
rec_type ='Dinner'
r_type = True
elif rec_type =='3' :
rec_type ='Lunch'
r_type = True
elif rec_type =='4' :
rec_type ='Snack'
r_type = True
elif rec_type =='5' :
rec_type ='Sweet'
r_type = True
else :
print('\n You have to select from the List')
r_details = input ('\n Enter Short information for the Recipe, like \n Time for cooking,\n Country of this Meal,\n Other short details.\n [ USE (,) to SEPARATE EACH INFO ]\n\n Enter here: ')
c.execute ("INSERT INTO recipes (r_name, r_date, r_type, r_details ) VALUES(:r_name,:r_date,:r_type, :r_details)",{"r_name":r_name,"r_date":r_date,"r_type":rec_type, "r_details":r_details})
db_conn.commit()
Now, we save the Basic Recipe Information and we have the Recipe ID (PK) and we will use it as a Foreign Key in Recipe-Ingredient and Recipe-Steps. With Recipe-Ingredient we will list down all the recipes and let the user to enter the Id’s of the one’s they will use with there recipe. If the needed Ingredient is not in the list, the user will insert it and it will be added to the Ingredient list. Here is the code for this section. .
#This part of code continuing the above part.
os.system("clear")
# Select the Ingredient for the Recipe.
print('\n Now, Select the Ingredients of your Recipe:')
print("\n If the Ingredient is not in the List you will Add it shortly, FIRST select the exist ones\n write it''s ID Separated by ( , ) ")
print('\n List of Ingredients:')
list_of_ing()
ing_l = input('\n Enter the Ingredients ID Seperated by ( , ) ')
if input ('\n Is there any more Ingredients you want to add? [Y,N]: ') in ['y','Y'] :
new_ing = input('\n Enter the Ingredients Seperated by ( , ): ')
new_ing = new_ing.split(",")
# To get max ingredients ID.
c.execute ("select max(i_l_id) from ingredients_list")
max_ing_id = c.fetchall()[0][0]
ing_l2 =[]
# To add the new ingredients to the ingredients_list .
for each in range(len(new_ing)) :
c.execute ("INSERT INTO ingredients_list (i_name) VALUES(:i_name)",{"i_name":new_ing[each].capitalize() })#ing_name})
db_conn.commit()
ing_l2.append (str(max_ing_id+(each+1)))
ing_l=ing_l.split(",")
ing_l2=ing_l + ing_l2
# To link the ingredients to the recipe.
for each in range (len(ing_l2)):
c.execute ("INSERT INTO rec_ingredient (i_l_id, r_id) VALUES(:i_l_id, :r_id)",{"i_l_id":ing_l2[each],"r_id":rec_max })
db_conn.commit()
Now, we have the all Ingredients of the Recipe, also we have the ID or the Recipe, so we can link the Recipe information to the cooking Steeps. Here the user will write the cooking steps until the user press (Q,q) and Enter.
#This part of code continuing the above part.
print('\n Now we can Write the Cooking Steps, Press Enter After each Step. When you finish just enter (q). ')
stop = False
while stop == False :
c_step = input('\n Enter a Cooking Step: [Press Enter After each Step. q to Finish] :\n Write Here : ')
if c_step not in ['q','Q'] :
c.execute("INSERT Into recipes_steps (r_id , rec_steps) values (:r_id, :rec_steps)",{"r_id":rec_max,"rec_steps":c_step})
db_conn.commit()
else :
stop = True
input('\n .. One Recipe Added .. Press any key .. ')
Here are some screen shots of the code and running out-put.
![]() |
|
In Next Part: In the next coming part we will work on the Deleting Recipe.
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Python: Cooking App P-5
Learning : Python, Data-Base, SQlite
Subject: Writing a Cooking Application
RECIPES MENU: Once I start reading the Net (blogs and Cooking Books) to see how cookers talking about foods-recipes, I realise that I may need to add something to the DataBase, then I start writing the codes for the “Recipe Menu” and immediately I find the we need to add a new Table; I call it “recipes_steps” it will hold several steps of how to cook a recipe.
DataBase Diagram![]() |
Here is the code to create the new Table and adding the record 0 (Zero).
# To create the Table “recipes_steps” .
sql_recipes_steps =”CREATE TABLE if not exists recipes_steps (st_id INTEGER PRIMARY KEY AUTOINCREMENT,r_id integer, rec_steps text )”
c.execute(sql_recipes_steps)
db_conn.commit()
# To add the Record Zero.
c.execute (“INSERT INTO recipes_steps (st_id) VALUES(:st_id)”,{“st_id”:0})
db_conn.commit()
First let’s see the “Recipe Menu” and from there we will write the codes for each item in the menu. As we saw in Ingredients Menu, same functionality should be here to, Listing all Recipes, Adding new one, Editing and Deleting a recipes. We will write the code for each of them, and here is the code for the “Recipes Menu”
# Recipes Menu - Function
def recipes_menu ():
while True:
os.system("clear")
print('\n ===========[ RECIPES MENU ]=============')
print(' --------------------------------------')
print(' 1. Show Recipes.')
print(' 2. Add Recipe.')
print(' 3. Delete Recipe. ')
print(' 4. Edit Recipe.')
print(' 9. Exit')
uinp= input('\n Enter your Selection: ')
if uinp == '1':
show_recipes()
elif uinp == '2':
add_recipe()
elif uinp == '3':
del_recipe()
elif uinp == '4':
edit_recipe()
elif uinp =='9':
return
else:
print('\n Please select from the Menu.')
So first thing we will work on “Show Recipes”, once the user select Show Recipes another Menu will be display to give more option as in the screen shot..
![]() |
![]() |
To display the Recipes based on the options we have, we will write a function that take a parameter based on the user selection so the user can search for a recipe based on it’s Name, Date or other details. Let’s see the code ..
![]() |
![]() |
NOTE THAT: We did nothing with Tags option, after we finish the application we will assume that the Business owner ask to add a new requirement to the application, and we will see the impact of this and who to solve it.
In Next Post we will work on the Adding New Recipe to our Cooking Application.
To Download my Python code (.py) files Click-Here
By: Ali Radwani
Follow me on Twitter..



























