博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python全栈开发---三级菜单
阅读量:5262 次
发布时间:2019-06-14

本文共 5514 字,大约阅读时间需要 18 分钟。

给大家整理一下三级菜单的三种实现方法:

第一种 普通版 (代码较多,但是逻辑清晰)

1 menu = { 2     '北京': { 3         '海淀': { 4             '五道口': { 5                 'soho': {}, 6                 '网易': {}, 7                 'google': {} 8             }, 9             '中关村': {10                 '爱奇艺': {},11                 '汽车之家': {},12                 'youku': {},13             },14             '上地': {15                 '百度': {},16             },17         },18         '昌平': {19             '沙河': {20                 '老男孩': {},21                 '北航': {},22             },23             '天通苑': {},24             '回龙观': {},25         },26         '朝阳': {},27         '东城': {},28     },29     '上海': {30         '闵行': {31             "人民广场": {32                 '炸鸡店': {}33             }34         },35         '闸北': {36             '火车战': {37                 '携程': {}38             }39         },40         '浦东': {},41     },42     '山东': {},43 }44 while True:45     for k in menu:46         print(k)47     choice = input('>:').strip()48     if not choice:49         continue50     if choice in menu:51         while True:52             for k in menu[choice]:53                 print(k)54             choice2 = input('>>:').strip()55             if not choice2:56                 continue57             if choice2 in menu[choice]:58                 while True:59                     for k in menu[choice][choice2]:60                         print(k)61                     choice3 = input('>>>:').strip()62                     if not choice3:63                         continue64                     if choice3 in menu[choice][choice2]:65                         print('go to', menu[choice][choice2][choice3])66                     elif choice3 == 'b':67                         break68                     elif choice3 == 'q':69                         exit('bye.')70                     else:71                         print('节点不存在')72             elif choice2 == 'b':73                 break74             elif choice2 == 'q':75                 exit('bye.')76             else:77                 print('节点不存在')78 79     else:80         print('节点不存在')
View Code

 

第二种 简洁版(代码相对较少,只有一个while循环)

1 # -*- coding:utf-8 -*- 2 menu = { 3     '北京': { 4         '海淀': { 5             '五道口': { 6                 'soho': {}, 7                 '网易': {}, 8                 'google': {} 9             },10             '中关村': {11                 '爱奇艺': {},12                 '汽车之家': {},13                 'youku': {},14             },15             '上地': {16                 '百度': {},17             },18         },19         '昌平': {20             '沙河': {21                 '老男孩': {},22                 '北航': {},23             },24             '天通苑': {},25             '回龙观': {},26         },27         '朝阳': {},28         '东城': {},29     },30     '上海': {31         '闵行': {32             "人民广场": {33                 '炸鸡店': {}34             }35         },36         '闸北': {37             '火车战': {38                 '携程': {}39             }40         },41         '浦东': {},42     },43     '山东': {},44 }45 gradually = []   # #将上一层key值放入到列表中46 menu_list = menu47 while True:48     for k in menu_list:49         print(k)50     choose = input('>:').strip()51     if not choose:52         continue53     if choose in menu_list:54         gradually.append(menu)  # 将当前的状态放入列表中55         menu_list = menu_list[choose]56         if len(menu_list) == 0:57             print('这里面已经没有东西了,请按“b”返回上级或按“q”退出')58     elif choose == 'b':59         if len(gradually) == 0:60             print('已经是顶层!')61         else:62             menu_list = gradually.pop() # 删除最后的数据实现返回上一层的功能63 64     elif choose == 'q':65         exit('退出成功.')66     else:67         print('您输入的内容不存在,请按列表内容输入')
View Code

 

第三种  递归版 (代码简洁,先对来说思路较难)

这里用到了递归函数,先来简单说一下递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归函数特性:

    1. 必须有一个明确的结束条件;
    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3. 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
    4. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
# 例如:1加到100的实现def func(n):    if n == 1:        return 1    return n + func(n - 1)print(func(100))

 下面看一下三级菜单的递归版

1 menu = { 2     '北京': { 3         '海淀': { 4             '五道口': { 5                 'soho': {}, 6                 '网易': {}, 7                 'google': {} 8             }, 9             '中关村': {10                 '爱奇艺': {},11                 '汽车之家': {},12                 'youku': {},13             },14             '上地': {15                 '百度': {},16             },17         },18         '昌平': {19             '沙河': {20                 '老男孩': {},21                 '北航': {},22             },23             '天通苑': {},24             '回龙观': {},25         },26         '朝阳': {},27         '东城': {},28     },29     '上海': {30         '闵行': {31             "人民广场": {32                 '炸鸡店': {}33             }34         },35         '闸北': {36             '火车战': {37                 '携程': {}38             }39         },40         '浦东': {},41     },42     '山东': {},43 }44 45 46 def menu_list(a):47     for k in a:48         print(k)49     choose = input('请按列表内容输入(按q退出,按b返回)>:').strip()50     if choose in a:51         menu_list(a[choose])52     elif choose == 'q':53         exit('退出成功.')54     elif choose == 'b':55         if a != menu:56             return57         else:58             print('已经是顶层啦!')59             menu_list(a)60     else:61         print('您输入的内容不存在,请按列表内容输入')62     menu_list(a)63 64 65 menu_list(menu)

 

转载于:https://www.cnblogs.com/zg-wolf/p/8875344.html

你可能感兴趣的文章
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
latex tree
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
css3学习01
查看>>
【USACO】 奶牛会展
查看>>
ActiveMQ笔记之点对点队列(Point-to-Point)
查看>>
继承和多态
查看>>
Dijkstra+计算几何 POJ 2502 Subway
查看>>
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>
希尔排序法(缩小增量法)
查看>>
PHP编程基础学习(一)——数据类型
查看>>
MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询
查看>>
NPOI处理Word文本中上下角标
查看>>
Android笔记 Handler
查看>>