目录
一、基础:地址簿程序代码附带注释
二、基础:地址簿程序详细分析
三、拓展:地址簿程序拓展,如何实现在地址簿程序中持久化数据?
四、拓展:地址簿程序拓展代码详细分析
一、基础:地址簿程序代码附带注释
下面是一个简易的命令行地址簿程序的代码,编写于Python中,它提供了添加、删除、查找和编辑联系人的功能。请注意,这只是一个基本的实现,实际应用中可能需要更复杂的错误处理和数据持久化。
python
# 初始的地址簿存储结构,使用字典来存储联系人信息
address_book = {}def add_contact():name = input("输入联系人名字: ")email = input("输入联系人邮箱: ")phone = input("输入联系人电话: ")address_book[name] = {'Email': email,'Phone': phone}print(f"{name} 已添加到地址簿。")def delete_contact():name = input("输入要删除的联系人名字: ")if name in address_book:del address_book[name]print(f"{name} 已从地址簿中删除。")else:print(f"联系人 {name} 不存在在地址簿中。")def find_contact():name = input("输入你想查找的联系人名字: ")if name in address_book:email = address_book[name]['Email']phone = address_book[name]['Phone']print(f"联系人 {name} 信息:邮箱: {email}, 电话: {phone}")else:print(f"联系人 {name} 不存在在地址簿中。")def edit_contact():name = input("输入你想编辑的联系人名字: ")if name in address_book:email = input(f"输入新的邮箱地址 (之前为 {address_book[name]['Email']}): ")phone = input(f"输入新的电话号码 (之前为 {address_book[name]['Phone']}): ")address_book[name] = {'Email': email,'Phone': phone}print(f"联系人 {name} 已更新。")else:print(f"联系人 {name} 不存在在地址簿中。")def main():while True:print("\n地址簿程序")print("1. 添加联系人")print("2. 删除联系人")print("3. 查找联系人")print("4. 编辑联系人")print("5. 退出程序")choice = input("请输入操作编号: ")if choice == '1':add_contact()elif choice == '2':delete_contact()elif choice == '3':find_contact()elif choice == '4':edit_contact()elif choice == '5':print("退出地址簿程序。")breakelse:print("无效的输入, 请重新输入编号。")if __name__ == '__main__':main()
这个程序运行后,将允许用户在命令行界面下选择操作,以管理其简易的地址簿。当用户输入对应功能的编号时,会运行相关的函数。
注意: 这个程序在每次运行结束后不会保存已经输入的数据。在实际应用中,可以把数据保存到一个文件或数据库中,实现数据持久化。这里的数据是暂存在内存中的,并且用字典表示,只有一个执行会话期间可以使用。如果要让地址簿持久存储,则需要编写额外的代码将其保存到磁盘上的文件,或者一个数据库中。
二、基础:地址簿程序详细分析
上面的Python代码是一个简易命令行地址簿程序的实现。它主要由五个函数构成,分别对应添加、删除、查找和编辑联系人的功能,以及一个主函数用于驱动整个程序的用户界面。下面我会逐一解析这些函数以及程序的结构和运行逻辑。
-
address_book 字典
该字典用于存储所有联系人的信息,其中每个联系人的名字作为键,与之关联的值是另一个字典,用于存储该联系人的Email和Phone信息。
-
add_contact 函数
此函数负责添加新的联系人到地址簿中。函数首先提示用户输入联系人的
name
、email
和phone
。然后,将这些信息存储在address_book
字典中,name
作为键,相关的Email和Phone作为嵌套的字典存放。完成后会输出添加成功的信息。 -
delete_contact 函数
此函数用于删除地址簿中的一个联系人。用户输入一个
name
,程序检查该名称是否存在于address_book
字典中。如果存在,使用del
操作删除对应的键值对,并输出删除成功的信息。如果名称不存在于字典中,则输出联系人不存在的信息。 -
find_contact 函数
当需要查找一个联系人的信息时,此函数被调用。用户输入一个
name
作为搜索项,程序检查address_book
字典中是否存在该项。如果存在,输出该联系人的Email和Phone信息。如果不存在,告诉用户该联系人未找到。 -
edit_contact 函数
此函数允许用户编辑现存联系人的Email和Phone信息。用户先输入想要编辑的联系人的
name
,然后如果该用户存在于address_book
中,程序会显示当前的Email和Phone信息,并提示用户输入新信息。更新后,输出联系人信息已更新的提示。 -
main 函数
这是程序的入口点,一个通过无限循环持续提供用户菜单选择的函数。在这个循环中,程序显示了一个包含操作选项的菜单,并提示用户输入操作编号。对于用户的输入,通过一系列的
if..elif..else
语句分发到不同的功能函数中。- 如果用户输入
1
,则调用add_contact()
函数添加联系人。 - 如果用户输入
2
,则调用delete_contact()
函数删除联系人。 - 如果用户输入
3
,则调用find_contact()
函数查找联系人。 - 如果用户输入
4
,则调用edit_contact()
函数编辑联系人。 - 如果用户输入
5
,则输出退出信息,并通过break
语句跳出循环,结束程序。 - 对于其他输入,提示用户无效输入,并要求重新输入。
- 如果用户输入
-
if name == 'main'块
此代码块确保当该脚本被直接运行时,会调用
main()
函数。如果脚本是被导入到其他Python文件中,那么块内的代码不会被执行。
以上就是该简易命令行地址簿程序的完整解析。用户可以利用这个程序来管理他们的联系人信息,但需要注意,程序仅存在于内存中,一旦程序关闭,所有输入的数据都将丢失。如需持久化数据,则需要实现相关的文件读写操作。
三、拓展:地址簿程序拓展,如何实现在地址簿程序中持久化数据?
为了实现数据的持久化,通常需要将数据存储在文件或数据库中。在这个简单的地址簿程序的情况下,我们可以使用Python中的文件操作功能来存储和读取数据。我将示范如何通过json格式保存至文件,因为json文件易于读写,并且可以直接与Python的字典结构相互转换。
下面是如何实现地址簿数据持久化的步骤:
-
使用 JSON 文件存储数据
导入json模块,并设置一个文件名变量用来保存地址簿数据。
-
保存数据到 JSON 文件
在添加、编辑和删除联系人后,更新存储在文件中的数据。
-
从 JSON 文件加载数据
程序启动时,尝试加载存储在文件中的数据到
address_book
字典中。
下面是修改后的代码,包括数据持久化的实现:
以下是一个包含了数据持久化的完整地址簿程序的代码。这个地址簿程序利用JSON文件存储和加载数据,允许在程序重新运行时保持数据。
python
import json# JSON文件名用于存储地址簿
address_book_filename = 'address_book.json'# 尝试从JSON文件加载地址簿,如果不存在则创建一个空字典
try:with open(address_book_filename, 'r') as file:address_book = json.load(file)
except FileNotFoundError:address_book = {}# 函数用来保存地址簿到JSON文件
def save_address_book():with open(address_book_filename, 'w') as file:json.dump(address_book, file, indent=4)# 添加联系人信息
def add_contact():name = input("输入联系人名字: ")email = input("输入联系人邮箱: ")phone = input("输入联系人电话: ")address_book[name] = {'Email': email,'Phone': phone}save_address_book()print(f"{name} 已添加到地址簿。")# 删除联系人信息
def delete_contact():name = input("输入要删除的联系人名字: ")if name in address_book:del address_book[name]save_address_book()print(f"{name} 已从地址簿中删除。")else:print(f"联系人 {name} 不存在在地址簿中。")# 查找联系人信息
def find_contact():name = input("输入你想查找的联系人名字: ")if name in address_book:email = address_book[name]['Email']phone = address_book[name]['Phone']print(f"联系人 {name} - 邮箱: {email}, 电话: {phone}")else:print(f"联系人 {name} 不存在在地址簿中。")# 编辑联系人信息
def edit_contact():name = input("输入你想编辑的联系人名字: ")if name in address_book:email = input(f"输入新的邮箱地址 (之前为 {address_book[name]['Email']}): ")phone = input(f"输入新的电话号码 (之前为 {address_book[name]['Phone']}): ")address_book[name] = {'Email': email,'Phone': phone}save_address_book()print(f"联系人 {name} 已更新。")else:print(f"联系人 {name} 不存在在地址簿中。")# 主函数,展示用户菜单并响应用户输入
def main():while True:print("\n地址簿程序")print("1. 添加联系人")print("2. 删除联系人")print("3. 查找联系人")print("4. 编辑联系人")print("5. 退出程序")choice = input("请输入操作编号: ")if choice == '1':add_contact()elif choice == '2':delete_contact()elif choice == '3':find_contact()elif choice == '4':edit_contact()elif choice == '5':print("退出地址簿程序。")breakelse:print("无效的输入, 请重新输入编号。")if __name__ == '__main__':main()
上面的程序使用了Python的内置json模块来进行数据的序列化和反序列化。address_book
字典存储了用户的联系人信息,并在每次添加、删除或修改联系人后立即保存到同目录下的address_book.json
文件中。程序启动时会尝试从这个文件加载数据,这样即使在程序关闭和重启之间,用户的数据也不会丢失。
确保你有适当的文件读写权限,以便程序能够正常创建和修改address_book.json
文件。如果计划在生产环境中使用类似的程序,你可能需要更强大的数据存储解决方案,比如数据库系统,并且考虑额外的错误处理和数据保护措施。
四、拓展:地址簿程序拓展代码详细分析
上述地址簿程序是一个简单的命令行界面应用,它允许用户添加、删除、查找和编辑联系人。它使用JSON格式文件进行数据持久化。这里对代码各部分进行详细分析:
导入必要的模块:
python
import json
导入json
模块,它用于读取和写入JSON格式的文件。
全局变量设置:
python
address_book_filename = 'address_book.json'
这定义了一个字符串变量address_book_filename
,它保存存储地址簿数据的JSON文件的文件名。
尝试加载或初始化地址簿字典:
python
try:with open(address_book_filename, 'r') as file:address_book = json.load(file)
except FileNotFoundError:address_book = {}
在这段代码中,程序尝试打开名为address_book.json
的文件并加载其内容到address_book
字典中。如果文件不存在(抛出FileNotFoundError
异常),则初始化address_book
为一个空字典。
保存地址簿数据到文件的函数:
python
def save_address_book():with open(address_book_filename, 'w') as file:json.dump(address_book, file, indent=4)
该函数save_address_book
使用上文定义的文件名变量address_book_filename
,打开文件并以写的方式('w'
),将address_book
字典转换成JSON格式并保存下来。indent=4
参数确保了JSON数据易于阅读。
添加、删除、查找和编辑联系人的功能函数:
-
add_contact
函数提示用户输入新联系人的相关信息,然后将它保存到address_book
字典,并调用save_address_book
函数写入JSON文件。 -
delete_contact
函数提示用户输入要删除的联系人名字,如果在字典找到此联系人,就从字典中将其删除,并通过save_address_book
更新JSON文件。 -
find_contact
函数允许用户通过输入名字来找到特定联系人并显示其信息。 -
edit_contact
函数让用户通过输入名字来找到特定联系人并能够修改其信息,之后保存新的数据到文件中。
主函数(程序入口):
python
def main():while True:...if choice == '1':add_contact()elif choice == '2':delete_contact()...elif choice == '5':print("退出地址簿程序。")breakelse:print("无效的输入, 请重新输入编号。")
main
函数包含了一个无限循环,显示菜单并根据用户的输入调用相应的函数。循环内部有一个条件判断语句(if-elif-else),用于根据用户的选择执行相应的功能。一旦用户选择退出(choice == '5'
),循环将通过break
语句终止,这也会结束程序。
程序运行检测:
python
if __name__ == '__main__':main()
这是一个Python的标准模式,用于判断当前脚本是否是直接运行而不是作为模块导入到别的脚本中。如果是直接运行,__name__
变量的值将会是'__main__'
,让main
函数被调用。
整个程序利用函数将不同的功能进行模块化处理,使得代码结构清晰,方便维护和扩展。利用JSON文件进行数据持久化是确保用户数据不会因程序关闭而丢失的简单有效方法。