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