Archive
Sketching and Coloring a Shark
Some time ago I stope publishing my Sketches on my blog or my Twitter account, but this doesn’t mean I stop sketching, I am sketching to improve my skills and clear my mind. Usually I use pencil then ink-ed, some time I color it with Watercolor or Promarker. Today I load one of them to the “Autodesk Sketchbook” App on my Galax Note9 and color it. The sketche is from my SKB 39 ..and here it is . .

More sketches here .. My Sketches Page.
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
Excel : Form to Save Data P-1
Learning : VBA Codes to Save Data
Subject: Create Form to collect Data
In a very fast and as simple as we can, we will design and write VBA codes to transform three fields of Data from an Excel sheet “Form” to another sheet “Data”.
To keep thing as simple as we can, we will not use any Validations on user inputs in this example.
First, we will re-name a sheet to “Form” and another one to “Data”. In sheet [Form] we will create a simple Form to collect Names, Company Name and Emails of our customers, also we add a button and call it Save. As in Image-1
Image-1 ![]() |
For companies Name, We will create a list then we will link it to Cell”D9″ so we can select a “Company Name” from a drop-down list. So to do this First in the Data sheet I will write a list of companies Name as (Comp Name 1,Comp Name 2,Comp Name 3, …. to Comp Name 10). I start my list from Cell “H8” [As in Image-2] you may start from any Cell you want.
Image-2 ![]() |
Now to link a Dropdown list of our companies Name to Cell “D9″ Do this:
1. Goto Cell”D9”.
2. From the menu we will select “Data” then “Data Validation” and select Data Validation. [Image-3]
Image-3 |
3. In the Allow [Select “List”], then in the Source we select the range of Companies we write [Range Cells H8:H17] or just write this: =$H$8:$H$17. Then click OK. See Image-4
Image-4 ![]() |
Now if we try to click on Cell “D9” we will have a list as in Image-5.
Image-5 ![]() |
In the “Data” Sheet we will just create the Table Header as in Image-6, and will go-back to “Form” Sheet.
| Image-6 |
Now we will write the VBA codes and link it to to a “Save” Button we create. To open the Visual-Basic window we select “Developer” From the Top menu, then Press Visual Basic.
![]() |
Then we write this code and link it to the Save Button. ..
# VBA Macro code to Save Data to Data sheet
Sub Save_data()
'
' Save_data Macro
' Macro recorded 2020-03-29 by HP
'
'
' Set Variables
Name = Range("D7").Value
comp_name = Range("D9").Value
Email = Range("D11").Value
' Goto data sheet
Sheets("Data").Select
' This line will get the Next empty Row in the Data sheet.
emp_row = Range("A" & Rows.Count).End(xlUp).Offset(1).Row
Range("A" & emp_row).Value = Name
Range("B" & emp_row).Value = comp_name
Range("C" & emp_row).Value = Email
'Go to Form Sheet.
Sheets("Form").Select
' Clear data cells.
Range("D7").Value = ""
Range("D9").Value = ""
Range("D11").Value = ""
Range("D7").Select
End Sub
Now if we enter some data [as we said: No Validation on the data] and press the Save button, the data will be coped to next empty row in the Data Sheet.
![]() |
Enhancement: In some cases as in our coming project, it’s better to create a sheet and call it “Setting”, then we can have our Lists (such as Company-Name), Colors, Filters all to be in the Setting sheet. [We will see this in the Next Project.]
By: Ali Radwani
Excel, VBA Codes and Formulas-4
Learn To : In Excel – Highlight the Row when clicked.
Assume we have a table, and all we want to do is that if the user click anywhere in the table that ROW will change it’s color.
![]() |
Steps
1. From the Top menu, Go to “Developer”, then Press Visual Basic.
![]() |
2. from the select the sheet name containing the table. ( We have it in Sheet 2 )
3. Then we select “SelectionChange” action from the
![]() |
4. Write this code:
If Not Intersect(ActiveCell, Range(“C8:E9999”)) Is Nothing Then
Range(“A1”).Value = Target.Row
End If
5. You need to know your Table Range, in my example, the range is (“C8:E9999”). I add the “9999” so i will be sure the even if we add more data to out Table the code will handle it.
6. Now we need to add a rule in the “Manage Roles” in “Conditional Formatting” from the Excel Menu. Here is how to Open it.
![]() |
7. Select the “” then add new Rule, Follow the Image showing the steps to do that. Once we finish it should work fine.
![]() |
Now, when the user click any cell in the Table the Row will change it’s color (Format) as we set it.
🙂 Have Fun ..
By: Ali Radwani
Excel, VBA Codes and Formulas-3
Learn To : In Excel – SUMIF and SUMIFS [ Part-2 SUMIFs ]
In SUMIFS we are talking about more than one conditions to apply on the same range or other range before we calculate the SUM of the target range.Case Assumption: As in Part-1, Assume we have a table, with 5 columns (as in image-1) columns titles are [Date, Item, Quantity, Price and Total] containing our Expendituer and we have another table call it Summaries, we want some totals to be in this table. We can see the main table [Expendituer] and the Summary table as in part-1 but here we will add a year column to the Item-Quantity box, so we want to have the Quantity of an Item in given year. Image-2.
Image-1![]() |
Image-2
|
So if we write 2018 in Cell I27 we Must get the Quantity of School Bags we bought in 2018. To do this we will write this formula:
SUMIFS ()
=SUMIFS(E22:E30, D22:D30,J28,C22:C30,”*”&I28)
So in Cell K28 we will write =SUMIFS(E22:E30, D22:D30,J28,C22:C30,”*”&I28)
then we can copy the formula to other cells.
Now we have the formula in all the cells we want, we may need to do a little changes to cells number or columns that may been changed during the copy. And here is a screen shot of what we must have.
|
🙂 Have Fun ..
By: Ali Radwani
Excel, VBA Codes and Formulas-2
Learn To : In Excel – SUMIF and SUMIFS [ Part-1 SUMIF ]
Case Assumption: Assume we have a table, with 5 columns (as in image-1) columns titles are [Date, Item, Quantity, Price and Total] containing our Expendituer and we have another table call it Summaries, we want some totals to be in this table. In Image-1 we can see the main table [Expendituer] and the Summary table.
Image-1 |
In the Above Expendituer Table we have some [Dummy] data, and in our Summary Table we want to calculate the SUM of each year so in the Cell J22 we shall write this formula: =SUMIF()
SUMIF will take 3 parameters First one is the range of applying the condition. Second one is the condition. Third one is the range to calculate to SUM form. So in our case [Image-1]
The range of applying the condition will be C22:C28
The condition is in Cell I22 [23,24,25 … for each row and year.]
The range to calculate to SUM form will be G22:G28
So in Cell J22 we will write =SUMIF(C22:C28,”*”&I22,G22:G28)
then we can copy the formula to other cells [I23 and I24]
So now we have the Sum in each Year. See Image-2
Image-2 |
Now with same formula SUMIF, we can get the Quantity of each Item we purchase, and we will write the formula in Cell J27 [as in Image-1].
So in Cell J27 we will write =SUMIF(D22:D28,I27,E22:E28) as in Image-3 then we copy the formula to Cells [J28, J29, J30 .. and so]
Image-3 |
Now we have the sum of Quantity.
🙂 Have Fun ..
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
Python: Cooking App P-4
Learning : Python, Data-Base, SQlite
Subject: Writing a Cooking Application
INGREDIENT MENU: In this post we will write the Python code for the Ingredient Menu Functions. We have four main Functions :
1. Show all Ingredient.
2. Add Ingredient.
3. Delete Ingredient.
4. Edit Ingredient.
We need the Ingredient List so the user can select an Ingredient for the Recipes they want to write. First we will list down all the Ingredient in the Table.
show_ingredient is a function to list all the ingredient in “ingredients_list” Table, here is the code ..
# Show Ingredient Function
def show_ingredient():
os.system("clear")
print('\n ====== Show All Ingredient =====')
show_sql = c.execute('select * from ingredients_list where i_l_id > 0 order by i_name')
for each in c.fetchall() :
print (' ',each[0],'....',each[1])
input('\n .. Press any key .. ')

add_ingredient Function will let the user to add more Ingredients to the list.
# Add New Ingredients Function
def add_ingredient():
os.system("clear")
print('\n ====== Adding New Ingredient =====')
ing_name = input('\n\n Enter an Ingredient you want to add: ').capitalize()
c.execute ("INSERT INTO ingredients_list (i_name) VALUES(:i_name)",{"i_name":ing_name})
db_conn.commit()
input('\n .. One Ingredient Added .. Press any key .. ')

del_ingredient To Delete an Ingredients we need to enter it’s ID, and If we Delete one and that one was used in any recipes, then once we view the recipe the Ingredients will not show there.
# To Delete an Ingredient
def del_ingredient():
os.system("clear")
print('\n ====== Delete an Ingredient =====\n')
c.execute('select * from ingredients_list where i_l_id > 0 order by i_name')
for each in c.fetchall() :
print (' ',each[0],'....',each[1])
ing_del = input('\n\n Enter an Ingredient ID to Delete: ')
if ing_del.isnumeric():
sure_remove = input('\n Please Note that if you Delete this Ingredient it will not show in any recipes that use it.\n Are you sure you want to Remove it [Y,N] ')
if sure_remove in ['y','Y']:
c.execute ("Delete from ingredients_list where i_l_id = {}".format(ing_del))
db_conn.commit()
elif sure_remove in ['n','N']:
print('\n You select NOT to remove the Ingredient.')
else :
print('\n You must select (Y or N).')
input('\n .. One Ingredient Deleted .. Press any key .. ')
else:
print('\n You must Enter a Numeric Ingredient ID.')
input('\n .. Press any key .. ')
edit_ingredient To Edit an Ingredients we need to enter it’s ID, so first we will list down all Ingredients we have then the user will select the one to be edit. Here is the code to do so..
# To Edit an Ingredients.
def edit_ingredient():
os.system("clear")
print('\n ====== Edit an Ingredient =====')
print('\n\n :: List of Ingredients.\n')
c.execute('select * from ingredients_list where i_l_id > 0 order by i_name')
for each in c.fetchall() :
print (' ',each[0],'....',each[1])
ing_edit = input('\n\n Enter an Ingredient ID you want to Change: ')
if ing_edit.isnumeric():
c.execute('select i_name from ingredients_list where i_l_id = {}'.format(ing_edit))
print(' You select to change the: ',c.fetchall())
new_ing = input('\n Enter the New Update for it: ')
c.execute("update ingredients_list set i_name = '{}' where i_l_id = {}".format(new_ing.capitalize(),int(ing_edit)))
db_conn.commit()
input('\n .. One Ingredient Updated .. Press any key .. ')
else:
print('\n You must Enter a Numeric Ingredient ID.')
input('\n .. Press any key .. ')

Last thing we will Insert some Ingredients in the “ingredients_list” Table so we can test the functions, for this purpose I will write this piece of code that we can run to Insert some Ingredients.
# To Insert sample ing_list
ing_list =["Onion","Spinach","Mushroom","Tomatoes","Lime","Turnip","Snake Beans",
"Jalapeno","Baking powder","sugar","Eggs","Vanilla extract","Salt","Flour","Butter",
"Oil","Whole milk","Orange juice","Baking soda","Ground cinnamon","Dark chocolate",
"Cocoa","Cherry","Cherry jam"]
for item in range (len(ing_list)):
ing_name = ing_list[item].capitalize()
c.execute ("INSERT INTO ingredients_list (i_name) VALUES(:i_name)",{"i_name":ing_name})
db_conn.commit()
Now, we can use the Delete, Edit and Add functions to test the “Ingredients Manager” from the Main Menu, here is some screen shots.
Show Ingredients ![]() |
Add Ingredients |
Delete Ingredients |
Edit Ingredients |
Note: The Screen-Shots above was before I add Order by clause to the SQL statement.
In Next post we will write the codes for the functions in the ” Recipe Menu”.
To Download my Python code (.py) files Click-Here
By: Ali Radwani

Follow me on Twitter..

































