python第四天 三级菜单新思路
今天是一个坎,在做三级菜单时卡住了,因为想要简洁的代码,就要用到递归函数,卡的不要不要的!不过最后在同学老师的提点帮助下,还是解决了!
2017-5-10发现之前的代码有BUG今天 修改了!
作业要求:
三级菜单:
1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 菜单数据保存在文件中
文件操作还没有学到,暂时做到1,2两点,第3点明后天补上!
照旧,先上一下流程图:
详细代码:
#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
menu_file=open("menu.txt",'r',encoding='utf-8')#打开菜单文件
info=eval(menu_file.readline())#转换菜单文件中的字符串
global conut,_tab,exit_flag _tab='\t\t' exit_flag = True
def menu_open(info):#递归函数 传入下一层菜单
global exit_flag,conut#声明全局变量
exit_flag=True#先为真
while exit_flag:
conut+=1
_tab2=_tab.expandtabs(tabsize=(conut*3))#为了增加菜单的可读性,按层级来加tab键
for i in info:
print(_tab2,i)
if conut==4:
name=input("当前为第\033[35;1m%s\033[0m是最后一层 按B/b返回<<< 按Q/q退出:"%conut)
name=name.strip()
if name=='b' or name=='B':
conut-=2#因数进行循环就加一,所以需要减2
break
elif name=='Q' or name=='q':
print("你已经退出菜单!")
exit_flag=False
break
else:
conut-=1
print("你输入的目录不存在!")
continue
if conut<4:#判断菜单层级不是最底层加一
name=input("当前为第 \033[32;1m%s\033[0m 层,请输入名称进入下一层>>> 按B/b返回<<< 按Q/q退出:"% conut)
name=name.strip()
if name=='b' or name=='B':
conut-=2#因数进行循环就加一,所以需要减2
break
elif name=='Q' or name=='q':
print("你已经退出菜单!")
exit_flag=False
break
elif name in info:#如果存在并不是最后一层则调用函数
menu_open(info[name])
else:
conut-=1
print("你输入的目录不存在!")
continue while exit_flag:
for i in info:
print(i)
conut=1
name=input("当前为第\033[32;1m %s\033[0m 层,请输入名称进入下一层>>> 按Q/q退出:"%conut)
name=name.strip()
if name=='Q' or name=='q':
print("你已经退出菜单!")
exit_flag=False
elif name in info: menu_open(info[name])
else:
print("你输入的目录不存在!")
continue
菜单内容比较少,将就着吧,回头有空再让它丰满起来!
#以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。#QQ:124111294欢迎交流py
#三级菜单
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
} # while not exit_flag <如果条件为假执行循环>
# for k in current_layer <条件循环>
# print(k) <打印>
# input<输入>
# .strip()#strip([chars]) <删除字符串前边和后边所有的空格,chars参数可以指定删除的字符,可选>
# if <条件判断>
# layers.pop() <删除>
# elif choice not in <条件判断>
# continue <跳出本次循环,重新循环>
# else <否则,当if条件不成立时执行>
# .append<附加>
# choice<选择> exit_flag = False
current_layer = menu layers = [menu] while not exit_flag:
for k in current_layer:
print(k)
choice = input(">>:").strip()
if choice == "b":
current_layer = layers[-1]
#print("change to laster", current_layer)
layers.pop()
elif choice not in current_layer:continue
else:
layers.append(current_layer)
current_layer = current_layer[choice] #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎交流py
三级菜单新思路
python第四天 三级菜单新思路的更多相关文章
- Python进阶实战之三级菜单
目录 一.Python进阶实战之三级菜单 1.1 面条版 1.2 文艺青年版 一.Python进阶实战之三级菜单 打印省.市.县三级菜单 可返回上一级 可随时退出程序 1.1 面条版 menu = { ...
- Python学习之编写三级菜单(Day1,作业二)
作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...
- python基础之省份三级菜单
菜单 menu = { #定义一个字典 '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家 ...
- Python实现简单的三级菜单
话不多说,直奔代码 # 要处理的字典 dic1 = { '北京': { '东城': { '沙河': ['沙河机场', '链家'], '天通苑': ['北方明珠', '天通尾货'] }, '朝阳': { ...
- python入门编程之三级菜单编程
菜单实现功能输入一层显示下一层菜单不论在哪层输入b返回上一层不论在哪层输入q退出菜单此代码通过利用字典的知识可以实现_Author_ = 'jc'data = { '北京':{ '昌平':{ '沙河' ...
- Python之路-(三级菜单)
data = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youk ...
- Python学习5,三级菜单实例
_author_ = "Happyboy" data = { '北京':{ "昌平":{ "沙河":["Happyboy" ...
- Python学习之字典--三级菜单
效果图: 实现代码: dic = { '人物':{ '帽子':{'前年玄铁帽'}, '武器':{'屠龙宝刀'} }, '属性':{ '力量':{35}, '敏捷':{66} }, '任务':{ '主线 ...
- python三级菜单的实现
一.作业要求 1.使用字典实现三级菜单功能 2.直接输入前面数字进入下一级菜单 3.按B返回上一级,按Q退出 二.需要知识点 1.if循环 2.for循环,enumerate的用法 3.while循环 ...
随机推荐
- SQL 必知必会·笔记<15>创建和操纵表
创建表的两种办法: 使用DBMS 提供的交互式创建和管理数据库表的工具: 直接用SQL 语句创建. 表创建基础 创建表示例: CREATE TABLE Products ( prod_id ) NOT ...
- EntityFramework使用总结(与MVC4.0实现CURD操作)
本篇文介绍一下Entity Framework Code First的简单用法,通过一个学生信息的增删查改来学习Entity Framework的使用及与存储过程的交互.我也是学习Entity Fra ...
- vuex的使用总结
一.安装命令 npm install vuex 二.在src文件目录下新建一个名为store的文件夹,为方便引入并在store文件夹里新建一个index.js,里面的内容如下: import V ...
- 高并发连接导致打开文件过多:java.io.IOException: Too many open files 解决方法
用 CentOS 做 API 接口服务器供其他终端调用时,并发量高会报错:java.io.IOException: Too many open files. 其原因是在 Linux 下默认的Socke ...
- shell的编程结构体(函数、条件结构、循环结构)
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 shell函数 在shell中,函数可以被当作命令一样 ...
- 牛刀小试MySQL--GTID
GTID的概念 何为GITD GTID(global transaction identifier)是全局事务标识符,在MySQL5.6版本中作为一个超级特性被推出.事务标识不仅对于Master(起源 ...
- java中Map集合的理解
Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.jdk1.0.效率低. |--HashMap:底层是哈希表数据结构,允许使用 null 值和 ...
- IOS中input键盘事件支持的解决方法
欢迎大家去我的网站详细查看http://genghongshuo.com.cn/ IOS中input键盘事件keyup.keydown.等支持不是很好, 用input监听键盘keyup事件,在安卓手机 ...
- Mongodb的基本语法
前段时间工作上面由于没有多少事所以玩了玩mongodb,学习了它的基本语法,然后现在在这里做一个简单的总结. 1.我是在win平台上面,启动的话比较麻烦,所以我就简单的把启动过程做了个批处理文件 启动 ...
- 【Java并发编程】11、volatile的使用及其原理
一.volatile的作用 在<Java并发编程:核心理论>一文中,我们已经提到过可见性.有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果 ...