init
This commit is contained in:
commit
e49d51eb06
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
10
.idea/CNSA-266-Personal.iml
Normal file
10
.idea/CNSA-266-Personal.iml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
4
.idea/misc.xml
Normal file
4
.idea/misc.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (CNSA-266-Personal)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/CNSA-266-Personal.iml" filepath="$PROJECT_DIR$/.idea/CNSA-266-Personal.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
18
Barista.py
Normal file
18
Barista.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
NUM_EMPLOYEES = 6
|
||||||
|
|
||||||
|
def main():
|
||||||
|
hours = [0.0] * NUM_EMPLOYEES
|
||||||
|
|
||||||
|
for index in range(NUM_EMPLOYEES):
|
||||||
|
print("Enter the hours worked by employee ", index + 1, ": ", sep="", end="")
|
||||||
|
hours[index] = float(input())
|
||||||
|
|
||||||
|
pay_rate = float(input("Enter the hourly pay rate: "))
|
||||||
|
|
||||||
|
for index in range(NUM_EMPLOYEES):
|
||||||
|
gross_pay = hours[index] * pay_rate
|
||||||
|
print("Gross pay for employee ", index + 1, ": $", format(gross_pay, ',.2f'), sep="")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
5
Intro.py
Normal file
5
Intro.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
name = input("What is your name? ")
|
||||||
|
quantity = int(input("How many items do you have? "))
|
||||||
|
cost = float(input("how many dollars does each cost? "))
|
||||||
|
discount = int(input("What is the discount percentage? "))
|
||||||
|
print("Hello " + name + ". You have " + str(quantity) + " items, and each costs $" + str(cost) + " and there is a " + str(discount) + "% discount")
|
88
Lists.py
Normal file
88
Lists.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# SLIDE 2
|
||||||
|
|
||||||
|
# Create a list of grades
|
||||||
|
grades = [10,20,30,40]
|
||||||
|
|
||||||
|
#print grades
|
||||||
|
print(grades)
|
||||||
|
|
||||||
|
# SLIDE 3
|
||||||
|
|
||||||
|
# Concatenate grades
|
||||||
|
grades = grades + [50,60,70]
|
||||||
|
|
||||||
|
# Print grades
|
||||||
|
print("After concatenation: " + str(grades))
|
||||||
|
|
||||||
|
#SLIDE 4
|
||||||
|
|
||||||
|
# Append to grades
|
||||||
|
grades.extend([50,60,70,70])
|
||||||
|
print("After extending the list: " + str(grades))
|
||||||
|
|
||||||
|
# Find the count, total, min, max average grade
|
||||||
|
print("Count of grades: " + str(len(grades)))
|
||||||
|
|
||||||
|
# SLIDE 5
|
||||||
|
|
||||||
|
# Print min & Max
|
||||||
|
print("Min of grades: " + str(min(grades)))
|
||||||
|
print("Max of grades: " + str(max(grades)))
|
||||||
|
|
||||||
|
# SLIDE 6
|
||||||
|
|
||||||
|
# Print total
|
||||||
|
total = 0
|
||||||
|
for item in grades:
|
||||||
|
total += item
|
||||||
|
|
||||||
|
print("Total of grades is: " + str(total))
|
||||||
|
|
||||||
|
# SLIDE 7
|
||||||
|
|
||||||
|
# Average of grades
|
||||||
|
|
||||||
|
avg_grade = total / len(grades)
|
||||||
|
print("Average grade: " + str(round(avg_grade, 2)))
|
||||||
|
|
||||||
|
# SLIDE 8
|
||||||
|
|
||||||
|
from statistics import *
|
||||||
|
# Simple average
|
||||||
|
print("Simple average: " + str(round(mean(grades), 2)))
|
||||||
|
# Simple total
|
||||||
|
print("Simple sum is: " + str(round(sum(grades), 2)))
|
||||||
|
|
||||||
|
# SLIDE 9
|
||||||
|
|
||||||
|
superbowl_teams = ["Patriots", "Patriots", "Steelers", "Steelers", "Ravens", "Chiefs", "Packers"]
|
||||||
|
|
||||||
|
print("Superbowl Champions:")
|
||||||
|
for teams in superbowl_teams:
|
||||||
|
print("\t" + teams)
|
||||||
|
|
||||||
|
# SLIDE 10
|
||||||
|
|
||||||
|
unique = []
|
||||||
|
dupes = []
|
||||||
|
|
||||||
|
for j in superbowl_teams:
|
||||||
|
if j not in unique:
|
||||||
|
unique.append(j)
|
||||||
|
else:
|
||||||
|
dupes.append(j)
|
||||||
|
|
||||||
|
# SLIDE 11
|
||||||
|
|
||||||
|
if len(dupes) != 0:
|
||||||
|
print("Teams that have won multiple championships: ")
|
||||||
|
|
||||||
|
for i in dupes:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
# Check unique teams
|
||||||
|
if len(unique) != 0:
|
||||||
|
print("These teams have all won a super bowl: ")
|
||||||
|
|
||||||
|
for k in unique:
|
||||||
|
print(k)
|
129
MathPractice.py
Normal file
129
MathPractice.py
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
totalCorrect = 0
|
||||||
|
totalIncorrect = 0
|
||||||
|
|
||||||
|
# will ask the user if they want to exit the program
|
||||||
|
def tryExit():
|
||||||
|
userIn = ""
|
||||||
|
while True:
|
||||||
|
userIn = input("Would you like to exit the program? (y/n) ")
|
||||||
|
if userIn == "y" or userIn == "Y":
|
||||||
|
print("\n\n\nThank you for using Math Practice!")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print("You got " + str(totalCorrect) + " correct, and " + str(totalIncorrect) + " incorrect.")
|
||||||
|
sys.exit(0)
|
||||||
|
elif userIn == "n" or userIn == "N":
|
||||||
|
break
|
||||||
|
print("Please enter y or n.")
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# loops forever until the user enters a valid input (float)
|
||||||
|
def getInput(message):
|
||||||
|
userInput = ""
|
||||||
|
while True:
|
||||||
|
userInput = input(message)
|
||||||
|
try:
|
||||||
|
userInput = float(userInput)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print("Please enter a valid number.")
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
if userInput == -99:
|
||||||
|
tryExit()
|
||||||
|
|
||||||
|
return userInput
|
||||||
|
|
||||||
|
# loops forever until the user enters a valid operator
|
||||||
|
def getOperator():
|
||||||
|
userInput = ""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
userInput = input("Please choose an operator ( + - / * ): ")
|
||||||
|
|
||||||
|
if userInput == "+":
|
||||||
|
break
|
||||||
|
elif userInput == "-":
|
||||||
|
break
|
||||||
|
elif userInput == "*":
|
||||||
|
break
|
||||||
|
elif userInput == "/":
|
||||||
|
break
|
||||||
|
elif userInput == "-99":
|
||||||
|
tryExit()
|
||||||
|
else:
|
||||||
|
raise Exception("Please enter a valid operator.")
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
return userInput
|
||||||
|
|
||||||
|
# runs a calculation based on two numbers, and the operator provided
|
||||||
|
def calculate(first, second, op):
|
||||||
|
if op == "+":
|
||||||
|
return first + second
|
||||||
|
if op == "-":
|
||||||
|
return first - second
|
||||||
|
if op == "*":
|
||||||
|
return first * second
|
||||||
|
if op == "/":
|
||||||
|
return first / second
|
||||||
|
|
||||||
|
# returns the int value of a float if possible
|
||||||
|
def reduce(num):
|
||||||
|
oNum = num
|
||||||
|
intNum = int(num)
|
||||||
|
if intNum == oNum:
|
||||||
|
return intNum
|
||||||
|
else:
|
||||||
|
return oNum
|
||||||
|
|
||||||
|
if not DEBUG:
|
||||||
|
print("\n"*100)
|
||||||
|
print("Welcome to Math Practice!")
|
||||||
|
time.sleep(2)
|
||||||
|
print("This program will ask you to enter one number, then an operation, and a second number")
|
||||||
|
time.sleep(2)
|
||||||
|
print("You will then input the answer that you believe to be correct")
|
||||||
|
time.sleep(2)
|
||||||
|
print("Your score will be calculated based on how many you got correct and how many you guessed incorrectly")
|
||||||
|
time.sleep(2)
|
||||||
|
print("You may enter -99 to exit at any time")
|
||||||
|
time.sleep(2)
|
||||||
|
print("Enjoy!")
|
||||||
|
time.sleep(2)
|
||||||
|
input("Press Enter to start!")
|
||||||
|
print("\n"*100)
|
||||||
|
|
||||||
|
# The Main Running Space
|
||||||
|
while True:
|
||||||
|
num1 = getInput("Please enter the first number: ")
|
||||||
|
op = getOperator()
|
||||||
|
num2 = getInput("Please enter the second number: ")
|
||||||
|
print("\n")
|
||||||
|
print("Your equation is: " + str(reduce(num1)) + " " + op + " " + str(reduce(num2)))
|
||||||
|
userAnswer = getInput("Please enter what you think the answer is: ")
|
||||||
|
answer = calculate(num1, num2, op)
|
||||||
|
|
||||||
|
if float(userAnswer) == answer:
|
||||||
|
print("Correct!")
|
||||||
|
totalCorrect += 1
|
||||||
|
time.sleep(1)
|
||||||
|
print("\n"*100)
|
||||||
|
print("You may enter -99 to exit at any time\n")
|
||||||
|
else:
|
||||||
|
print("Incorrect. Better luck next time!.")
|
||||||
|
totalIncorrect += 1
|
||||||
|
time.sleep(1)
|
||||||
|
print("\n"*100)
|
||||||
|
print("You may enter -99 to exit at any time\n")
|
||||||
|
|
||||||
|
|
||||||
|
|
42
Order.py
Normal file
42
Order.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
fName = input("Enter your first name: ")
|
||||||
|
lName = input("Enter your last name: ")
|
||||||
|
fullAddress = input("Enter your full address, seperated by semicolons (;): ")
|
||||||
|
while True:
|
||||||
|
SSN = input("Enter your SSN in numerical format (e.g. 312943821): ")
|
||||||
|
if len(SSN) == 9:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("invalid SSN!")
|
||||||
|
time.sleep(0.3)
|
||||||
|
while True:
|
||||||
|
payType = input("Enter your payment type (options are: MasterCard, Discover, Visa, Cash, or Check: ")
|
||||||
|
if payType.upper() == "MasterCard".upper() or payType.upper() == "VISA".upper() or payType.upper() == "CASH".upper() or payType.upper() == "CHECK".upper() or payType.upper() == "DISCOVER".upper():
|
||||||
|
break
|
||||||
|
print("Please enter a valid payment type.")
|
||||||
|
time.sleep(0.3)
|
||||||
|
|
||||||
|
uName = input("Enter your username: ")
|
||||||
|
uPassword = input("Enter your password: ")
|
||||||
|
uEmail = input("Enter your email address: ")
|
||||||
|
|
||||||
|
fullAddress = fullAddress.split(';')
|
||||||
|
print("\n" * 8)
|
||||||
|
print("Confirmation for " + fName + " " + lName + " at ", end="")
|
||||||
|
trace = 0
|
||||||
|
for i in fullAddress:
|
||||||
|
if trace == len(fullAddress)-1:
|
||||||
|
print(i.strip()+". ", end="\n")
|
||||||
|
else:
|
||||||
|
print(i.strip()+", ", end="")
|
||||||
|
trace += 1
|
||||||
|
print("The last 4 digits of your SSN is ***-**-" + SSN[5:] + ".")
|
||||||
|
print("Your payment will be made with " + payType + ".")
|
||||||
|
print("Your username is: " + uName)
|
||||||
|
hPass = ""
|
||||||
|
while len(hPass) < len(uPassword):
|
||||||
|
hPass = hPass + "*"
|
||||||
|
print("Your password (hidden) is: " + hPass)
|
||||||
|
print("An email has been sent to you at: " + uEmail + ".", end="\n"*3)
|
||||||
|
print("Thank you!")
|
280
PhoneDirectory.py
Normal file
280
PhoneDirectory.py
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
# importing the module
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
# this function will be the first to run as soon as the main function executes
|
||||||
|
def initial_phonebook():
|
||||||
|
rows, cols = int(input("Please enter initial number of contacts: ")), 5
|
||||||
|
|
||||||
|
# We are collecting the initial number of contacts the user wants to have in the
|
||||||
|
# phonebook already. User may also enter 0 if he doesn't wish to enter any.
|
||||||
|
phone_bookA = open("records.txt", 'a')
|
||||||
|
phone_bookR = open("records.txt", 'r')
|
||||||
|
print(phone_bookR.read())
|
||||||
|
for i in range(rows):
|
||||||
|
print("\nEnter contact %d details in the following order (ONLY):" % (i + 1))
|
||||||
|
print("NOTE: * indicates mandatory fields")
|
||||||
|
print("....................................................................")
|
||||||
|
temp = []
|
||||||
|
for j in range(cols):
|
||||||
|
|
||||||
|
# We have taken the conditions for values of j only for the personalized fields
|
||||||
|
# such as name, number, e-mail id, dob, category etc
|
||||||
|
if j == 0:
|
||||||
|
temp.append(str(input("Enter name*: ")))
|
||||||
|
|
||||||
|
# We need to check if the user has left the name empty as its mentioned that
|
||||||
|
# name & number are mandatory fields.
|
||||||
|
# So implement a condition to check as below.
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
sys.exit(
|
||||||
|
"Name is a mandatory field. Process exiting due to blank field...")
|
||||||
|
# This will exit the process if a blank field is encountered.
|
||||||
|
|
||||||
|
if j == 1:
|
||||||
|
temp.append(int(input("Enter number*: ")))
|
||||||
|
# We do not need to check if user has entered the number because int automatically
|
||||||
|
# takes care of it. Int value cannot accept a blank as that counts as a string.
|
||||||
|
# So process automatically exits without us using the sys package.
|
||||||
|
|
||||||
|
if j == 2:
|
||||||
|
temp.append(str(input("Enter e-mail address: ")))
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
temp[j] = None
|
||||||
|
|
||||||
|
if j == 3:
|
||||||
|
temp.append(str(input("Enter date of birth(dd/mm/yy): ")))
|
||||||
|
# Whatever format the user enters dob in, it won't make a difference to the compiler
|
||||||
|
# Only while searching the user will have to enter query exactly the same way as
|
||||||
|
# he entered during the input so as to ensure accurate searches
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
temp[j] = None
|
||||||
|
if j == 4:
|
||||||
|
temp.append(
|
||||||
|
str(input("Enter category(Family/Friends/Work/Others): ")))
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
if temp[j] == "" or temp[j] == ' ':
|
||||||
|
temp[j] = None
|
||||||
|
|
||||||
|
for record in temp:
|
||||||
|
phone_bookA.write(str(record) + ",")
|
||||||
|
phone_bookA.write("\n")
|
||||||
|
# By this step we are appending a list temp into a list phone_book
|
||||||
|
# That means phone_book is a 2-D array and temp is a 1-D array
|
||||||
|
|
||||||
|
print(phone_bookR.read())
|
||||||
|
return phone_bookR.read()
|
||||||
|
|
||||||
|
|
||||||
|
def menu():
|
||||||
|
# We created this simple menu function for
|
||||||
|
# code reusability & also for an interactive console
|
||||||
|
# Menu func will only execute when called
|
||||||
|
print("********************************************************************")
|
||||||
|
print("\t\t\tSMARTPHONE DIRECTORY", flush=False)
|
||||||
|
print("********************************************************************")
|
||||||
|
print("\tYou can now perform the following operations on this phonebook\n")
|
||||||
|
print("1. Add a new contact")
|
||||||
|
print("2. Remove an existing contact")
|
||||||
|
print("3. Delete all contacts")
|
||||||
|
print("4. Search for a contact")
|
||||||
|
print("5. Display all contacts")
|
||||||
|
print("6. Exit phonebook")
|
||||||
|
|
||||||
|
# Out of the provided 6 choices, user needs to enter any 1 choice among the 6
|
||||||
|
# We return the entered choice to the calling function wiz main in our case
|
||||||
|
choice = int(input("Please enter your choice: "))
|
||||||
|
|
||||||
|
return choice
|
||||||
|
|
||||||
|
|
||||||
|
def add_contact():
|
||||||
|
# Adding a contact is the easiest because all you need to do is:
|
||||||
|
# append another list of details into the already existing list
|
||||||
|
dip = []
|
||||||
|
for i in range(5):
|
||||||
|
if i == 0:
|
||||||
|
dip.append(str(input("Enter name: ")))
|
||||||
|
if i == 1:
|
||||||
|
dip.append(str(input("Enter number: ")))
|
||||||
|
if i == 2:
|
||||||
|
dip.append(str(input("Enter e-mail address: ")))
|
||||||
|
if i == 3:
|
||||||
|
dip.append(str(input("Enter date of birth(dd/mm/yy): ")))
|
||||||
|
if i == 4:
|
||||||
|
dip.append(
|
||||||
|
str(input("Enter category(Family/Friends/Work/Others): ")))
|
||||||
|
pb = open("records.txt", 'a')
|
||||||
|
for record in dip:
|
||||||
|
pb.write(record + ",")
|
||||||
|
pb.write("\n")
|
||||||
|
pb.close()
|
||||||
|
|
||||||
|
|
||||||
|
def remove_existing():
|
||||||
|
pbr = open("records.txt", 'r')
|
||||||
|
pbw = open("records.txt", 'w')
|
||||||
|
|
||||||
|
# This function is to remove a contact's details from existing phonebook
|
||||||
|
query = str(
|
||||||
|
input("Please enter the name of the contact you wish to remove: "))
|
||||||
|
# We'll collect name of the contact and search if it exists in our phonebook
|
||||||
|
pb = []
|
||||||
|
temp = 0
|
||||||
|
# temp is a checking variable here. We assigned a value 0 to temp.
|
||||||
|
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pbr[i][0]:
|
||||||
|
temp += 1
|
||||||
|
# Temp will be incremented & it won't be 0 anymore in this function's scope
|
||||||
|
|
||||||
|
print(pb.pop(i))
|
||||||
|
# The pop function removes entry at index i
|
||||||
|
|
||||||
|
print("This query has now been removed")
|
||||||
|
# printing a confirmation message after removal.
|
||||||
|
# This ensures that removal was successful.
|
||||||
|
# After removal we will return the modified phonebook to the calling function
|
||||||
|
# which is main in our program
|
||||||
|
|
||||||
|
return pb
|
||||||
|
if temp == 0:
|
||||||
|
# Now if at all any case matches temp should've incremented but if otherwise,
|
||||||
|
# temp will remain 0 and that means the query does not exist in this phonebook
|
||||||
|
print("Sorry, you have entered an invalid query.\
|
||||||
|
Please recheck and try again later.")
|
||||||
|
|
||||||
|
return pb
|
||||||
|
|
||||||
|
|
||||||
|
def delete_all():
|
||||||
|
# This function will simply delete all the entries in the phonebook pb
|
||||||
|
# It will return an empty phonebook after clearing
|
||||||
|
|
||||||
|
pb = open("records.txt", 'w')
|
||||||
|
pb.write("")
|
||||||
|
|
||||||
|
|
||||||
|
def search_existing():
|
||||||
|
# This function searches for an existing contact and displays the result
|
||||||
|
choice = int(input("Enter search criteria\n\n\
|
||||||
|
1. Name\n2. Number\n3. Email-id\n4. DOB\n5. Category(Family/Friends/Work/Others)\
|
||||||
|
\nPlease enter: "))
|
||||||
|
# We're doing so just to ensure that the user experiences a customized search result
|
||||||
|
|
||||||
|
temp = []
|
||||||
|
check = -1
|
||||||
|
|
||||||
|
if choice == 1:
|
||||||
|
# This will execute for searches based on contact name
|
||||||
|
query = str(
|
||||||
|
input("Please enter the name of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][0]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 2:
|
||||||
|
# This will execute for searches based on contact number
|
||||||
|
query = int(
|
||||||
|
input("Please enter the number of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][1]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 3:
|
||||||
|
# This will execute for searches based on contact's e-mail address
|
||||||
|
query = str(input("Please enter the e-mail ID\
|
||||||
|
of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][2]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 4:
|
||||||
|
# This will execute for searches based on contact''s date of birth
|
||||||
|
query = str(input("Please enter the DOB (in dd/mm/yyyy format ONLY)\
|
||||||
|
of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][3]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 5:
|
||||||
|
# This will execute for searches based on contact category
|
||||||
|
query = str(
|
||||||
|
input("Please enter the category of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][4]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
# All contacts under query category will be shown using this feature
|
||||||
|
|
||||||
|
else:
|
||||||
|
# If the user enters any other choice then the search will be unsuccessful
|
||||||
|
print("Invalid search criteria")
|
||||||
|
return -1
|
||||||
|
# returning -1 indicates that the search was unsuccessful
|
||||||
|
|
||||||
|
# all the searches are stored in temp and all the results will be displayed with
|
||||||
|
# the help of display function
|
||||||
|
|
||||||
|
if check == -1:
|
||||||
|
return -1
|
||||||
|
# returning -1 indicates that the query did not exist in the directory
|
||||||
|
else:
|
||||||
|
display_all(temp)
|
||||||
|
return check
|
||||||
|
# we're just returning a index value wiz not -1 to calling function just to notify
|
||||||
|
# that the search worked successfully
|
||||||
|
|
||||||
|
|
||||||
|
# this function displays all content of phonebook pb
|
||||||
|
def display_all(pb):
|
||||||
|
if not pb:
|
||||||
|
# if display function is called after deleting all contacts then the len will be 0
|
||||||
|
# And then without this condition it will throw an error
|
||||||
|
print("List is empty: []")
|
||||||
|
else:
|
||||||
|
for i in range(len(pb)):
|
||||||
|
print(pb[i])
|
||||||
|
|
||||||
|
|
||||||
|
def thanks():
|
||||||
|
# A simple gesture of courtesy towards the user to enhance user experience
|
||||||
|
print("********************************************************************")
|
||||||
|
print("Thank you for using our Smartphone directory system.")
|
||||||
|
print("Please visit again!")
|
||||||
|
print("********************************************************************")
|
||||||
|
sys.exit("Goodbye, have a nice day ahead!")
|
||||||
|
|
||||||
|
|
||||||
|
# Main function code
|
||||||
|
print("....................................................................")
|
||||||
|
print("Hello dear user, welcome to our smartphone directory system")
|
||||||
|
print("You may now proceed to explore this directory")
|
||||||
|
print("....................................................................")
|
||||||
|
# This is solely meant for decoration purpose only.
|
||||||
|
# You're free to modify your interface as per your will to make it look interactive
|
||||||
|
|
||||||
|
ch = 1
|
||||||
|
initial_phonebook()
|
||||||
|
while ch in (1, 2, 3, 4, 5):
|
||||||
|
ch = menu()
|
||||||
|
if ch == 1:
|
||||||
|
add_contact()
|
||||||
|
elif ch == 2:
|
||||||
|
remove_existing()
|
||||||
|
elif ch == 3:
|
||||||
|
delete_all()
|
||||||
|
elif ch == 4:
|
||||||
|
d = search_existing()
|
||||||
|
if d == -1:
|
||||||
|
print("The contact does not exist. Please try again")
|
||||||
|
elif ch == 5:
|
||||||
|
display_all()
|
||||||
|
else:
|
||||||
|
thanks()
|
99
Skateboards.py
Normal file
99
Skateboards.py
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
# Item Prices
|
||||||
|
YELLOW_COST = 15.97
|
||||||
|
BLUE_COST = 24.99
|
||||||
|
|
||||||
|
# Summary Values
|
||||||
|
totalYellow = 0
|
||||||
|
totalBlue = 0
|
||||||
|
TotalTransactions = 0
|
||||||
|
TotalSales = 0.0
|
||||||
|
|
||||||
|
# Tax Rates
|
||||||
|
IN_TAX = 0.04
|
||||||
|
OUT_TAX = 0.06
|
||||||
|
|
||||||
|
repeat = True
|
||||||
|
|
||||||
|
print("\n"*100)
|
||||||
|
print("Welcome to TSCT Skating Association!\n")
|
||||||
|
|
||||||
|
# Keep looping until user decides to exit
|
||||||
|
while repeat:
|
||||||
|
state = "z"
|
||||||
|
sale = 0.0
|
||||||
|
|
||||||
|
# Get number of blue skateboards
|
||||||
|
blue = input("How many blue skateboards ($24.99) would you like to purchase: ")
|
||||||
|
if blue.isnumeric():
|
||||||
|
blue = int(blue)
|
||||||
|
else:
|
||||||
|
blue = 0
|
||||||
|
|
||||||
|
# Get number of yellow skateboards
|
||||||
|
yellow = input("How many yellow skateboards ($15.97) would you like to purchase: ")
|
||||||
|
if yellow.isnumeric():
|
||||||
|
yellow = int(yellow)
|
||||||
|
else:
|
||||||
|
yellow = 0
|
||||||
|
|
||||||
|
# Get whether the user is from out of state or not for use with tax rates
|
||||||
|
while True:
|
||||||
|
state = input("Are you from out of state? (y/n): ")
|
||||||
|
if state == "y" or state == "Y" or state == "n" or state == "N":
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Please enter either 'y' or 'n'.")
|
||||||
|
|
||||||
|
# set tax rates
|
||||||
|
if state == "y" or state == "Y":
|
||||||
|
tax = OUT_TAX
|
||||||
|
else:
|
||||||
|
tax = IN_TAX
|
||||||
|
|
||||||
|
# Calculate this sale
|
||||||
|
sale = round((blue * BLUE_COST + yellow * YELLOW_COST) * (1+tax),2)
|
||||||
|
|
||||||
|
# Update running totals
|
||||||
|
totalYellow += yellow
|
||||||
|
totalBlue += blue
|
||||||
|
TotalTransactions += 1
|
||||||
|
TotalSales += sale
|
||||||
|
|
||||||
|
# Print out the sale
|
||||||
|
print("You sold " + str(format(blue, ',')) + " blue skateboards, and " + str(format(yellow, ',')) + " yellow skateboards.")
|
||||||
|
print("This will cost $" + str(format(sale, ',.2f')), end="\n\n")
|
||||||
|
|
||||||
|
# ask the user if they would like to make another sale
|
||||||
|
while True:
|
||||||
|
again = input("Would you like to make another sale? (y/n): ")
|
||||||
|
if again == "y" or again == "Y":
|
||||||
|
print("Initiating a new sale.",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print(".",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print(".",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print("\n"*100)
|
||||||
|
break
|
||||||
|
elif again == "n" or again == "N":
|
||||||
|
print("Exiting.",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print(".",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print(".",end="")
|
||||||
|
time.sleep(0.5)
|
||||||
|
print("\n"*100)
|
||||||
|
repeat = False
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Please enter either 'y' or 'n'.")
|
||||||
|
|
||||||
|
|
||||||
|
# Print out the summary
|
||||||
|
print("You sold " + str(format(totalBlue,',')) + " blue skateboards, and " + str(format(totalYellow,',')) + " yellow skateboards.")
|
||||||
|
print("You made a total of " + str(format(TotalTransactions,',')) + " individual transactions.")
|
||||||
|
print("You made $" + str(format(round(TotalSales,2),',.2f')), end=".\n\n")
|
||||||
|
print("Thank you for using TSCT Skating Association!")
|
37
fivestar.py
Normal file
37
fivestar.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
STD_TAX = 0.06
|
||||||
|
OTH_TAX = 0.05
|
||||||
|
while True:
|
||||||
|
con = "Z"
|
||||||
|
validstate = False
|
||||||
|
fullName = str(input("Enter your full name: "))
|
||||||
|
quan = int(input("Enter the number of items: "))
|
||||||
|
cost = float(input("Enter the cost per item: "))
|
||||||
|
discount = float(input("Enter the discount percentage (e.g. 10 for 10%): "))
|
||||||
|
state = str(input("Enter your state (e.g. PA): "))
|
||||||
|
|
||||||
|
if state == "PA":
|
||||||
|
tax = STD_TAX
|
||||||
|
validstate = True
|
||||||
|
elif len(state) != 2:
|
||||||
|
print("invalid state!")
|
||||||
|
validstate = False
|
||||||
|
else:
|
||||||
|
tax = OTH_TAX
|
||||||
|
validstate = True
|
||||||
|
|
||||||
|
# print("Welcome " + fullName + "!")
|
||||||
|
# print("You are purchasing " + str(quan) + " items at $" + str(cost) + " per item.")
|
||||||
|
# print("You will have " + str(int(discount)) + " percent discount.")
|
||||||
|
# print("Your total is $" + str(round(cost*quan - (((discount/100) * (cost*quan))))*(tax + 1)),2)
|
||||||
|
if validstate:
|
||||||
|
print("Thank you: " + fullName)
|
||||||
|
print("Your Order:")
|
||||||
|
print("\t Qualtity: " + str(quan))
|
||||||
|
print("\t Cost: $" + str(round((cost*quan-(cost*quan*(discount/100)))*(1+tax),2)))
|
||||||
|
|
||||||
|
while (con != "Y" and con != "y") and (con != "N" and con != "n"):
|
||||||
|
con = input("Do you want to start over? (Y/N): ")
|
||||||
|
|
||||||
|
if con == "N" or con == "n":
|
||||||
|
break
|
||||||
|
|
306
phonev2.py
Normal file
306
phonev2.py
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
# importing the module
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
# this function will be the first to run as soon as the main function executes
|
||||||
|
def writeFile(pb):
|
||||||
|
|
||||||
|
b = open("records.txt", 'w')
|
||||||
|
|
||||||
|
for record in pb:
|
||||||
|
for item in record:
|
||||||
|
if item != record[len(record) - 1]:
|
||||||
|
b.write(str(item) + ",")
|
||||||
|
else:
|
||||||
|
b.write(str(item) + "\n")
|
||||||
|
|
||||||
|
b.close()
|
||||||
|
|
||||||
|
def readFile():
|
||||||
|
|
||||||
|
pb = []
|
||||||
|
f = open("records.txt", 'r')
|
||||||
|
while True:
|
||||||
|
d = f.readline().strip().split(',')
|
||||||
|
if len(d) == 1:
|
||||||
|
break
|
||||||
|
|
||||||
|
pb.append(d)
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
return pb
|
||||||
|
|
||||||
|
def initial_phonebook():
|
||||||
|
rows, cols = int(input("Please enter initial number of contacts: ")), 5
|
||||||
|
|
||||||
|
|
||||||
|
# We are collecting the initial number of contacts the user wants to have in the
|
||||||
|
# phonebook already. User may also enter 0 if he doesn't wish to enter any.
|
||||||
|
phone_book = readFile()
|
||||||
|
if rows >= 1:
|
||||||
|
for i in range(rows):
|
||||||
|
print("\nEnter contact %d details in the following order (ONLY):" % (i + 1))
|
||||||
|
print("NOTE: * indicates mandatory fields")
|
||||||
|
print("....................................................................")
|
||||||
|
temp = []
|
||||||
|
for j in range(cols):
|
||||||
|
|
||||||
|
# We have taken the conditions for values of j only for the personalized fields
|
||||||
|
# such as name, number, e-mail id, dob, category etc
|
||||||
|
if j == 0:
|
||||||
|
temp.append(str(input("Enter name*: ")))
|
||||||
|
|
||||||
|
# We need to check if the user has left the name empty as its mentioned that
|
||||||
|
# name & number are mandatory fields.
|
||||||
|
# So implement a condition to check as below.
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
sys.exit(
|
||||||
|
"Name is a mandatory field. Process exiting due to blank field...")
|
||||||
|
# This will exit the process if a blank field is encountered.
|
||||||
|
|
||||||
|
if j == 1:
|
||||||
|
temp.append(int(input("Enter number*: ")))
|
||||||
|
# We do not need to check if user has entered the number because int automatically
|
||||||
|
# takes care of it. Int value cannot accept a blank as that counts as a string.
|
||||||
|
# So process automatically exits without us using the sys package.
|
||||||
|
|
||||||
|
if j == 2:
|
||||||
|
temp.append(str(input("Enter e-mail address: ")))
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
temp[j] = None
|
||||||
|
|
||||||
|
if j == 3:
|
||||||
|
temp.append(str(input("Enter date of birth(dd/mm/yy): ")))
|
||||||
|
# Whatever format the user enters dob in, it won't make a difference to the compiler
|
||||||
|
# Only while searching the user will have to enter query exactly the same way as
|
||||||
|
# he entered during the input so as to ensure accurate searches
|
||||||
|
if temp[j] == '' or temp[j] == ' ':
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
temp[j] = None
|
||||||
|
if j == 4:
|
||||||
|
temp.append(
|
||||||
|
str(input("Enter category(Family/Friends/Work/Others): ")))
|
||||||
|
# Even if this field is left as blank, None will take the blank's place
|
||||||
|
if temp[j] == "" or temp[j] == ' ':
|
||||||
|
temp[j] = None
|
||||||
|
|
||||||
|
phone_book.append(temp)
|
||||||
|
# By this step we are appending a list temp into a list phone_book
|
||||||
|
# That means phone_book is a 2-D array and temp is a 1-D array
|
||||||
|
|
||||||
|
for record in phone_book:
|
||||||
|
for item in record:
|
||||||
|
print(f"{item:10}", end="\t")
|
||||||
|
print("")
|
||||||
|
return phone_book
|
||||||
|
|
||||||
|
|
||||||
|
def menu():
|
||||||
|
# We created this simple menu function for
|
||||||
|
# code reusability & also for an interactive console
|
||||||
|
# Menu func will only execute when called
|
||||||
|
print("********************************************************************")
|
||||||
|
print("\t\t\tSMARTPHONE DIRECTORY", flush=False)
|
||||||
|
print("********************************************************************")
|
||||||
|
print("\tYou can now perform the following operations on this phonebook\n")
|
||||||
|
print("1. Add a new contact")
|
||||||
|
print("2. Remove an existing contact")
|
||||||
|
print("3. Delete all contacts")
|
||||||
|
print("4. Search for a contact")
|
||||||
|
print("5. Display all contacts")
|
||||||
|
print("6. Save & Exit phonebook")
|
||||||
|
|
||||||
|
# Out of the provided 6 choices, user needs to enter any 1 choice among the 6
|
||||||
|
# We return the entered choice to the calling function wiz main in our case
|
||||||
|
choice = int(input("Please enter your choice: "))
|
||||||
|
|
||||||
|
return choice
|
||||||
|
|
||||||
|
|
||||||
|
def add_contact(pb):
|
||||||
|
# Adding a contact is the easiest because all you need to do is:
|
||||||
|
# append another list of details into the already existing list
|
||||||
|
dip = []
|
||||||
|
for i in range(len(pb[0])):
|
||||||
|
if i == 0:
|
||||||
|
dip.append(str(input("Enter name: ")))
|
||||||
|
if i == 1:
|
||||||
|
dip.append(int(input("Enter number: ")))
|
||||||
|
if i == 2:
|
||||||
|
dip.append(str(input("Enter e-mail address: ")))
|
||||||
|
if i == 3:
|
||||||
|
dip.append(str(input("Enter date of birth(dd/mm/yy): ")))
|
||||||
|
if i == 4:
|
||||||
|
dip.append(
|
||||||
|
str(input("Enter category(Family/Friends/Work/Others): ")))
|
||||||
|
pb.append(dip)
|
||||||
|
# And once you modify the list, you return it to the calling function wiz main, here.
|
||||||
|
return pb
|
||||||
|
|
||||||
|
|
||||||
|
def remove_existing(pb):
|
||||||
|
# This function is to remove a contact's details from existing phonebook
|
||||||
|
query = str(
|
||||||
|
input("Please enter the name of the contact you wish to remove: "))
|
||||||
|
# We'll collect name of the contact and search if it exists in our phonebook
|
||||||
|
|
||||||
|
temp = 0
|
||||||
|
# temp is a checking variable here. We assigned a value 0 to temp.
|
||||||
|
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][0]:
|
||||||
|
temp += 1
|
||||||
|
# Temp will be incremented & it won't be 0 anymore in this function's scope
|
||||||
|
|
||||||
|
print(pb.pop(i))
|
||||||
|
# The pop function removes entry at index i
|
||||||
|
|
||||||
|
print("This query has now been removed")
|
||||||
|
# printing a confirmation message after removal.
|
||||||
|
# This ensures that removal was successful.
|
||||||
|
# After removal we will return the modified phonebook to the calling function
|
||||||
|
# which is main in our program
|
||||||
|
|
||||||
|
return pb
|
||||||
|
if temp == 0:
|
||||||
|
# Now if at all any case matches temp should've incremented but if otherwise,
|
||||||
|
# temp will remain 0 and that means the query does not exist in this phonebook
|
||||||
|
print("Sorry, you have entered an invalid query.\
|
||||||
|
Please recheck and try again later.")
|
||||||
|
|
||||||
|
return pb
|
||||||
|
|
||||||
|
|
||||||
|
def delete_all(pb):
|
||||||
|
# This function will simply delete all the entries in the phonebook pb
|
||||||
|
# It will return an empty phonebook after clearing
|
||||||
|
return pb.clear()
|
||||||
|
|
||||||
|
|
||||||
|
def search_existing(pb):
|
||||||
|
# This function searches for an existing contact and displays the result
|
||||||
|
choice = int(input("Enter search criteria\n\n\
|
||||||
|
1. Name\n2. Number\n3. Email-id\n4. DOB\n5. Category(Family/Friends/Work/Others)\
|
||||||
|
\nPlease enter: "))
|
||||||
|
# We're doing so just to ensure that the user experiences a customized search result
|
||||||
|
|
||||||
|
temp = []
|
||||||
|
check = -1
|
||||||
|
|
||||||
|
if choice == 1:
|
||||||
|
# This will execute for searches based on contact name
|
||||||
|
query = str(
|
||||||
|
input("Please enter the name of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][0]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 2:
|
||||||
|
# This will execute for searches based on contact number
|
||||||
|
query = int(
|
||||||
|
input("Please enter the number of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][1]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 3:
|
||||||
|
# This will execute for searches based on contact's e-mail address
|
||||||
|
query = str(input("Please enter the e-mail ID\
|
||||||
|
of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][2]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 4:
|
||||||
|
# This will execute for searches based on contact''s date of birth
|
||||||
|
query = str(input("Please enter the DOB (in dd/mm/yyyy format ONLY)\
|
||||||
|
of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][3]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
|
||||||
|
elif choice == 5:
|
||||||
|
# This will execute for searches based on contact category
|
||||||
|
query = str(
|
||||||
|
input("Please enter the category of the contact you wish to search: "))
|
||||||
|
for i in range(len(pb)):
|
||||||
|
if query == pb[i][4]:
|
||||||
|
check = i
|
||||||
|
temp.append(pb[i])
|
||||||
|
# All contacts under query category will be shown using this feature
|
||||||
|
|
||||||
|
else:
|
||||||
|
# If the user enters any other choice then the search will be unsuccessful
|
||||||
|
print("Invalid search criteria")
|
||||||
|
return -1
|
||||||
|
# returning -1 indicates that the search was unsuccessful
|
||||||
|
|
||||||
|
# all the searches are stored in temp and all the results will be displayed with
|
||||||
|
# the help of display function
|
||||||
|
|
||||||
|
if check == -1:
|
||||||
|
return -1
|
||||||
|
# returning -1 indicates that the query did not exist in the directory
|
||||||
|
else:
|
||||||
|
display_all(temp)
|
||||||
|
return check
|
||||||
|
# we're just returning a index value wiz not -1 to calling function just to notify
|
||||||
|
# that the search worked successfully
|
||||||
|
|
||||||
|
|
||||||
|
# this function displays all content of phonebook pb
|
||||||
|
def display_all(pb):
|
||||||
|
if not pb:
|
||||||
|
# if display function is called after deleting all contacts then the len will be 0
|
||||||
|
# And then without this condition it will throw an error
|
||||||
|
print("List is empty: []")
|
||||||
|
else:
|
||||||
|
for record in pb:
|
||||||
|
for item in record:
|
||||||
|
print(f"{item:10}", end="\t")
|
||||||
|
print("")
|
||||||
|
|
||||||
|
|
||||||
|
def thanks(pb):
|
||||||
|
|
||||||
|
writeFile(pb)
|
||||||
|
|
||||||
|
# A simple gesture of courtesy towards the user to enhance user experience
|
||||||
|
print("********************************************************************")
|
||||||
|
print("Thank you for using our Smartphone directory system.")
|
||||||
|
print("Please visit again!")
|
||||||
|
print("********************************************************************")
|
||||||
|
sys.exit("Goodbye, have a nice day ahead!")
|
||||||
|
|
||||||
|
|
||||||
|
# Main function code
|
||||||
|
print("....................................................................")
|
||||||
|
print("Hello dear user, welcome to our smartphone directory system")
|
||||||
|
print("You may now proceed to explore this directory")
|
||||||
|
print("....................................................................")
|
||||||
|
# This is solely meant for decoration purpose only.
|
||||||
|
# You're free to modify your interface as per your will to make it look interactive
|
||||||
|
|
||||||
|
ch = 1
|
||||||
|
pb = initial_phonebook()
|
||||||
|
while ch in (1, 2, 3, 4, 5):
|
||||||
|
ch = menu()
|
||||||
|
if ch == 1:
|
||||||
|
pb = add_contact(pb)
|
||||||
|
elif ch == 2:
|
||||||
|
pb = remove_existing(pb)
|
||||||
|
elif ch == 3:
|
||||||
|
pb = delete_all(pb)
|
||||||
|
elif ch == 4:
|
||||||
|
d = search_existing(pb)
|
||||||
|
if d == -1:
|
||||||
|
print("The contact does not exist. Please try again")
|
||||||
|
elif ch == 5:
|
||||||
|
display_all(pb)
|
||||||
|
else:
|
||||||
|
thanks(pb)
|
3
records.txt
Normal file
3
records.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
cyrus,7176218917,egg@gmail.com,4/4/412,fam
|
||||||
|
smoeone,7175898745,someone@gmail.com,7/12/2024,family
|
||||||
|
Tom,7175898653,tjhart@stevenscollege.edu,12/5/2003,friends
|
0
scratch.py
Normal file
0
scratch.py
Normal file
Loading…
Reference in New Issue
Block a user