鱼C论坛

 找回密码
 立即注册
查看: 855|回复: 3

[已解决]如何实现一个三级菜单

[复制链接]
发表于 2018-9-25 00:19:16 | 显示全部楼层 |阅读模式
20鱼币
偶然看视频看到的一个题,没有答案
感觉自己想的太复杂,没有什么很好的思路,来看看你们怎么实现的

要求
1、程序一开始打印中国所有省份       8个省 一行   按首字母排列
2、然后输入一个 省份      打印省份下面的所有城市               8个一行    按首字母排列
3、输入一个城市        打印城市下面所有区           8个一行    按首字母排列
4、输入为   b      返回上一级菜单
5、输入为   q      退出程序


最佳答案
2018-9-25 00:19:17
三级菜单最难的是构造这个菜单字典啊2333
借用楼上完成的菜单字典
  1. dict_list = {'安徽':{'合肥':['肥西县','庐江县'],'安庆':['宿松','枞阳']},'福建':{'福州':['闽侯县','闽清县'],'龙岩':['新罗区','永定区']}}
  2. now, back = dict_list, list()
  3. while True:
  4.     # 打印菜单,now永远是当前显示的菜单级
  5.     for count, each_key in enumerate(now.keys() if isinstance(now, dict) else now, 1):
  6.         print('%d %s' % (count, each_key), end='  ' if count%8 else '\n')
  7.     # 输入
  8.     enter = input('\n>>:')
  9.     # 输入q退出
  10.     if enter == 'q':
  11.         break
  12.     # 私用back列表存储上一层菜单,若列表不为空,则把最后一次的历史记录弹回给now(同时味着历史记录删掉最后一个记录),否则空循环
  13.     elif enter == 'b':
  14.         if len(back) > 0:
  15.             now = back.pop()
  16.         else:
  17.             continue
  18.     # 因为字典最深层是列表,所以还要对字典类型进行判断,是字典就进去一层,不是就空循环
  19.     elif isinstance(now, dict):
  20.         get_enter = now.get(enter)
  21.     else:
  22.         continue
  23.     # 进去一层
  24.     get_enter = now.get(enter)
  25.     # 对输入进行有效性验证,有效先加历史记录,再把自己变成深一层,否则空循环
  26.     if get_enter:
  27.         back.append(now)
  28.         now = get_enter
复制代码

最佳答案

查看完整内容

三级菜单最难的是构造这个菜单字典啊2333 借用楼上完成的菜单字典
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 00:19:17 | 显示全部楼层    本楼为最佳答案   
三级菜单最难的是构造这个菜单字典啊2333
借用楼上完成的菜单字典
  1. dict_list = {'安徽':{'合肥':['肥西县','庐江县'],'安庆':['宿松','枞阳']},'福建':{'福州':['闽侯县','闽清县'],'龙岩':['新罗区','永定区']}}
  2. now, back = dict_list, list()
  3. while True:
  4.     # 打印菜单,now永远是当前显示的菜单级
  5.     for count, each_key in enumerate(now.keys() if isinstance(now, dict) else now, 1):
  6.         print('%d %s' % (count, each_key), end='  ' if count%8 else '\n')
  7.     # 输入
  8.     enter = input('\n>>:')
  9.     # 输入q退出
  10.     if enter == 'q':
  11.         break
  12.     # 私用back列表存储上一层菜单,若列表不为空,则把最后一次的历史记录弹回给now(同时味着历史记录删掉最后一个记录),否则空循环
  13.     elif enter == 'b':
  14.         if len(back) > 0:
  15.             now = back.pop()
  16.         else:
  17.             continue
  18.     # 因为字典最深层是列表,所以还要对字典类型进行判断,是字典就进去一层,不是就空循环
  19.     elif isinstance(now, dict):
  20.         get_enter = now.get(enter)
  21.     else:
  22.         continue
  23.     # 进去一层
  24.     get_enter = now.get(enter)
  25.     # 对输入进行有效性验证,有效先加历史记录,再把自己变成深一层,否则空循环
  26.     if get_enter:
  27.         back.append(now)
  28.         now = get_enter
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 06:52:08 | 显示全部楼层
本帖最后由 孤独的嫖客 于 2018-9-25 06:57 编辑

我尝试的大概实现了一下,但是全国省市区县数据太多 ,我最多算是写了一个demo,字典部分,你可以自行填充完整
QQ截图20180925064531.jpg
如图所示



    满足需求一:默认打印所有省份(字典只有2个省份,请自行完善字典,每行8个,这个我没写,不过应该不至于写不出来吧)


    满足需求二:输入一个 省份      打印省份下面的所有城市(未满足每行8个,理由同上)


    满足需求三:输入一个城市       打印城市下面所有区(未满足每行8个,理由同上)


    满足需求四:输入为   b 返回上一级菜单


    满足需求五:输入为   q      退出程序




                               
登录/注册后可看大图


源码部分:
  1. import re
  2. dict_list = {'安徽':{'合肥':['肥西县','庐江县'],'安庆':['宿松','枞阳']},'福建':{'福州':['闽侯县','闽清县'],'龙岩':['新罗区','永定区']}}
  3. # print(dict_list)
  4. def clear(data,):
  5.     info = str(data)
  6.     ret = re.findall("'([\u4e00-\u9fa5]*?)'",info)
  7.     tedata = '丨'.join(ret)
  8.     return tedata


  9. pro = clear(dict_list.keys())
  10. print(pro)
  11. while True:
  12.     inpro = input("请输入要查询的省份,[q]退出:")
  13.     if inpro == 'q':
  14.         print('感谢使用查询系统,Bye!')
  15.         exit()
  16.     try:
  17.         temp = dict_list[inpro].keys()
  18.         print(clear(temp))
  19.         incit = input('请输入要查询的城市,[b]返回:')
  20.         if incit == 'b':
  21.             continue
  22.         else:
  23.             print(clear(dict_list[inpro][incit]))
  24.     except KeyError as e:
  25.         print('未检索到数据,请仔细核实输入')
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
RIXO + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-25 10:47:04 | 显示全部楼层
天圆突破 发表于 2018-9-25 00:19
三级菜单最难的是构造这个菜单字典啊2333
借用楼上完成的菜单字典

你们俩写的代码都挺好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表