百度了一下三级菜单增删改的代码,要我说呢,这个代码要我自己写呢,估计几天也写不出来,这个代码写的,怎么说呢,非常巧妙,然后呢
我把他的代码拷贝下来自己看了一遍然后修改了一遍 算是比他原来的要更加好一点了吧(当然是我认为了)还有就是现在感觉他里面有些代码我看不懂
它的用处,也不知道是真的没用,还是我真的没看懂,这是一个问题,不管了吧 反正算是修改好了,好了 .
他的代码:
f_read = open(‘menu_file‘,‘r‘,encoding=‘utf8‘) #读取menu_file文件中的字符串,转换成字典类型数据并以对象接收 with f_read as f_read: geography_menu = eval(f_read.read().strip()) #测试读取数据是否为字典 # print(type(geography_menu)) # print(geography_menu[‘华中‘][‘湖北‘]) #定义一个动态字典来进行多级选择,并初始化为geography_menu dynamic_dict = geography_menu #定义一个用户列表来接收dynamic_dict的父字典的键,以便用户选择返回上级 dynamic_dict_super = [] #增删改查还没有保存在文件中 while True: print(‘欢迎使用‘.center(50,‘*‘)) for i in dynamic_dict: print(‘>>>‘,i) user_choice = input(‘请输入选择:输入你要查询的地区省市或新增[add]、修改[revise]、删除[delete]、返回上一级[q]‘).strip() #print(dynamic_dict)#测试当前屋为什么类型 #查询 if user_choice in dynamic_dict: dynamic_dict_super.append(dynamic_dict) if type(dynamic_dict) == list: print(‘你选择的城市为:‘,user_choice) break else: dynamic_dict = dynamic_dict[user_choice] #新增 elif user_choice == ‘add‘: user_add = input(‘请输入你要添加的省市区:‘).strip() if user_add in dynamic_dict: print(‘此项已存在,请重新输入:‘) else: if type(dynamic_dict) == list: dynamic_dict.append(user_add)#当类型为list时,需要判断 else: dynamic_dict[user_add] = {} continue #修改 elif user_choice == ‘revise‘: user_revise = input(‘请输入你要修改的省市区:‘).strip() if user_revise in dynamic_dict: user_revise_after = input(‘修改为:‘).strip() print(type(dynamic_dict)) if type(dynamic_dict) == list:#当类型为list时,需要判断 dynamic_dict[dynamic_dict.index(user_revise)] = user_revise_after else: dynamic_dict[user_revise_after] = dynamic_dict[user_revise] del dynamic_dict[user_revise] continue else: print(‘此项不存在,请重新输入:‘) #删除 elif user_choice == ‘delete‘: user_delete = input(‘请输入你要删除的省市区:‘).strip() if user_delete in dynamic_dict: dynamic_dict_super.append(dynamic_dict) if type(dynamic_dict) == list:#当类型为list时,需要判断 del dynamic_dict[dynamic_dict.index(user_delete)] else: del dynamic_dict[user_delete] continue else: print(‘此项不存在,请重新输入:‘) #返回上一级或退出 elif user_choice == ‘q‘: if dynamic_dict_super: dynamic_dict = dynamic_dict_super.pop() else: print(‘目前为最上级菜单,输入q后为退出系统!‘) break else: print("输入非法,请重新输入选择!") if type(dynamic_dict) != list: with open(‘menu_file‘,‘w‘,encoding=‘utf8‘) as f: f.write(str(dynamic_dict))
我的代码(其实不算我的吧,哈哈哈):
#_author_:"Bushii" #data:2018/2/22 #这个系统有一个缺点,就是不能直接退出,如果直接退出的话,将会缺失文件内容,这是很难受的 #这里是读取txt文本的内容,并将字符串转化为字典的过程.第一步: with open(‘menu_file‘,‘r‘,encoding=‘utf8‘) as f_read: dynamic_dict = eval(f_read.read().strip()) #定义另外一个列表用来接收原列表中有用的信息 dynamic_dict_super = [] while True: print(‘欢迎使用不识i查询系统‘.center(50,‘*‘)) #这里的t变量用来输出一个序号,使之更加美观,for循环则用来输出字典中的键. t=1 for i in dynamic_dict: print(t,i) t+=1 user_choice = input(‘请输入选择:输入你要查询的地区省市或新增[add]、修改[revise]、删除[delete]、返回上一级[b]‘).strip() #查询 if user_choice in dynamic_dict:#如果用户的选择在当前字典中,就将当前列表存入一个新的列表dynamic_dict_super中去 dynamic_dict_super.append(dynamic_dict) #这里就比较牛批了,如果dynamic_dict的类型是列表的话,那么打印你选择的城市是某某,否则,将dynamic_dict = dynamic_dict[user_choice] #无论有多少层,都可以无限进行下去. if type(dynamic_dict) == list: print(‘你选择的城市为:‘,user_choice) break else: dynamic_dict = dynamic_dict[user_choice]#反正这个用的就很巧妙 #新增 elif user_choice == ‘add‘: user_add = input(‘请输入你要添加的省市区:‘).strip()#一般来说,strip的作用是可以优化用户输入过程中的错误,用户输入的空格和换行符可以识别并删除掉 if user_add in dynamic_dict: print(‘此项已存在,请重新输入:‘) else: #这里要分为两种情况,如果是字典的话 用后一种,如果是列表的话用前一种方法增加元素 if type(dynamic_dict) == list: dynamic_dict.append(user_add)#tip:[]这个表示的是列表,{}这个表示的是字典 else: dynamic_dict[user_add] = {}#这里还有一个漏洞啊,这样一直添加的话,就无法出现你选择的城市为这样的结果了 #continue,实践证明,这个continue是没有什么用处的. #修改 elif user_choice == ‘revise‘: user_revise = input(‘请输入你要修改的省市区:‘).strip() if user_revise in dynamic_dict: user_revise_after = input(‘修改为:‘).strip() #print(type(dynamic_dict)) if type(dynamic_dict) == list:#又是需要判断是不是列表的,因为列表和字典改变内容的方式是不一样的 dynamic_dict[dynamic_dict.index(user_revise)] = user_revise_after#列表可以用index索引定位到元素 else: dynamic_dict[user_revise_after] = dynamic_dict[user_revise]#实质是创建一个和原来字典一样的字典,然后删除原来的字典就行了 del dynamic_dict[user_revise] #continue else: print(‘此项不存在,请重新输入‘) #删除 elif user_choice == ‘delete‘: user_delete = input(‘请输入你要删除的省市区:‘).strip() if user_delete in dynamic_dict: dynamic_dict_super.append(dynamic_dict) if type(dynamic_dict) == list:#还是需要判断是不是列表,列表和字典删除的方法不一样,但都是使用del del dynamic_dict[dynamic_dict.index(user_delete)] else: del dynamic_dict[user_delete] #continue else: print(‘此项不存在,请重新输入:‘) #返回上一级或退出 elif user_choice == ‘b‘: #如果自己创建的这个列表为空.那么退出这个列表,如果这个列表不为空,那么就将最后一个元素删除并返回到dynamic_dict这个列表上 if dynamic_dict_super: dynamic_dict = dynamic_dict_super.pop()#其中pop无参数的时候是删除列表最后一个,然后将删除的元素返回到dynamic_dict这个列表 else: print(‘目前为最上级菜单,输入b后为退出系统!‘) break else: print("输入非法,请重新输入选择!") #这三行代码很重要啊,这三行代码拿来保存改变的内容,没有这三行内容的话,改变的内容第二次打开还是原来的内容 #这几行代码有点看不懂啊,直接翻译一下好了,如果dynamic_dict它的类型不是列表,就以w的方式打开文件,而且把dynamic_dict的内容转化为字符串后存进去. if type(dynamic_dict) != list:#哦,如果没有这句的话,后果是很严重的,当你选择了一个城市之后,前面的所有内容将会被删除 with open(‘menu_file‘,‘w‘,encoding=‘utf8‘) as f: f.write(str(dynamic_dict))
用一句励志的话来结尾吧:为了不让生活留下遗憾和后悔,我们应该尽可能抓住一切改变生活的机会。
现在自学到了老男孩python教程的第九天.可是第九天到第十二天讲的是ubuntu的一些命令,听得有些迷糊,也有点不想听
还是直接跳过这部分吧,先看别的好了
还有alex老师的鸡汤感觉还是挺有用的.
好了,感觉有点累啊,虽然今天并没有看多久教程啊.
原文地址:https://www.cnblogs.com/bushii/p/8459925.html
时间: 2024-10-06 13:29:23