作业概述:

写一个三级菜单

实现如下功能:

(1)可依次选择进入各子菜单

(2)在每一级按“b”都可以返回上一级,按“q"都可以退出

流程图:

readme:

简介:    three_menu.py是显示三级菜单的程序主要功能:    显示一级(区域)、二级(省)、三级菜单(市、区),三级菜单再选泽可以显示市区的人口和面积(为了节省时间,随意指定的),在任意级都可以返回上一级,或者退出

三级菜单和市区的人口和面积用字典表示:    China_map={    '华北':{'北京':['东城','西城','朝阳','海淀'],'河北':['保定','邯郸','唐山','海淀']},    '华东':{'上海':['虹桥','徐汇','黄埔','普陀'],'江苏':['南京','苏州','无锡','徐州']},    '华南':{'广东':['深圳','东莞','湛江','佛山'],'海南':['海口','三亚','三沙']}    }    city_district_info={'东城':[1000,2000],'西城':[1001,2001],'朝阳':[1002,2002],'海淀':[1003,2003],'保定':[1004,2004],'邯郸':[1005,2005],                    '唐山':[1006,2006],'海淀':[1007,2007],'虹桥':[1008,2008],'徐汇':[1009,2009],'黄埔':[1010,2010],'黄埔':[1011,2011],'南京':[1012,2012],'苏州':[1013,2013],                    '无锡':[1014,2014],'徐州':[1015,2015],'深圳':[1016,2016],'东莞':[1017,2017],'湛江':[1018,2018],'佛山':[1019,2019],'海口':[1020,2020],                    '三亚':[1021,2021],'三沙':[1022,2022]}

执行方法:    在cmd下进入three_menu.py文件的路径,然后直接执行python three_menu.py即可

代码:
 #coding=utf-8
 import sys
 China_map={
     '华北':{'北京':['东城','西城','朝阳','海淀'],'河北':['保定','邯郸','唐山','海淀']},
     '华东':{'上海':['虹桥','徐汇','黄埔','普陀'],'江苏':['南京','苏州','无锡','徐州']},
     '华南':{'广东':['深圳','东莞','湛江','佛山'],'海南':['海口','三亚','三沙']}
 }
 city_district_info={'东城':[1000,2000],'西城':[1001,2001],'朝阳':[1002,2002],'海淀':[1003,2003],'保定':[1004,2004],'邯郸':[1005,2005],
                     '唐山':[1006,2006],'海淀':[1007,2007],'虹桥':[1008,2008],'徐汇':[1009,2009],'黄埔':[1010,2010],'黄埔':[1011,2011],'南京':[1012,2012],'苏州':[1013,2013],
                     '无锡':[1014,2014],'徐州':[1015,2015],'深圳':[1016,2016],'东莞':[1017,2017],'湛江':[1018,2018],'佛山':[1019,2019],'海口':[1020,2020],
                     '三亚':[1021,2021],'三沙':[1022,2022]}

 #遍历一级菜单
 def one_level_menu():
     error_num=1
     one_level_menu_dict={}
     #print('一级菜单列表:',list(China_map.keys()))

     for i in range(len(list(China_map.keys()))):
         one_level_menu_dict[i]=list(China_map.keys())[i]
     print ('一级菜单dict:',one_level_menu_dict)

     while 1:
         one_menu_choose=input('请选择Region代号;q:退出系统,b:返回上级菜单')
         if one_menu_choose == 'b':
             print('最顶层菜单,无法返回')
         elif one_menu_choose == 'q':
             sys.exit()
         elif one_menu_choose in (str(list(one_level_menu_dict.keys()))):  #list(one_level_menu_dict.keys())取出one_level_menu_dict字典中的所有的key值形成列表
             error_num=1  #输入错误后,如果再输入正确,那么错误数重新计算
             two_level_menu(one_level_menu_dict,one_menu_choose)  #调用二级菜单函数,显示二级菜单
         elif one_menu_choose not in (str(list(one_level_menu_dict.keys()))):
             print('Region代码输入错误,重新输入,第%d次错误' %error_num)
             if error_num < 3:
                 error_num=error_num+1
             else:
                 sys.exit()

 #显示二级菜单
 def two_level_menu(one_level_menu_dict,one_menu_choose):
     error_num=1
     two_level_menu_dict={}
     Region_name=one_level_menu_dict[int(one_menu_choose)]  #区域名字
     print ('选择的区域的名字:',Region_name)
     #print ('二级菜单list:',list(China_map[Region_name].keys()))

     for i in range(len(list(China_map[Region_name].keys()))):
         two_level_menu_dict[i]=list(China_map[Region_name].keys())[i]
     print ('二级菜单dict:',two_level_menu_dict)

     while 1:
         two_menu_choose=input('请选择Province代号;q:退出系统,b:返回上级菜单')
         if two_menu_choose == 'b':  #输入b,退回上级菜单
             #print('bbbb')
             one_level_menu()
         elif two_menu_choose == 'q':  #输入q,退出程序
             sys.exit()
         elif two_menu_choose in (str(list(two_level_menu_dict.keys()))):  #list(one_level_menu_dict.keys())取出one_level_menu_dict字典中的所有的key值形成列表
             error_num=1  #输入错误后,如果再输入正确,那么错误数重新计算
             three_level_menu(one_level_menu_dict,two_level_menu_dict,Region_name,one_menu_choose,two_menu_choose)  #调用三级菜单函数,显示三级菜单
         elif two_menu_choose not in (str(list(two_level_menu_dict.keys()))):
             print('Province代码输入错误,重新输入,第%d次错误' %error_num)
             if error_num < 3:
                 error_num=error_num+1
             else:
                 sys.exit()

 #显示三级菜单
 def three_level_menu(one_level_menu_dict,two_level_menu_dict,Region_name,one_menu_choose,two_menu_choose):
     error_num=1
     three_level_menu_dict={}
     Province_name=two_level_menu_dict[int(two_menu_choose)]  #城市名字
     print ('选择的省的名字:',Province_name)
     #print ('三级菜单list:',list(China_map[Region_name][City_name]))

     for i in range(len(list(China_map[Region_name][Province_name]))):
         three_level_menu_dict[i]=list(China_map[Region_name][Province_name])[i]
     print ('三级菜单dict:',three_level_menu_dict)

     while 1:
         three_menu_choose=input('请选择City-District代号;q:退出系统,b:返回上级菜单')
         if three_menu_choose == 'b':
             two_level_menu(one_level_menu_dict,one_menu_choose)
         elif three_menu_choose == 'q':
             sys.exit()
         elif three_menu_choose in (str(list(three_level_menu_dict.keys()))):
             display_city_distrct_info(one_level_menu_dict,two_level_menu_dict,three_level_menu_dict,Region_name,one_menu_choose,two_menu_choose,city_district_info)
         elif three_menu_choose not in (str(list(three_level_menu_dict.keys()))):
             print('City-District代码输入错误,重新输入,第%d次错误' %error_num)
             if error_num < 3:
                 error_num=error_num+1
             else:
                 sys.exit()

 def display_city_distrct_info(one_level_menu_dict,two_level_menu_dict,three_level_menu_dict,Region_name,one_menu_choose,two_menu_choose,city_district_info):
     error_num=1
     print('美丽的%s欢迎你' %three_level_menu_dict[int(two_menu_choose)])
     city_district_name=three_level_menu_dict[int(two_menu_choose)]
     total_population=city_district_info[three_level_menu_dict[int(two_menu_choose)]][0]
     area=city_district_info[three_level_menu_dict[int(two_menu_choose)]][1]
     msg='''%s简介信息:
 -----------------------
   总人口:%s
   总面积:%d
 ----------End----------''' %(city_district_name,total_population,area)
     print(msg)

     last_menu_choose=input('请选择代号:q:退出系统,b:返回上级菜单')
     if last_menu_choose ==  'q':
         sys.exit()
     elif last_menu_choose == 'b':
         three_level_menu(one_level_menu_dict,two_level_menu_dict,Region_name,one_menu_choose,two_menu_choose)
     else:
         last_again_menu_choose=input('代号输入错误,请选重新输入:q:退出系统,b:返回上级菜单')

 if __name__=='__main__':
     one_level_menu()

day1作业--三级菜单的更多相关文章

  1. python作业三级菜单day1(第一周)

    一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二三级菜单文 ...

  2. python day1 之三级菜单的正确姿势

    看了几个同学有关三级菜单的实现,都是通过一级一级输出,是较为过程的实现.另外如果菜单(树形结构)更多级这样处理起来就比较麻烦了. 可以使用python强大的列表和字典,实现的更优美或简洁一些: 注:复 ...

  3. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  4. 老男孩Day1作业(二):三级菜单

    作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 1)编写思路 编 ...

  5. python学习,day1作业:设计一个三级菜单

    设计一个三级菜单,要求能够下钻,能够推出,比较笨的方法 # coding=utf-8 # Author: RyAn Bi data = { 'beijing':{ 'changping':{ 'wud ...

  6. 我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)

    作业二:三级菜单 三级菜单 可一次进入各个子菜单 思路: 这个题看似不难,难点在于三层循环的嵌套,我的思路就是通过flag的真假来控制每一层的循环的,简单来说就是就是通过给每一层循环一个单独的布尔变量 ...

  7. 老男孩python学习之作业二---三级菜单

    因为之前花力气完成了购物小程序的作业 现在做这个三级菜单简直是so easy!! 1.显示省级菜单 2.交互,提示用户输入要查看的省份(退出e) 2.1.用户正确输入列表中的省份 3.显示市级菜单 3 ...

  8. day1作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

  9. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

随机推荐

  1. (zhuan)Python 虚拟环境:Virtualenv

    Python 虚拟环境:Virtualenv zhuanzi: http://liuzhijun.iteye.com/blog/1872241 virtualenv virtualenv用于创建独立的 ...

  2. eclipse中jre system library ,web app libraries,referenced libraries,user libraries

    在eclipse ide中进行开发时,为了方面jar的管理用了user libraries,但是遇到了一些问题,对于其中jre system library ,web app libraries,re ...

  3. jquery跨域Ajax请求

    sonp原理: 首先在客户端注册一个callback, 然后把callback的名字传给服务器. 此时,服务器先生成 json 数据.然后以 javascript 语法的方式,生成一个function ...

  4. C++ list size()所想到的事情

      effective STL 某个Item里重点提出了 list.size()是一个O(n)的效率  当时只是记下来了  后面看了csdn有人在实际工程上遇到坑了  我近来闲来无事 把STL的lis ...

  5. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  6. MySQL 配置

    MySQL 配置 1.服务启动: (1)使用 service 启动:service mysqld start (2)使用 mysqld 脚本启动:/etc/inint.d/mysqld start ( ...

  7. 获取select标签选中状态 的label的值。

    <select name="procode" onchange="alert(this.options[this.selectedIndex].text)" ...

  8. 【转载】Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_install和Pip.不过,我没有细 ...

  9. 灰色蓝色系简洁自适应登录HTML页面

    自己写了一个简介的登录页面,页面背景为灰色,居中为登录框,登录面板为半透明效果,整体十分美观,登录按钮有JS效果.自己感觉还不错,拿出来分享一下. 页面效果图 源码下载链接:http://files. ...

  10. hiho一下十六周 RMQ-ST算法

    RMQ-ST算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当 ...