码迷,mamicode.com
首页 > 其他好文 > 详细

三级菜单的增删改-2018.2.22(下)

时间:2018-02-22 21:35:52      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:add   delete   换行符   eval   color   哈哈   方法   增删改   文件内容   

百度了一下三级菜单增删改的代码,要我说呢,这个代码要我自己写呢,估计几天也写不出来,这个代码写的,怎么说呢,非常巧妙,然后呢

我把他的代码拷贝下来自己看了一遍然后修改了一遍 算是比他原来的要更加好一点了吧(当然是我认为了)还有就是现在感觉他里面有些代码我看不懂

它的用处,也不知道是真的没用,还是我真的没看懂,这是一个问题,不管了吧 反正算是修改好了,好了 .

他的代码:

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老师的鸡汤感觉还是挺有用的.

好了,感觉有点累啊,虽然今天并没有看多久教程啊.

三级菜单的增删改-2018.2.22(下)

标签:add   delete   换行符   eval   color   哈哈   方法   增删改   文件内容   

原文地址:https://www.cnblogs.com/bushii/p/8459925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!