三级界面的代码展示与知识要点

 

 

一、作业要求
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

 

posted @ 2017-12-11 15:50  风之岚翔  阅读(851)  评论(0编辑  收藏  举报