三级界面的代码展示与知识要点
一、作业要求
1.使用字典实现三级菜单功能:
2.直接输入前面数字进入下一级菜单:
3.按B返回上一级,按Q退出:
二、例如:
a、用户进入程序之后:1、北京。2、上海。3、天津)
b、让用户输入一个1显示(1东城,2朝阳,3昌平)
c、用户输入一个3(1沙河,2天通苑)
d、用户在输入1(1华联, 2沙河地铁,小区)
b = back
q = quit
三、作业知识点:
1.if循环
2.for循环,enumerate的用法
3.while循环
4.list的append和del的用法,索引,切片
5.dict的读取keys,values
6、变量的级联赋值
作业的核心代码:
1、使用enumerate函数,把城市编入到列表中,并带有序号:
1 for v,city in enumerate(city_dic.keys(),1): #提取一级界面的key,并打印序号 2 print(v,city) 3 city_list.append(city) #将打印出来的1级界面的城市输入到空列表中
2、判读用户输入的是否为数字,并且判读是否存在列表中:
1 elif i_c_name.isdigit(): #判断是否为数字 2 i_c_name = int(i_c_name) #将数字赋值变量 3 if i_c_name<= len(city_list) and i_c_name > 0: #判断输入的数字是否在列表范围内。如果是就往下继续,如果就退出
3、list的添加(append)、删除(del)、索引
1 for v,city in enumerate(city_dic.keys(),1): #提取一级界面的key,并打印序号 2 print(v,city) 3 city_list.append(city) #把城市名称添加到列表里 4 5 del city_list[:] #删除字典内的元数据,保留空字典,内存不删除
4、变量的级联赋值、list的切片:
1 city_name = city_list[i_c_name-1] #用户输入的序列转换成城市,并且赋值变量,用于下一个循环 2 print("输入的城市名称",city_name) 3 4 xian_list = list(city_dic[city_name]) #按照用户输入的城市,提取地铁线路的列表 5 print("所有的地铁线列表",xian_list) 6 7 xian_name=xian_list[i_x_name-1] #用户输入的地铁线名称赋值,以便第三循环使用。 8 print("输入的地铁线路的名字",xian_name) 9 10 zhan_list=city_dic[city_name][xian_name] #将用户输入的城市名字和线的名字取值遍币车站的列表 11 print("地铁站列表",zhan_list)
正文本:
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # Author:Dong Ye 4 # 参考文献:www.hairuinet.com 5 6 city_dic = { 7 "北京": { 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 counter = 0 42 city_list = [] 43 #xian_list = [] 44 #zhan_list = [] 45 #一级界面展示: 46 while counter < 3: 47 for v,city in enumerate(city_dic.keys(),1): #提取一级界面的key,并打印序号 48 print(v,city) 49 city_list.append(city) #将打印出来的1级界面的城市输入到空列表中 50 print("退出请安q:") 51 print("=========================================") 52 i_c_name = input("请输入城市编号: ").strip() #忽略空格 53 print("=========================================") 54 if i_c_name == 'q' or i_c_name == 'Q': #判断是否为‘q’或‘Q’ 55 exit("退出界面") 56 elif i_c_name.isdigit(): #判断是否为数字 57 i_c_name = int(i_c_name) #将数字赋值变量 58 #city_list[i_c_name-1] in city_dic.keys(): 判断输入的城市是否在1级字典中 59 60 if i_c_name<= len(city_list) and i_c_name > 0: #判断输入的数字是否在列表范围内。如果是就往下继续,如果就退出 61 62 63 city_name = city_list[i_c_name-1] #用户输入的序列转换成城市,并且赋值变量,用于下一个循环 64 print("输入的城市名称",city_name) 65 66 xian_list = list(city_dic[city_name]) #按照用户输入的城市,提取地铁线路的列表 67 print("所有的地铁线列表",xian_list) 68 69 70 #二级界面提取 71 while True: 72 for k,xian in enumerate(xian_list,1): #打印用户输入城市的地铁线路列表,并显示。 73 print(k,xian) 74 #xian_list.append(xian) 75 print("退出请按q: 返回上一层按b:") 76 print("============================================") 77 i_x_name = input("请输入要查询的线路:").strip() 78 print("============================================") 79 if i_x_name == "q" or i_x_name == "Q": #判断是否为‘q’或‘Q’ 80 exit("退出界面") 81 elif i_x_name == "b" or i_x_name =="B": #判断是否为‘b’或‘B’ 82 print("返回上一界面:") 83 #del city_list[ : ] 84 #del xian_list[ : ] 85 break 86 elif i_x_name.isdigit(): #判断是否为数字 87 i_x_name = int(i_x_name) #将用户输入的数字赋值成变量 88 if i_x_name <= len(xian_list) and i_x_name > 0: #判断用户输入的数字是否存在线列表中 89 xian_name=xian_list[i_x_name-1] #用户输入的地铁线名称赋值,以便第三循环使用。 90 print("输入的地铁线路的名字",xian_name) 91 92 zhan_list=city_dic[city_name][xian_name] #将用户输入的城市名字和线的名字取值遍币车站的列表 93 print("地铁站列表",zhan_list) 94 95 96 #三级界面展示: 97 while True: 98 for z,zhan in enumerate(zhan_list,1): #遍币车站列表,并打印。 99 #for z,zhan in enumerate(city_dic[city_list[i_c_name-1]].keys(),1): 100 #for zhan in city_dic[city_list[i_c_name-1]][xian_list[i_x_name-1]]: 101 print(z,zhan) 102 #zhan_list.append(zhan) 103 print("退出请按q: 返回上一层按b:") 104 print("============================================") 105 i_z_zhan = input("请输入您要查询的站点:").strip() 106 print("============================================") 107 108 if i_z_zhan == "q" or i_z_zhan == "Q": #判断是否为‘q’或‘Q’ 109 print("退出界面") 110 exit() 111 elif i_z_zhan == "b" or i_z_zhan == "B": #判断是否为‘b’或‘B’ 112 print("返回上一层") 113 #del zhan_list[:] 114 break 115 116 elif i_z_zhan.isdigit(): #判断用户输入的是否为数字 117 i_z_zhan = int(i_z_zhan) #赋值变量 118 if i_z_zhan <= len(zhan_list) and i_z_zhan>0: #判断用户输入的数字是否存在车站名的列表中 119 #print("站名",city_dic[city_list[i_c_name-1]][xian_list[i_x_name-1]][i_z_zhan-1]) 120 print("输入的站名:",zhan_list[i_z_zhan-1]) 121 print("查询结束") 122 exit() 123 124 else: 125 print("没有您输入的站点,请重新输入") 126 #del zhan_list[:] 127 else: 128 print("输入的有问题,请重新输入") 129 #del zhan_list[:] 130 131 else: 132 print("没有您输入的线路,请重新输入") 133 #del xian_list[:] 134 135 else: 136 print("输入的有问题,请重新输入") 137 #del xian_list[:] 138 139 else: 140 print("您输入的城市不再列表中") 141 del city_list[:] 142 143 144 else: 145 print("输入有误,请重新输入") 146 del city_list[:] 147 counter += 1