在Python中实现联系人目录
我们的任务是实现一个智能手机目录,该目录从用户那里收集联系数据,直到用户提示程序。联系人数据是指联系人的姓名、电话号码、出生日期、联系人所属的类别(朋友、家庭、工作、其他)、电子邮件地址。用户可以在提到的数据标签中输入尽可能多的数据。如果某些标签仍然没有数据,请将其存储为无。姓名和号码是创建联系人所必需的。对目录执行以下操作:插入、删除、搜索、显示。
方法 :
我们使用了 2D 列表概念并在 Python3 中实现了相同的概念。这段代码一共使用了8个函数,分别是:
- initial_phonebook() :第一个运行的函数,它初始化电话簿。
- menu() :它显示用户可用的选项并返回输入的选项。
- add_contact() :它将新联系人添加到联系人目录。
- remove_existing() :它从联系人目录中删除现有联系人。
- delete_all() :它从联系人目录中删除所有联系人。
- display_all() :显示联系人目录中的所有联系人。
- search_existing() :它将搜索并显示联系人目录中的现有联系人。
- 谢谢() :
保持用户体验和用户界面,我们使代码简单、易读和交互。您可能会也可能不会完全按照下面描述的方式使用所有功能。请通过代码解决方案。
请尝试在您的Python IDLE 上运行此代码,因为如果您在此处运行,则可能会出现一些错误,因为需要用户输入。您也可以在 GFG 上打开 IDE 页面并在那里运行您的代码,而不是直接从代码片段运行。
python3
# 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_book = []
print(phone_book)
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
print(phone_book)
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. 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 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
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()
输出:我们将逐段查看该程序的输出。
最初,将显示以下内容:
…………………………………………………………..
Hello dear user, welcome to our smartphone directory system
You may now proceed to explore this directory
…………………………………………………………..
Please enter initial number of contacts:
在开始时,我们将输入 2 个联系人:
Please enter initial number of contacts: 2
[]
Enter contact 1 details in the following order (ONLY):
NOTE: * indicates mandatory fields
…………………………………………………………..
Enter name*: Geeks
Enter number*: 9999999999
Enter e-mail address: gfg@gfg.com
Enter date of birth(dd/mm/yy): 01/01/01
Enter category(Family/Friends/Work/Others): Work
Enter contact 2 details in the following order (ONLY):
NOTE: * indicates mandatory fields
…………………………………………………………..
Enter name*: Sample
Enter number*: 1234567890
Enter e-mail address:
Enter date of birth(dd/mm/yy):
Enter category(Family/Friends/Work/Others):
[[‘Geeks’, 9999999999, ‘gfg@gfg.com’, ’01/01/01′, ‘Work’], [‘Sample’, 1234567890, None, None, None]]
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
现在要添加一个新联系人,根据菜单我们将按 1 :
Please enter your choice: 1
Enter name: Emergency
Enter number: 108
Enter e-mail address:
Enter date of birth(dd/mm/yy):
Enter category(Family/Friends/Work/Others):
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
我们可以通过按 5 查看所有联系人:
Please enter your choice: 5
[‘Geeks’, 9999999999, ‘gfg@gfg.com’, ’01/01/01′, ‘Work’]
[‘Sample’, 1234567890, None, None, None]
[‘Emergency’, 108, ”, ”, ”]
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
要删除联系人,我们必须输入 2 :
Please enter your choice: 2
Please enter the name of the contact you wish to remove: Sample
[‘Sample’, 1234567890, None, None, None]
This query has now been removed
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
要搜索联系人,我们必须按 4 :
Please enter your choice: 4
Enter search criteria
1. Name
2. Number
3. Email-id
4. DOB
5. Category(Family/Friends/Work/Others)
Please enter: 2
Please enter the number of the contact you wish to search: 9999999999
[‘Geeks’, 9999999999, ‘gfg@gfg.com’, ’01/01/01′, ‘Work’]
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
我们可以通过按 3 删除所有联系人:
Please enter your choice: 3
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
要查看所有联系人,请按 5,因为我们刚刚删除了它们,所以不会显示任何内容:
Please enter your choice: 5
List is empty: []
********************************************************************
SMARTPHONE DIRECTORY
********************************************************************
You can now perform the following operations on this phonebook
1. Add a new contact
2. Remove an existing contact
3. Delete all contacts
4. Search for a contact
5. Display all contacts
6. Exit phonebook
Please enter your choice:
要退出程序,请输入 6 :
Please enter your choice: 6
********************************************************************
Thank you for using our Smartphone directory system.
Please visit again!
********************************************************************