python三级菜单的实现
一、作业要求
1.使用字典实现三级菜单功能
2.直接输入前面数字进入下一级菜单
3.按B返回上一级,按Q退出
二、需要知识点
1.if循环
2.for循环,enumerate的用法
3.while循环
4.list的append和del的用法,索引,切片
5.dict的读取keys,values
\033[31;1m 内容 \033[1m 是给内容加颜色的
三、实现思路及使用的代码解析
1.读取字典的keys是一个列表,所以使用for循环读取字典第一级的keys,并打印出来
for city in china_ditie.keys(): print(city)
2.需要在前面加上编号,使用enumerate自动编号,并且把打印的城市名称加入到列表中
for v,city in enumerate(china_ditie.keys(),1):#循环输出字典中的城市 print(v,city)#打印城市列表并编号 city_list.append(city)#把城市名城加入一个列表里面
3.让用户输入编号,如果不是数字,提示错误,如果输入数字不在里面也提示错误,让重新输入
if c_city.isdigit():#判断输入是否为数字,数字转换成int类型 c_city = int(c_city) if c_city <= len(city_list) and c_city >0:#判断输入编号是否存在
4.如果数字存在的话就打印选择的对应的values 的keys ,因为我们要实现的是数字,所以我们把一级菜单存入了一个列表中,而且也知道了它的索引v-1,打印即可。
for x,xian in enumerate(china_ditie[city_list[c_city-1]].keys(),1):#循环城市下地铁线路名称 print(x,xian)#打印线路名称 xian_list.append(xian)#将线路加入到线路列表中
5.注意输入退出和b的对应级别,每层需要加入循环才可以实现返回上一级别,python是需要缩进的。
6.每次返回记得将列表的数据全部清空
del city_list[:] # 删除城市列表内所有数据 del xian_list[:] # 删除线路列表内的数据
四、扩谱图
四、作业代码
1 #!/usr/bin/env python 2 # -*- coding=utf-8 -*- 3 # From Hairui 4 # python3 5 6 7 china_ditie = { 8 "北京": { 9 "一号线": ["四惠", "大望路", "天安门", "西单"], 10 11 "二号线": ["北京站", "朝阳门", "东直门", "西直门"], 12 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 import time 43 start = True 44 city_list = [] 45 xian_list = [] 46 print("\033[31;1m欢迎访问地铁查询系统\033[1m".center(40,"=")) 47 while start: 48 print("".center(36,"=")) 49 for v,city in enumerate(china_ditie.keys(),1):#循环输出字典中的城市 50 print(v,city)#打印城市列表并编号 51 city_list.append(city)#把城市名城加入一个列表里面 52 print("退出 \033[31;1mq\033[1m")#提醒信息退出按Q 53 print("".center(36,"="))#分隔符 54 c_city = input("请选择你要查询的城市编号:")#输入城市编号 55 print("".center(36, "=")) # 分割线 56 if c_city == "q" or c_city == "Q":#打印城市列表选择Q退出 57 break 58 if c_city.isdigit():#判断输入是否为数字,数字转换成int类型 59 c_city = int(c_city) 60 if c_city <= len(city_list) and c_city >0:#判断输入编号是否存在 61 while start: 62 # if city_list[c_city-1] in china_ditie.keys():#判断输入城市是否在字典中 63 for x,xian in enumerate(china_ditie[city_list[c_city-1]].keys(),1):#循环城市下地铁线路名称 64 print(x,xian)#打印线路名称 65 xian_list.append(xian)#将线路加入到线路列表中 66 print("返回上一级\033[31;1mb\033[1m,退出 \033[31;1mq\033[1m") 67 print("".center(36, "="))#分割线 68 c_xian = input("请选择你要查询的线路:")#让用户输入查询的线路 69 print("".center(36, "=")) # 分割线 70 if c_xian == "b" or c_xian == "B": # 退出当前循环,返回上一级 71 del city_list[:] # 删除城市列表内所有数据 72 del xian_list[:] # 删除县列表内的数据 73 break 74 elif c_xian == "q" or c_xian == "Q": # 退出程序 75 start = False 76 elif c_xian.isdigit():#输入的数字变成的int类型 77 c_xian = int(c_xian) 78 if c_xian <= len(xian_list) and c_xian > 0:#判断输入的是否是在列表长度内 79 while start: 80 for name in china_ditie[city_list[c_city-1]][xian_list[c_xian-1]]:#循环字典中地铁站的名称 81 print(name)#打印字典中内容 82 print("返回上一级 \033[31;1mb\033[1m ,退出 \033[31;1mq\033[1m") 83 print("".center(36, "="))#分割线 84 c_n = input("请输入你需要的操作:") 85 if c_n == "b" or c_n == "B": 86 del xian_list[:] 87 break 88 elif c_n == "q" or c_n == "Q":#退出程序 89 start = False 90 else: 91 print("\033[31;1m输入错误请重新输入,退出请按\033[31;1mq\033[1m!\033[1m") 92 time.sleep(1) 93 else: 94 del xian_list[:] 95 print("\033[31;1m没有此线路或者输入错误!\033[1m") 96 time.sleep(1) 97 else: 98 del xian_list[:] 99 print("\033[31;1m输入错误,请输数字!\033[1m") 100 time.sleep(1) 101 else: # 输入错误提示并刷新城市列表 102 del city_list[:] 103 print("\033[31;1m没有此城市或者输入错误!\033[1m") 104 time.sleep(1)#等待时间 105 else:#输入错误提示并刷新城市列表 106 del city_list[:] 107 print("\033[31;1m没有此城市或者输入错误!\033[1m") 108 time.sleep(1)
From Hairui
转载请注明出处!谢谢