init
This commit is contained in:
		
							
								
								
									
										8
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										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
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.idea/CNSA-266-Personal.iml
									
									
									
										generated
									
									
									
										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
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/inspectionProfiles/profiles_settings.xml
									
									
									
										generated
									
									
									
										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
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
										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
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
										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
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										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
									
								
							
		Reference in New Issue
	
	Block a user