• Python_三级目录


    程序要求:

    1. 使用字典存储

    1. 可以一层一层的进入到所有层
    2. 可以在每层返回上一层
    3. 可以在任意层退出

      三级目录写了两个版本,第一个版本是刚看完字典写出来的,代码很多冗余,很多重复。

    menu = {
        '北京':{
            '朝阳':{
                '国贸':{
                    'CICC':{},
                    'HP':{},
                    '渣打银行':{},
                    'CCTV':{}
                },
                '望京':{
                    '陌陌':{},
                    '阿里巴巴':{},
                    '奔驰':{}
                },
                '三里屯':{
                    '优衣库':{},
                    'apple':{},
                }
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '阿泰包子':{}
                },
                '天通苑':{
                    '链家':{},
                    '我爱我家':{},
                },
                '回龙观':{}
            },
            '海淀':{
                '五道口':{
                    '谷歌':{},
                    '网易':{},
                    'Sogo':{},
                    '快手':{},
                },
            },
            '中关村':{
                '优酷':{},
                '爱奇艺':{},
                '腾讯':{},
                '汽车之家':{},
                '新东方':{},
            }
        },
        '上海':{
            '浦东':{
                '陆家嘴':{
                    'CICC':{},
                    '高盛':{},
                    '摩根':{},
                },
                '外滩':{}
            },
            '闵行':{},
            '静安':{},
        },
        '山东':{
            '济南':{},
            '德州':{
                '乐陵':{
                    '丁务镇':{},
                    '城区':{},
                },
                '虞城':{},
                '平原县':{},
            },
            '青岛':{},
        }
    }
    
    back_flag = False
    quit_flag = False
    
    
    while not back_flag and not quit_flag:
        for key in menu:
            print(key)
        choice = input('>>:').strip()
        if choice in menu:
            while not back_flag and not quit_flag:
                for key_2 in menu[choice]:
                    print(key_2)
                choice_2 = input('2>>:').strip()
                if choice_2 == 'b':
                    back_flag = True
                if choice_2 == 'q':
                    quit_flag = True
                if choice_2 in menu[choice]:
                    while not back_flag and not quit_flag:
                        for key_3 in menu[choice][choice_2]:
                            print(key_3)
                        choice_3 = input('3>>:').strip()
                        if choice_3 == 'b':
                            back_flag = True
                        if choice_3 == 'q':
                            quit_flag = True
                        if choice_3 in menu[choice][choice_2]:
                            while not back_flag and not quit_flag:
                                for key_4 in menu[choice][choice_2][choice_3]:
                                    print(key_4)
                                print('last level!!')
                                choice_4 = input('4>>:').strip()
                                if choice_4 == 'b':
                                    back_flag = True
                                if choice_4 == 'q':
                                    quit_flag = True
                            else:
                                back_flag = False
                    else:
                        back_flag = False
            else:
                back_flag = False
    View Code

      第二个版本,代码部分比较精炼,偷师于老男孩。

    menu = {
        '北京':{
            '朝阳':{
                '国贸':{
                    'CICC':{},
                    'HP':{},
                    '渣打银行':{},
                    'CCTV':{}
                },
                '望京':{
                    '陌陌':{},
                    '阿里巴巴':{},
                    '奔驰':{}
                },
                '三里屯':{
                    '优衣库':{},
                    'apple':{},
                }
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '阿泰包子':{}
                },
                '天通苑':{
                    '链家':{},
                    '我爱我家':{},
                },
                '回龙观':{}
            },
            '海淀':{
                '五道口':{
                    '谷歌':{},
                    '网易':{},
                    'Sogo':{},
                    '快手':{},
                },
            },
            '中关村':{
                '优酷':{},
                '爱奇艺':{},
                '腾讯':{},
                '汽车之家':{},
                '新东方':{},
            }
        },
        '上海':{
            '浦东':{
                '陆家嘴':{
                    'CICC':{},
                    '高盛':{},
                    '摩根':{},
                },
                '外滩':{}
            },
            '闵行':{},
            '静安':{},
        },
        '山东':{
            '济南':{},
            '德州':{
                '乐陵':{
                    '丁务镇':{},
                    '城区':{},
                },
                '虞城':{},
                '平原县':{},
            },
            '青岛':{},
        }
    }
    
    lader = menu
    apper_levels = []
    
    while True:
        for key in lader:
            print(key)
        choice = input('>>>:').strip()
        if choice in lader:
            apper_levels.append(lader)                      # 次步是重点,第一次执行便将字典以列表的形式保存,每进入一层,便将父级目录追加到后边,用于退出次层时直接提取,保证永远包含字典,并进一层,追加一层。
            lader = lader[choice]
        elif choice == 'q':
            if apper_levels:
                lader = apper_levels.pop()                  # 提取的是进入某层后的上一层信息,是在上边标注的地方进行的追加。
    View Code

    2. 使用文件存储数据

    1. 展示省市县(数据存在文件中)
    2. 对菜单实现增(add)删(del)改(replace)查(到某一级目录可以让用户选择增加是否添加当级目录的省市县,还是存放到文本中)

     

    程序涉及方法:

      字符串转为字典

    a = str({'bj':{'1':111}})
    print(type(a))
    print(a)
    a = eval(a)
    print(type(a))

    程序使用字典文件(文件名china):

    {
        '北京':{
            '朝阳':{
                '国贸':{},
                '望京':{},
                '三里屯':{}
            },
            '昌平':{
                '沙河':{},
                '天通苑':{},
                '回龙观':{}
            },
            '海淀':{
                '五道口':{},
            },
            '中关村':{}
        },
        '上海':{
            '浦东':{
                '陆家嘴':{},
                '外滩':{}
            },
            '闵行':{},
            '静安':{},
        },
        '山东':{
            '济南':{},
            '德州':{
                '乐陵':{},
                '虞城':{},
                '平原县':{},
            },
            '青岛':{},
        }
    }
    View Code

    程序代码:

    with open('china', 'r', encoding='utf8') as file:
        china_str = file.read().strip()
        pass
    
    mean = eval(china_str)
    leader = mean
    apper_leves = []                                                                                # 用于记录返回值
    
    flag = False
    
    while not flag:
        for key in leader:
            print(key)
        choose = input('此页面支持增加(add)、删除(del)、修改(replace)、查看(直接输入省市县)、后退请按"b":')
        # 查询
        if choose in leader:
            apper_leves.append(leader)
            leader = leader[choose]
    
        # 增加
        elif choose == 'add':
            user_add = input('输入想要增加的地区:')
            if user_add in leader:
                print('输入的已存在!')
            else:
                leader[user_add] = {}
    
        # 删除
        elif choose == 'del':
            user_del = input('输入想要删除的地区:')
            if user_del not in leader:
                print('删除地区不存在!')
            else:
                del leader[user_del]
    
        # 修改
        elif choose == 'replace':
            user_rep_bef = input('请输入想要修改的地区:')
            if user_rep_bef not in leader:
                print('修改地区不存在!')
            else:
                user_rep_aft = input('请输入修改后的地区名称:')
                leader[user_rep_aft] = leader[user_rep_bef]                                         # 重点,将老键的值赋给新键,并删除老键
                del leader[user_rep_bef]
    
        # 后退及退出
        elif choose == 'b':
            if apper_leves:
                leader = apper_leves.pop()
            else:
                print('已是最上级菜单,输入“b”退出')                                                # 重点,如直接退出,字典并没有返回最上级目录,无法输出到文件
                flag = True
        else:
            print('非法输入,请重新输入!')
    
    with (open('old_wang', 'w', encoding='utf8')) as f:
        f.write(str(leader))
        pass
    View Code
  • 相关阅读:
    Qt表格导出图片
    QItemDelegate edit某个控件后把数据写回model
    qt json操作
    qt在tableview中绘制图片
    qt tableview里面添加控件
    qt QAbstractItemModel一些方法介绍
    ecahrt表格内容自适应
    qt tableview列头背景颜色设置
    qt对plot柱状图颜色设置
    qtdebug和release加载不同的文件配置
  • 原文地址:https://www.cnblogs.com/dmjx/p/7828826.html
Copyright © 2020-2023  润新知