一、作业要求

  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[:]  # 删除线路列表内的数据



 

 

四、扩谱图

三级菜单 python 三级菜单代码_分割线

四、作业代码




三级菜单 python 三级菜单代码_分割线_02

三级菜单 python 三级菜单代码_数据_03

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)


完美实现