--------------------------------------------------------总代码在最下面-----------------------------------------------------------

(1)好友管理系统中不仅需要保存好友名称,还需要保存分组以及分组中的好友,因此,我们需要明确以什么结构保存数据。根据功能的描述,我们可以将数据以['王五', '张三', '赵柳', {'家人': ['李四','刘备']},{'同事': ['李龙','张飞']}]结构保存。

(2)功能展示。功能展示用于向用户展示该程序中所包含的功能,以及接收用户输入的功能选项,实现用户人机交互的入口。

(3)添加好友。该功能逻辑相对简单,只需要将用户输入的好友名称添加到好友列表中即可。

(4)获取所有好友。该功能用于获取好友列表中的所有数据,包括分组中的数据,便于后期对好友列表中的数据操作。

(5)获取所有分组及其分组好友。该功能用于获取好友列表中分组的名称和分组的好友,不包括未分组的好友。

(6)获取分组名称。该功能仅仅用于获取所有的分组名称,用于后期判断用户输入的分组名是否合法。

(7)删除好友。此功能分为两种情况进行判断,一是:删除的好友未在分组内,二是:删除的好友在分组内。如果删除的好友未在分组内,那么直接在好友列表中删除;如果删除的好友在分组内,那么需要先获取所有分组和分组内的好友,根据用户输入的好友名称在对应的分组内进行删除。

(8)备注好友。备注好友功能与删除好友逻辑类似,需要分为两种情况修改好友的备注名称,若修改备注的好友未在分组内,则直接获取好友名称并对其重新赋值;若修改备注的好友在分组内,则需要找到该好友对应的分组并进行修改。

(9)展示好友。展示好友功能分为展示所有好友和展示指定分组的好友,展示所有好友,直接调用已经定义好的获取所有好友方法即可,展示指定分组的好友,需要根据用户输入的分组名进行展示分组内的好友名称。

(10)好友分组。好友分组功能是将好友划分为不同的组,在使用好友分组功能时,会询问用户是否创建新的分组,如果用户选择创建新的分组,那么由用户输入新的分组名并创建,新的分组会以{'家人': ['李四','刘备']}结构添加到好友列表中;如果用户选择使用已存在的分组,那么需要由用户输入具体的分组名和具体的好友名,在将好友名添加到分组前需要分别对分组名和好友名进行正确性校验,只有当分组名和好友名均存在时,才可以将好友名移动到指定的分组中。

(11)所有功能完成后,需要将定义的类实例化并调用入口函数

(初始化界面)

期望功能实现:

['王五', '张三', '赵柳', {'家人': ['李四','刘备']},{'同事': ['李龙','张飞']}]

(1)添加好友

*因为前面的功能都会用到好友分组所有先行介绍好友分组

 (5)好友分组

其中有三种方式,第一种为创建新的分组,创建分组时会让您输入分组的名字与要放入分组的好友.

用一个字典来接收创建的分组与好友

并且将字典复制添加到好友总列表中

并且利用split()可以实现多个好友的输入

不想添加好友,形成只有键没有值的字典,只需要直接回车

代码实现

第二种,即实现将未分组的好友放入分组中.

思考要将好友放到分组中,我们必须要取到字典的值.怎么实现呢?

****************************重要理解,能理解下列就可以基本理解分组的含义******************************

 首先利用for 循环遍历总列表,因为未分组的好友存放类型都是字符串,所以要进行一个if 语句的判断

利用type()判断 i 是否为字典,其次利用keys()与values()获取对应的分组名字与原本存在对应分组中的好友.接而判断移动的好友名称是否在列表内,要移动到的分组名称是否为 i 字典的键(即判断分组名一不一样),最后将字典的值进行遍历(因为此次遍历的 j 类型为列表)这样就可以获取到字典的值了,这下可以对里面进行删除,添加等操作

我们已经可以获取到里面的值,接下来直接remove()将要移动的那位好友移除,再添加到字典值对应的列表中即可

代码实现:

第三种 实现将一个分组中的好友移动到另一个分组.思路:将分组中的好友放到总列表中,让他成为未分组的好友,之后再执行一次第二种的功能即可.也会用到上面说过的重要理解

定义为一个移出的函数(为了避免for 循环的重复)下面再调用,将要移动的好友从字典值的列表中删除,再添加到总列表中,就实现了把分组好友变为未分组好友

再调用一次第二种方法:

代码实现: (2)删除好友

第一种,删除没有分组的好友,直接对总列表使用remove(好友名称)即可

第二种,删除分组中的好友,直接利用上述的重要理解,获取到要删除好友对应字典的列表值即可

要先获取所有分组和分组内的好友.

代码实现:

 (3)备注好友因为刚学没多久,备注:我直接理解为将原本的名字删除再添加备注名.实现代码基本与删除好友相同

 

代码实现:

(4) 展示好友 展示好友也分为三种,展示所有好友 分组好友 以及获取所有分组名

展示所有好友直接打印好友总列表即可

展示分组好友,判断分组名,相同直接打印就可以了

获取所有分组名,这个需要我们创建一个新列表来接收所有字典的键(即分组名)

通过第二层遍历获取分组名,再添加到新列表

代码实现:

实例化及其入口;

class Friend:def __init__(self):self.list = []def welcome(self):print('**欢迎使用好友管理系统**')print('1.添加好友\n''2.删除好友\n''3.备注好友\n''4.展示好友\n''5.好友分组\n''6.退出')while True:option = input("请选择功能:\n")# 添加好友if option == '1':self.add_friend()# 删除好友elif option == '2':self.del_friend()# 备注好友elif option == '3':self.modify_friend()# 展示好友elif option == '4':self.show_friend()# 分组好友elif option == '5':self.group_friend()elif option == '6':print('已停止好友管理系统')breakdef add_friend(self):name = input('请输入添加好友的姓名:')self.list.insert(0, name)    #为保持美观而使用insert()方法使得添加的好友处于前面的部分Sprint('添加成功')def del_friend(self):rname = input('请输入要删除的好友名称:')if rname in self.list:self.list.remove(rname)print('删除成功')else:for i in self.list:if type(i) == dict:print(i)l = i.values()for j in l:if rname in j:j.remove(rname)print('删除成功')def modify_friend(self):oldname = input('请输入要修改的好友名称:')newname = input(('请输入修改后的好友姓名:'))if oldname in self.list:self.list.remove(oldname)self.list.append(newname)print('修改成功')else:for i in self.list:if type(i) == dict:l = i.values()for j in l:if oldname in j:j.remove(oldname)j.append(newname)print('修改成功!')def show_friend(self):choice = int(input('展示所有好友请输入7,展示分组好友请输入8,获取所有分组名称请输入9.请输入:'))if choice == 7:print(self.list)elif choice == 8:grouping_name = input('请输入要展示的分组名称:')for i in self.list:if type(i) == dict:keyname = i.keys()print(i)elif choice == 9:list5 = []for i in self.list:if type(i) == dict:keyname = i.keys()for j in keyname:list5.append(j)print(f'分组名称有{list5}')def group_friend(self):selection = int(input('选择创建新分组请输入10\n选择使用已存在分组请选择11\n如果选择在两个分组进行操作请输入12.:'))if selection == 10:new_grouping_name1 = input('请输入新好友分组的名称:')new_grouping_name = {}friend_name = input('请输入要添加的好友名称:').split()new_grouping_name[new_grouping_name1] = friend_nameself.list.append(new_grouping_name.copy())print('添加成功!')elif selection == 11:def gai():movename1 = input('请输入要移动好友的名称:')grouping_name2 = input('请输入移动好友移动至的分组:')for i in self.list:if type(i) == dict:keyname = i.keys()valuename = i.values()if movename1 in self.list and grouping_name2 in keyname:self.list.remove(movename1)l = i.values()for j in l:j.append(movename1)breakprint('添加成功')gai()elif selection == 12:def yi_chu():for i in self.list:if type(i) == dict:keyname = i.keys()valuename = i.values()for j in valuename:if movename1 in j:j.remove(movename1)self.list.append(movename1)movename1 = input('请输入要移动好友的名称:')grouping_name2 = input('请输入移动好友移动至的分组:')yi_chu()for i in self.list:if type(i) == dict:keyname = i.keys()valuename = i.values()if movename1 in self.list and grouping_name2 in keyname:self.list.remove(movename1)l = i.values()for j in l:j.append(movename1)breakprint('添加成功')else:print('好友或好友分组不存在')if __name__ == "__main__":friend = Friend()friend.welcome()

如何用Python做好友管理系统相关推荐

  1. python用中文怎么说-如何用Python做中文分词?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  2. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  3. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  4. 用python做一个舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  5. python 英语分词_如何用Python做中文分词?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  6. 如何用python做后端写网页-flask框架

    如何用python做后端写网页-flask框架 什么是Flask 安装flask模块 Hello World 更深一步:数据绑定 后端传入数据 从前端获取数据 数据库连接 screen 创建后台 查看 ...

  7. 词云python灿烈_如何用Python做中文词云?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  8. 如何用 Python 做自动化测试

    本文来自作者 Vant 在 GitChat 上分享 「如何用 Python 做自动化测试」 编辑 | 哈比 一.Selenium 环境部署 1. window 环境部署 1.1 当前环境 Win10 ...

  9. 如何用Python做词云?(基础篇视频教程)

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请点击文末的"阅读原文"按钮 ...

  10. 如何用Python做情感分析?

    商品评论挖掘.电影推荐.股市预测--情感分析大有用武之地.本文帮助你一步步用Python做出自己的情感分析结果,难道你不想试试看? 需求 如果你关注数据科学研究或是商业实践,"情感分析&qu ...

最新文章

  1. java jmail_jmail的使用
  2. Java获取当前线程的名字以及为线程命名
  3. Git——跟踪或取消跟踪文件
  4. 记录vmware的bug failed to install hcmon deriver
  5. python编程的常用工具_小白学Python(2)——常用Python编程工具,Python IDE
  6. Ajax--serialize应用表单数据序列化
  7. jmeter接口测试----8用户定义的变量
  8. web前端基础(06css)
  9. javascript:;禁用a标签默认功能的缺点。
  10. 联想云计算机终端,联想云桌面
  11. EditText属性及一些常用用法
  12. 【冬季】寒冬已至,让这些公众号温暖你的冬天
  13. 如何合理的拆分微服务
  14. 关于除去WordPress页脚底部的自带标语
  15. PaddlePaddle飞桨《高层API助你快速上手深度学习》『深度学习7日打卡营』第四节课后作业题(代码实践)---快来选一顿好吃的年夜饭
  16. ❤️‍Spring从入门到大神--事务管理(搞笑漫画讲解!简单易懂!!)
  17. 【专业认知】抖音就业 / 保研北大教育学 / 留学南加州EE / 微软就业
  18. linux的zz命令,Linux top命令的使用
  19. 《SQL必知必会》 11 使用子查询
  20. Youtube-dl参数说明

热门文章

  1. 早教机器人刷固件_父母不要再盲目去买智能儿童早教机器人,知道这几点事半功倍!...
  2. 毕业季-Java分布式开发面试题
  3. Listary -- 高效率办公软件
  4. 黑客攻防技术系列高清视频教程+必备工具包下载
  5. sql服务器数据库主文件,数据库文件和文件组
  6. 黑客技术之初学者编程入门
  7. 2022年电工杯A题高比例风电电力系统储能运行及配置分析参考代码
  8. 洗车香波行业调研报告 - 市场现状分析与发展前景预测
  9. CSS Reset Modern CSS Reset
  10. 【播放器】git上著名播放器