Logo
Section 1 / 3

打磨与重构

学习如何重构和优化 Chirpy。

导入

打磨与重构

学习如何重构和优化 Chirpy。

No configuration found for ID: ff72e57657d06c4f7e39c5a14f6ee730f4f326b20fe76895eda0359d0fbe679b

主文件手动调用函数

1user1 = User("alex123", "Alex", "password123") 2chirpy_network.add_user(user1) 3 4post1 = user1.create_post("Hello world!") 5chirpy_network.add_post(post1) 6 7user2.like_post(post1) 8chirpy_network.show_followers("alex123")

No configuration found for ID: d02726bc6b2108e9bcb7e6b9c9ca0ed4c6586661f1639b18233b404e122581ac

重构后的Chirpy主界面供用户使用

1def display_menu(): 2 print("\n Chirpy社交媒体平台") 3 print("========================================") 4 print("1. 创建新账户") 5 print("2. 发布一条动态") 6 print("3. 查看所有动态") 7 print("4. 点赞一条动态") 8 print("5. 评论一条动态") 9 print("6. 查看个人资料") 10 print("7. 列出所有用户") 11 print("8. 退出")
1def display_menu(): 2 print("\n Chirpy社交媒体平台") 3 print("=" * 40) 4 print("1. 创建新账户") 5 6def create_account(): 7 username = input("请输入用户名: ") 8 display_name = input("请输入显示名称: ") 9 password = input("请输入密码: ") 10 verified = input("是否需要认证账户?(yes/no): ").strip().lower() 11 if verified == "yes": 12 user = VerifiedUser(username, display_name, password) 13 else: 14 user = User(username, display_name, password) 15 chirpy_network.add_user(user, verified) 16 17while True: 18 display_menu() 19 choice = input("请选择一个选项 (1-8): ") 20 21 if choice == "1": 22 create_account() 23 else: 24 print("无效选择。请重试。")

No configuration found for ID: 55e50f9f3b7b131e27b7fb1fcf3c19f3c8e7b8b440bc80846c0a83013f254e71

No configuration found for ID: 9c6029d4f858dd66d5daddff3bcecf18e1fe09c829cca16af957cf8864267a90

1from social_network import SocialNetwork 2from user import User 3from verified_user import VerifiedUser 4 5# 初始化Chirpy社交网络 6_chirpy_network = SocialNetwork() 7 8def display_menu(): 9 print("\n Chirpy社交媒体平台") 10 print("========================================") 11 print("1. 创建新账户") 12 print("2. 发布一条动态") 13 print("3. 查看所有动态") 14 print("4. 点赞一条动态") 15 print("5. 评论一条动态") 16 print("6. 查看个人资料") 17 print("7. 列出所有用户") 18 print("8. 退出") 19 20def create_account(): 21 username = input("请输入用户名: ") 22 display_name = input("请输入显示名称: ") 23 password = input("请输入密码: ") 24 verified = input("是否需要认证账户?(yes/no): ").strip().lower() 25 if verified == "yes": 26 user = VerifiedUser(username, display_name, password) 27 else: 28 user = User(username, display_name, password) 29 _chirpy_network.add_user(user, verified) 30 print(f"账户已成功为 {display_name} 创建!") 31 32def post_chirp(): 33 username = input("请输入您的用户名: ") 34 user = _chirpy_network.search_user_by_username(username) 35 if user: 36 content = input("请输入您的动态内容: ") 37 post = user.create_post(content) 38 _chirpy_network.add_post(post) 39 else: 40 print("用户未找到。") 41 42def view_chirps(): 43 _chirpy_network.list_all_posts() 44 45def like_chirp(): 46 username = input("请输入您的用户名: ") 47 user = _chirpy_network.search_user_by_username(username) 48 if user: 49 _chirpy_network.list_all_posts() 50 try: 51 post_index = int(input("请输入要点赞的动态序号: ")) 52 if 0 <= post_index < len(_chirpy_network._posts): 53 user.like_post(_chirpy_network._posts[post_index]) 54 else: 55 print("无效的动态序号。") 56 except ValueError: 57 print("输入无效。请输入数字。") 58 else: 59 print("用户未找到。") 60 61def comment_on_chirp(): 62 username = input("请输入您的用户名: ") 63 user = _chirpy_network.search_user_by_username(username) 64 if user: 65 _chirpy_network.list_all_posts() 66 try: 67 post_index = int(input("请输入要评论的动态序号: ")) 68 if 0 <= post_index < len(_chirpy_network._posts): 69 comment = input("请输入您的评论: ") 70 _chirpy_network._posts[post_index].add_comment(comment, user) 71 else: 72 print("无效的动态序号。") 73 except ValueError: 74 print("输入无效。请输入数字。") 75 else: 76 print("用户未找到。") 77 78def view_profile(): 79 username = input("请输入要查看的用户名: ") 80 user = _chirpy_network.search_user_by_username(username) 81 if user: 82 user.show_profile() 83 else: 84 print("用户未找到。") 85 86def list_users(): 87 if _chirpy_network._users: 88 print("\n已注册用户:") 89 for user in _chirpy_network._users: 90 print(user) 91 else: 92 print("暂无用户注册。") 93 94while True: 95 display_menu() 96 choice = input("请选择一个选项 (1-8): ") 97 98 if choice == "1": 99 create_account() 100 elif choice == "2": 101 post_chirp() 102 elif choice == "3": 103 view_chirps() 104 elif choice == "4": 105 like_chirp() 106 elif choice == "5": 107 comment_on_chirp() 108 elif choice == "6": 109 view_profile() 110 elif choice == "7": 111 list_users() 112 elif choice == "8": 113 print("正在退出Chirpy。再见!") 114 break 115 else: 116 print("无效选择。请重试。")
1from social_network import SocialNetwork 2from user import User 3from verified_user import VerifiedUser 4 5# 初始化Chirpy社交网络 6_chirpy_network = SocialNetwork() 7 8def display_menu(): 9 print("\n Chirpy社交媒体平台") 10 print("========================================") 11 print("1. 创建新账户") 12 print("2. 发布一条动态") 13 print("3. 查看所有动态") 14 print("4. 点赞一条动态") 15 print("5. 评论一条动态") 16 print("6. 查看个人资料") 17 print("7. 列出所有用户") 18 print("8. 退出") 19 20def create_account(): 21 username = input("请输入用户名: ") 22 display_name = input("请输入显示名称: ") 23 password = input("请输入密码: ") 24 verified = input("是否需要认证账户?(yes/no): ").strip().lower() 25 if verified == "yes": 26 user = VerifiedUser(username, display_name, password) 27 else: 28 user = User(username, display_name, password) 29 _chirpy_network.add_user(user, verified) 30 print(f"账户已成功为 {display_name} 创建!") 31 32def post_chirp(): 33 username = input("请输入您的用户名: ") 34 user = _chirpy_network.search_user_by_username(username) 35 if user: 36 content = input("请输入您的动态内容: ") 37 post = user.create_post(content) 38 _chirpy_network.add_post(post) 39 else: 40 print("用户未找到。") 41 42def view_chirps(): 43 _chirpy_network.list_all_posts() 44 45def like_chirp(): 46 username = input("请输入您的用户名: ") 47 user = _chirpy_network.search_user_by_username(username) 48 if user: 49 _chirpy_network.list_all_posts() 50 try: 51 post_index = int(input("请输入要点赞的动态序号: ")) 52 if 0 <= post_index < len(_chirpy_network._posts): 53 user.like_post(_chirpy_network._posts[post_index]) 54 else: 55 print("无效的动态序号。") 56 except ValueError: 57 print("输入无效。请输入数字。") 58 else: 59 print("用户未找到。") 60 61def comment_on_chirp(): 62 username = input("请输入您的用户名: ") 63 user = _chirpy_network.search_user_by_username(username) 64 if user: 65 _chirpy_network.list_all_posts() 66 try: 67 post_index = int(input("请输入要评论的动态序号: ")) 68 if 0 <= post_index < len(_chirpy_network._posts): 69 comment = input("请输入您的评论: ") 70 _chirpy_network._posts[post_index].add_comment(comment, user) 71 else: 72 print("无效的动态序号。") 73 except ValueError: 74 print("输入无效。请输入数字。") 75 else: 76 print("用户未找到。") 77 78def view_profile(): 79 username = input("请输入要查看的用户名: ") 80 user = _chirpy_network.search_user_by_username(username) 81 if user: 82 user.show_profile() 83 else: 84 print("用户未找到。") 85 86def list_users(): 87 if _chirpy_network._users: 88 print("\n已注册用户:") 89 for user in _chirpy_network._users: 90 print(user) 91 else: 92 print("暂无用户注册。") 93 94while True: 95 display_menu() 96 choice = input("请选择一个选项 (1-8): ") 97 98 if choice == "1": 99 create_account() 100 elif choice == "2": 101 post_chirp() 102 elif choice == "3": 103 view_chirps() 104 elif choice == "4": 105 like_chirp() 106 elif choice == "5": 107 comment_on_chirp() 108 elif choice == "6": 109 view_profile() 110 elif choice == "7": 111 list_users() 112 elif choice == "8": 113 print("正在退出Chirpy。再见!") 114 break 115 else: 116 print("无效选择。请重试。")

解决方案说明

现在我们的项目已经被重构为一个基于菜单的系统,下面我们将逐一讲解每个功能的实现方式及其与Chirpy核心功能的交互。

  • 第二个选项允许用户发布动态。不再需要手动创建帖子对象,post_chirp() 函数负责处理整个流程。它首先通过 chirpy_network.search_user_by_username() 验证用户是否存在,确保只有注册用户才能发帖。如果用户有效,用户输入动态内容,该内容被传递给 user.create_post(),然后通过 chirpy_network.add_post() 添加到网络中。这使得发帖过程变得无缝流畅。

  • 第三个选项允许用户查看所有动态。当选择此项时,调用 view_chirps() 函数,该函数直接调用 chirpy_network.list_all_posts()。这确保了用户无需手动查找帖子,所有可用的动态都会以结构化格式展示。此功能为浏览Chirpy动态流提供了便捷方式。

  • 第四个选项允许用户点赞动态。like_chirp() 函数首先验证用户身份,确保只有注册用户才能与帖子互动。接着列出所有动态并附带序号。用户通过输入对应序号选择要点赞的动态。若序号有效,则调用 user.like_post() 更新该动态的点赞数。这种方式防止了无效选择,同时让用户能够动态参与内容互动。

  • 第五个选项允许用户评论动态。comment_on_chirp() 函数首先验证用户,然后列出所有带有序号的动态。用户选择一条动态并输入评论内容,该评论通过 chirpy_network.posts[post_index].add_comment() 添加到指定动态中。这种结构化方法确保用户可以有意义地互动,同时避免无效或意外操作。

  • 第六个选项允许用户查看个人资料。view_profile() 函数提示输入用户名,并通过 chirpy_network.search_user_by_username() 获取用户信息。如果用户存在,则调用 user.show_profile() 显示其详细信息。此功能使用户无需手动导航即可访问自己的资料。

  • 第七个选项列出所有已注册用户。list_users() 函数检查系统中是否存在用户。如果有注册用户,则以有序格式展示;否则提示用户尚未创建任何账户。这便于查看当前活跃在Chirpy上的所有用户。

  • 第八个也是最后一个选项用于退出程序。选择后,系统打印告别消息并终止循环,优雅地结束运行。这确保用户可以以受控且干净的方式离开应用程序。

解决方案说明

现在我们的项目已被重构为一个基于菜单的系统,下面我们将逐一讲解每个功能的实现方式及其与Chirpy核心功能的交互。

  • 第二个选项允许用户发布动态。不再需要手动创建帖子对象,post_chirp() 函数负责处理整个流程。它首先通过 chirpy_network.search_user_by_username() 验证用户是否存在,确保只有注册用户才能发帖。如果用户有效,用户输入动态内容,该内容被传递给 user.create_post(),然后通过 chirpy_network.add_post() 添加到网络中。这使得发帖过程变得无缝流畅。

  • 第三个选项允许用户查看所有动态。当选择此项时,调用 view_chirps() 函数,该函数直接调用 chirpy_network.list_all_posts()。这确保了用户无需手动查找帖子,所有可用的动态都会以结构化格式展示。此功能为浏览Chirpy动态流提供了便捷方式。

  • 第四个选项允许用户点赞动态。like_chirp() 函数首先验证用户身份,确保只有注册用户才能与帖子互动。接着列出所有动态并附带序号。用户通过输入对应序号选择要点赞的动态。若序号有效,则调用 user.like_post() 更新该动态的点赞数。这种方式防止了无效选择,同时让用户能够动态参与内容互动。

  • 第五个选项允许用户评论动态。comment_on_chirp() 函数首先验证用户,然后列出所有带有序号的动态。用户选择一条动态并输入评论内容,该评论通过 chirpy_network.posts[post_index].add_comment() 添加到指定动态中。这种结构化方法确保用户可以有意义地互动,同时避免无效或意外操作。

  • 第六个选项允许用户查看个人资料。view_profile() 函数提示输入用户名,并通过 chirpy_network.search_user_by_username() 获取用户信息。如果用户存在,则调用 user.show_profile() 显示其详细信息。此功能使用户无需手动导航即可访问自己的资料。

  • 第七个选项列出所有已注册用户。list_users() 函数检查系统中是否存在用户。如果有注册用户,则以有序格式展示;否则提示用户尚未创建任何账户。这便于查看当前活跃在Chirpy上的所有用户。

  • 第八个也是最后一个选项用于退出程序。选择后,系统打印告别消息并终止循环,优雅地结束运行。这确保用户可以以受控且干净的方式离开应用程序。

通过高级面向对象编程概念增强功能

最终挑战