源代码:

#!/usr/bin/python3

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' def menu(message):
print('按q返回上一层')
print('按e退出')
ec = 'q' # 返回上一级
ex = 'e'
for i in message: # 打印一级菜单
print(i)
while True: # 进入一级菜单选择
choice1 = input('请输入1>>>:')
if choice1 in message: # 判断是否在字典中
for i1 in message[choice1]:
print(i1) # 打印值 while True:
choice2 = input('请输入2>>>:') # 进入二级菜单选择
if choice2 in message[choice1]:
for i2 in message[choice1][choice2]:
print(i2) while True:
choice3 = input('请输入3>>>:') # 进入三级菜单选择
if choice3 in message[choice1][choice2]:
for i3 in message[choice1][choice2][choice3]:
print(i3) elif choice3 == ec: # 返回判断
for i2 in message[choice1]:
print(i2) # 打印上一级菜单
break elif choice3 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') elif choice2 == ec: # 返回判断,并打印上一级菜单
for i1 in message:
print(i1)
break
elif choice2 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') elif choice1 == ec: # 返回判断
print('已经最顶级菜单,完全退出请输入 e ')
continue
elif choice1 == ex: # 退出判断
exit('退出中……ing')
else:
print('输入错误,请重新输入,么么哒') if __name__ == '__main__':
message = {'湖南':
{'衡阳':
{'珠晖区': '湖南工学院'},
'湘潭':
{'晖晖': '啦啦'}},
'北京':
{'朝阳':
{"德玛:北京大学"}}}
menu(message)
坑点:
1.纯分支与循坏,重复代码
2.多级字典的访问几级就需要几个[]中括号

用面向过程,函数方式做,返回上一级菜单未做,可做一个参考,有更好思路再更新
#!/usr/bin/python3

def menu_to(message):
'''打印菜单'''
try:
message.endswith('end')
except:
for i in message:
print(i)
else:
print(message.replace('end', '')) def get_message_key(message_info):
'''获得每层字典的单边值'''
try:
keys = []
for i in message_info:
message_info[i]
keys.append(i)
return keys
except:
return message_info + 'end' def menu_go(message_info):
'''进入主菜单'''
while True:
try:
judgment(message_info)
except Exception as e:
print(e) def judgment(message_info):
'''循环菜单'''
keys = get_message_key(message_info)
while True:
menu_to(keys) choice = input('请输入>>>:')
if choice == ec:
print('暂时未实现')
return judgment(message_info)
elif choice == ex:
exit('退出程序') if type(keys) == type('str') and keys.endswith('end'):
print('菜单到底了')
continue
else: if choice in keys:
message_info = message_info[choice]
return judgment(message_info)
else:
print('输入错误,请重新输入') if __name__ == '__main__':
info_message = {'湖南':
{'衡阳':
{'珠晖区': '湖南工学院'},
'湘潭':
{'晖晖': '啦啦'}},
'北京':
{'朝阳':
{"德玛": "北京大学"}}}
ec = 'q' # 返回上一级
ex = 'e' # 退出程序
menu_go(info_message)

  

 

最新文章

  1. JS中多种方式创建对象
  2. fibonacci数列从a到b的个数
  3. sessionStorage和localStorage中 存储
  4. 1304: [CQOI2009]叶子的染色 - BZOJ
  5. Xamarin.Android 入门之:Android API版本设置
  6. DllImport属性详解
  7. 找个输入IPoint在某个FeatureClass上距离最近的要素
  8. Crisis of HDU(母函数)
  9. 关于bool和BOOL的区别
  10. SDP(9):MongoDB-Scala - data access and modeling
  11. 云栖社区用机器人爬CSDN的文章?
  12. # 2018-2019-20175302实验一《Java开发环境的熟悉》实验报告
  13. C#调用WebApi
  14. MPU6050带字符驱动的i2c从设备驱动1
  15. 下载配置nodeJs,cnpm,webpack,vue-cli等,刚装的系统,所有东西重新配置
  16. 在IIS上启用Gzip压缩(HTTP压缩)
  17. [No0000D4]批处理全部代码详解Allbat
  18. Android-Binder机制
  19. Codeforces339D(SummerTrainingDay06-A 线段树)
  20. vs2010中TargetName与链接器输出名不一致

热门文章

  1. Linux下非root用户运行Tomcat
  2. Docker 镜像的备份恢复迁移
  3. Node.js 学习笔记之四:使用数据库
  4. [PyTorch 学习笔记] 4.1 权值初始化
  5. Asp.Net WebAPI的简介及创建
  6. 【Android】SlidingTabLayout实现标题栏,教你制作title标题 简单易学。
  7. Unity2018.4.7导出Xcode工程报错解决方案
  8. JAVA,.NET项目开发难上手?力软敏捷开发框架解君愁
  9. Jmeter逻辑控制器,简单操作
  10. 剑指 Offer 44. 数字序列中某一位的数字