zoukankan      html  css  js  c++  java
  • 三级菜单

    这个三级菜单费了很长时间,写起来很吃力,在老师讲之前,思路都错了,使用了字典套字典然后再套字典的方式,所以获取最里层的元素就很困难,一直被困在这里。听了老师的课,按照老师的思路,主要是数据的存储结构,然后自己写了控制逻辑。本来打算放弃了,因为很多同学都看视频教程都看到后面去了,自己很着急。但是我还是坚持了下来,最终完成了这个三级菜单的功能。值得自豪一下,自己完成了,I got it。下面将我的代码附上来。

    首先是func.py部分的代码:

     1 #!/usr/bin/env python
     2 #-*-coding:utf-8-*-
     3 #Created on 2016-6-19下午9:49:56
     4 #author: Administrator
     5 
     6 #定义省份列表
     7 def get_province_list():
     8     pro_list = (
     9                 {'pid':'1','pname':'四川省'},
    10                 {'pid':'2','pname':'云南省'},
    11                 {'pid':'3','pname':'河北省'},
    12                 {'pid':'4','pname':'山西省'},
    13                 {'pid':'5','pname':'辽宁省'},
    14     )
    15     return pro_list
    16 
    17 
    18 #定义城市列表函数
    19 def get_city_list():
    20     city_list =(
    21                 ({'cid':'1-1','cname':'成都市'},{'cid':'1-2','cname':'自贡市'},{'cid':'1-3','cname':'攀枝花市'},{'cid':'1-4','cname':'泸州市'},{'cid':'1-5','cname':'德阳市'},),
    22                 ({'cid':'2-1','cname':'昆明市'},{'cid':'2-2','cname':'曲靖市'},{'cid':'2-3','cname':'玉溪市'},{'cid':'2-4','cname':'保山市'},{'cid':'2-5','cname':'昭通市'},),
    23                 ({'cid':'3-1','cname':'石家庄市'},{'cid':'3-2','cname':'唐山市'},{'cid':'3-3','cname':'秦皇岛市'},{'cid':'3-4','cname':'邯郸市'},{'cid':'3-5','cname':'邢台市'},),
    24                 ({'cid':'4-1','cname':'太原市'},{'cid':'4-2','cname':'大同市'},{'cid':'4-3','cname':'阳泉市'},{'cid':'4-4','cname':'长治市'},{'cid':'4-5','cname':'晋城市'},{'cid':'4-6','cname':'朔州市'},),
    25                 ({'cid':'5-1','cname':'沈阳市'},{'cid':'5-2','cname':'大连市'},{'cid':'5-3','cname':'鞍山市'},{'cid':'5-4','cname':'抚顺市'},{'cid':'5-5','cname':'本溪市'},),
    26     )
    27     return city_list
    28 
    29 #定义区域列表
    30 def get_area_list():
    31     area_list = (
    32                 ({'aid':'1-1-1','aname':'市辖区'},{'aid':'1-1-2','aname':'锦江区'},{'aid':'1-1-3','aname':'青羊区'},{'aid':'1-1-4','aname':'金牛区'},{'aid':'1-1-5','aname':'武侯区'}),
    33                 ({'aid':'1-2-1','aname':'市辖区'},{'aid':'1-2-2','aname':'自流井区'},{'aid':'1-2-3','aname':'贡井区'},{'aid':'1-2-4','aname':'大安区'},{'aid':'1-2-5','aname':'沿滩区'}),
    34                 ({'aid':'1-3-1','aname':'市辖区'},{'aid':'1-3-2','aname':'东区'},{'aid':'1-3-3','aname':'西区'},{'aid':'1-3-4','aname':'仁和区'},{'aid':'1-3-5','aname':'米易县'},{'aid':'1-3-6','aname':'盐边县'}),
    35                 ({'aid':'1-4-1','aname':'市辖区'},{'aid':'1-4-2','aname':'江阳区'},{'aid':'1-4-3','aname':'纳溪区'},{'aid':'1-4-4','aname':'龙马潭区'}),
    36                 ({'aid':'1-5-1','aname':'市辖区'},{'aid':'1-5-2','aname':'旌阳区'},{'aid':'1-5-3','aname':'中江县'},{'aid':'1-5-4','aname':'罗江县'}),
    37                 ({'aid':'2-1-1','aname':'市辖区'},{'aid':'2-1-2','aname':'五华区'},{'aid':'2-1-3','aname':'盘龙区'},{'aid':'2-1-4','aname':'官渡区'},{'aid':'2-1-5','aname':'西山区'}),
    38                 ({'aid':'2-2-1','aname':'市辖区'},{'aid':'2-2-2','aname':'麒麟区'},{'aid':'2-2-3','aname':'马龙区'},{'aid':'2-2-4','aname':'陆良区'},{'aid':'2-2-5','aname':'师宗区'}),
    39                 ({'aid':'2-3-1','aname':'市辖区'},{'aid':'2-3-2','aname':'红塔区'},{'aid':'2-3-3','aname':'江川县'},{'aid':'2-3-4','aname':'澄江县'},{'aid':'2-3-5','aname':'通海县'}),
    40                 ({'aid':'2-4-1','aname':'市辖区'},{'aid':'2-4-2','aname':'隆阳区'},{'aid':'2-4-3','aname':'施甸县'},{'aid':'2-4-4','aname':'腾冲县'},{'aid':'2-4-5','aname':'龙陵县'}),
    41                 ({'aid':'2-5-1','aname':'市辖区'},{'aid':'2-5-2','aname':'昭阳区'},{'aid':'2-5-3','aname':'鲁甸县'},{'aid':'2-5-4','aname':'巧家县'},{'aid':'2-5-5','aname':'盐津县'}),
    42                 ({'aid':'3-1-1','aname':'市辖区'},{'aid':'3-1-2','aname':'长安区'},{'aid':'3-1-3','aname':'桥东区'},{'aid':'3-1-4','aname':'桥西区'},{'aid':'3-1-5','aname':'新华区'}),
    43                 ({'aid':'3-2-1','aname':'市辖区'},{'aid':'3-2-2','aname':'路南区'},{'aid':'3-2-3','aname':'路北区'},{'aid':'3-2-4','aname':'古冶区'},{'aid':'3-2-5','aname':'开平区'}),
    44                 ({'aid':'3-3-1','aname':'市辖区'},{'aid':'3-3-2','aname':'海港区'},{'aid':'3-3-3','aname':'山海关区'},{'aid':'3-3-4','aname':'北戴河区'},{'aid':'3-3-5','aname':'昌黎县'}),
    45                 ({'aid':'3-4-1','aname':'市辖区'},{'aid':'3-4-2','aname':'邯山区'},{'aid':'3-4-3','aname':'丛台区'},{'aid':'3-4-4','aname':'复兴区'},{'aid':'3-4-5','aname':'邯郸县'}),
    46                 ({'aid':'3-5-1','aname':'市辖区'},{'aid':'3-5-2','aname':'桥东区'},{'aid':'3-5-3','aname':'桥西区'},{'aid':'3-5-4','aname':'邢台县'},{'aid':'3-5-5','aname':'临城县'}),
    47                 ({'aid':'4-1-1','aname':'市辖区'},{'aid':'4-1-2','aname':'小店区'},{'aid':'4-1-3','aname':'迎泽区'},{'aid':'4-1-4','aname':'杏花岭区'},{'aid':'4-1-5','aname':'尖草坪区'}),
    48                 ({'aid':'4-2-1','aname':'市辖区'},{'aid':'4-2-2','aname':'城区'},{'aid':'4-2-3','aname':'矿区'},{'aid':'4-2-4','aname':'南郊区'},{'aid':'4-2-5','aname':'新荣区'}),
    49                 ({'aid':'4-3-1','aname':'市辖区'},{'aid':'4-3-2','aname':'城区'},{'aid':'4-3-3','aname':'矿区'},{'aid':'4-3-4','aname':'郊区'},{'aid':'4-3-5','aname':'平定县'}),
    50                 ({'aid':'4-4-1','aname':'市辖区'},{'aid':'4-4-2','aname':'城区'},{'aid':'4-4-3','aname':'郊区'},{'aid':'4-4-4','aname':'长治县'},{'aid':'4-4-5','aname':'襄垣县'}),
    51                 ({'aid':'4-5-1','aname':'市辖区'},{'aid':'4-5-2','aname':'城区'},{'aid':'4-5-3','aname':'沁水县'},{'aid':'4-5-4','aname':'阳城县'},{'aid':'4-5-5','aname':'陵川县'}),
    52                 ({'aid':'4-6-1','aname':'市辖区'},{'aid':'4-6-2','aname':'朔城区'},{'aid':'4-6-3','aname':'平鲁区'},{'aid':'4-6-4','aname':'山阴县'},{'aid':'4-6-5','aname':'应县'}),
    53                 ({'aid':'5-1-1','aname':'市辖区'},{'aid':'5-1-2','aname':'和平区'},{'aid':'5-1-3','aname':'沈河区'},{'aid':'5-1-4','aname':'大东区'},{'aid':'5-1-5','aname':'皇姑区'}),
    54                 ({'aid':'5-2-1','aname':'市辖区'},{'aid':'5-2-2','aname':'中山区'},{'aid':'5-2-3','aname':'西岗区'},{'aid':'5-2-4','aname':'沙河口区'},{'aid':'5-2-5','aname':'甘井子区'}),
    55                 ({'aid':'5-3-1','aname':'市辖区'},{'aid':'5-3-2','aname':'铁东区'},{'aid':'5-3-3','aname':'铁西区'},{'aid':'5-3-4','aname':'立山区'},{'aid':'5-3-5','aname':'千山区'}),
    56                 ({'aid':'5-4-1','aname':'市辖区'},{'aid':'5-4-2','aname':'新抚区'},{'aid':'5-4-3','aname':'东洲区'},{'aid':'5-4-4','aname':'望花区'},{'aid':'5-4-5','aname':'顺城区'}),
    57                 ({'aid':'5-5-1','aname':'市辖区'},{'aid':'5-5-2','aname':'平山区'},{'aid':'5-5-3','aname':'溪湖区'},{'aid':'5-5-4','aname':'明山区'},{'aid':'5-5-5','aname':'南芬区'}),
    58                  )
    59     return area_list
    60 
    61 def show_pro():
    62     pro_list = get_province_list()
    63     for province in pro_list:         #province是元组中的一个字典,因此具有key和value
    64         print(province['pid'],province['pname'])
    65         
    66 #判断选择的省份是否在已有省份中的函数
    67 def is_choose_province_exsit(pid):            
    68     for pro_list in get_province_list():
    69         if pid == pro_list['pid']:
    70             return True
    71     return False
    72 
    73 def is_choose_city_exsit(choose_pid,choose_cid):
    74     for city_list in get_city_list():
    75         for city in city_list:
    76             if choose_pid+'-'+ choose_cid == city['cid']:
    77                 return True
    78     return False
    79 
    80 #显示所选编号的省下对应的城市名称函数            
    81 def show_city(choosed_pid):
    82     for city_list in get_city_list():                 #ciyt_list为子元组
    83         for city in city_list:                        #city为子元组里面的字典
    84             pid,cid = city['cid'].split('-')          #通过字符串的split()方法,将数据中的cid划分为省编号pid和城市编号cid
    85             if pid == choosed_pid:                    #加上判断条件,打印对应序号下的省包含的城市名称
    86                 print(cid,city['cname'])
    87 
    88 def show_area(choose_pid,choose_cid):
    89     for area_list in get_area_list():
    90         for area in area_list:
    91             pid,cid,aid = area['aid'].split('-')
    92             if pid == choose_pid and cid == choose_cid:
    93                 print(aid,area['aname'])
    func.py

    接着上主程序部分代码:

     1 #!/usr/bin/env python
     2 #-*-coding:utf-8-*-
     3 #Created on 2016-6-19下午7:37:31
     4 #author: Administrator
     5 
     6 from func import *
     7 
     8 if __name__ == '__main__':
     9     pro_flag = True                       #定义一个标识,用于控制程序是否退出    
    10     while pro_flag:                       #开始无限循环,判断输入,直到后面程序设置循环标识为False,退出程序
    11         show_pro()
    12         choose_pid = input('请输入省份编号:').strip()
    13         if not choose_pid.isdigit():
    14             if choose_pid == 'exit':
    15                 pro_flag = False
    16             else:
    17                 print('输入错误,请重新输入.')
    18                 continue
    19         if is_choose_province_exsit(choose_pid):
    20             city_flag = True
    21             while city_flag:
    22                 show_city(choose_pid)
    23                 choose_cid = input('请输入城市编号:').strip()
    24                 if not choose_cid.isdigit():       #判断用户输入是否为数字,如果不为数字,看是否为quit或者exit中的一个,根据用户输入不同,进行不同操作
    25                     if choose_cid == 'quit':
    26                         break
    27                     elif choose_cid == 'exit':
    28                         pro_flag = False
    29                         break
    30                     else:
    31                         print('输入错误,请重新输入.')
    32                         continue
    33                 while is_choose_city_exsit(choose_pid,choose_cid):
    34                     show_area(choose_pid, choose_cid)
    35                     choose =input('返回上一级请输入"quit",直接退出请输入"exit"').strip()
    36                     if choose == 'quit':
    37                         break
    38                     elif choose == 'exit':
    39                         city_flag = False
    40                         pro_flag = False
    41                         break
    42                     else:
    43                         print('输入错误,请重新输入:')
    44                 else:
    45                     print('输入错误,请重新输入:')
    46                     continue
    47         else:
    48             print('输入错误,请重新输入.')      
    Menu.py

    程序功能是实现了,但是与老师的代码比较起来,繁琐,不够简洁,效率肯定更加低下,还需要好好努力,多写,多看,多思考,一定会提高的。为自己加油!

  • 相关阅读:
    使用turtle库绘制一个叠加等边三角形
    使用turtle库绘制图形
    tar命令常用参数讲解
    elasticsearch 中geo point地理位置数据类型
    count(*)和count(1)的sql性能分析
    别再if/else走天下了
    正则表达式 匹配0次1次或者无限次
    linux shell 字符串操作(长度,查找,替换)
    linux expect工具使用
    mongodb分片balance
  • 原文地址:https://www.cnblogs.com/chenxiforever/p/5611970.html
Copyright © 2011-2022 走看看