怎么编写多级菜单?

要求:编写多级菜单

1.三级菜单

2.可依次进入各子菜单

3.菜单能够回到上一级

4.用到知识点:字典、列表、多层循环、函数

 

1)编写思路

编写思路参考下面GitHub链接中的流程图

作业/Day1_作业_多级菜单流程图.png

2)具体实现

 1 # -*- coding:utf-8 -*-  2   3  # Author:Chuixin Zeng  4   5  # 使用字典保存省份、市、县列表  6  # 这是一个多级的字典,可以通过for查询每一个级别的信息,级别:省份、市、区  7   8  _country_dict = {  9     '1.河南省': { 10         '1.郑州市': {'1.金水区': ['区号100', '邮编400000'], '2.中原区': ['区号101', '邮编400001'], '3.二七区': ['区号102', '邮编400002']}, 11         '2.洛阳市': {'1.老城区': ['区号200', '邮编200000'], '2.洛龙区': ['区号201', '邮编200001'],  '3.西工区': ['区号203', '邮编200002']}, 12          '3.信阳市': {'1.浉河区': ['区号300', '邮编300000'],  '2.平桥区': ['区号301', '邮编300001'], '3.固始区': ['区号203', '邮编200002']} 13     }, 14       '2.河北省': { 15         '1.石家庄市': {'1.长安区': ['区号400', '邮编500000'],   '2.新华区': ['区号401', '邮编500001'], '3.桥西区': ['区号402', '邮编500002']}, 16           '2.保定市': {'1.竞秀区': ['区号500', '邮编600000'], '2.莲池区': ['区号501', '邮编600001'],   '3.满城区': ['区号503', '邮编600002']}, 17         '3.邯郸市': {'1.丛台区': ['区号600', '邮编700000'], '2.邯山区': ['区号601', '邮编700001'], '3.复兴区': ['区号602', '邮编700002']} 18     }, 19     '3.湖南省': { 20         '1.长沙市': {'1.芙蓉区': ['区号700', '邮编800000'], '2.岳麓区': ['区号701', '邮编800001'], '3.雨花区': ['区号702', '邮编800002']}, 21         '2.常德市': {'1.武陵区': ['区号800', '邮编900000'], '2.鼎城区': ['区号801', '邮编900001'], '3.未知区': ['区号803', '邮编900002']}, 22         '3.湘潭市': {'1.丛台区': ['区号900', '邮编110000'], '2.邯山区': ['区号901', '邮编110001'], '3.复兴区': ['区号902', '邮编110002']} 23     }, 24     '4.湖北省': { 25         '1.武汉市': {'1.江岸区': ['区号110', '邮编810000'], '2.江汉区': ['区号111', '邮编810001'], '3.汉阳区': ['区号112', '邮编810002']}, 26         '2.宜昌市': {'1.西陵区': ['区号120', '邮编910000'], '2.点军区': ['区号121', '邮编910001'], '3.夷陵区': ['区号123', '邮编910002']}, 27         '3.孝感市': {'1.孝南区': ['区号130', '邮编120000'], '2.孝感区': ['区号131', '邮编120001'], '3.未知区': ['区号132', '邮编120002']} 28     } 29 } 30  31  32 # 定义一个函数,用于将查询到的省份信息传递给此函数 33  34 def district(): 35     while True: 36         # 定义一个空列表,用于保存城市信息 37         cy = [] 38         # %s是处理对象的一种方法,是占位符,它的值来源于后面的% province省份的值,然后通过print打印出来 39         # province的值是在查询身份的语句里面定义的 40         print('%s 有以下城市:' % province) 41         # 通过for循环将用户选择的省份下面的城市列表放到_city中 42         for _city in sorted(_country_dict[province].keys()): 43             # 打印用户选择的省份下面的城市的列表 44             print(_city) 45             # 将用户选择的省份下面的城市列表附加保存到cy列表中 46             cy.append(_city) 47         # print(cy) 48         # 提供交互式界面,让用户输入要查询的城市编号 49         _city_number = input('请输入要查询的城市编号:(后退:b 退出:q)') 50         # 打印城市和区县列表的分隔符 51         print('---------------------------------------------------') 52         # 如果用户输入的编号是q,则退出查询 53         if _city_number == 'q': 54             print('已退出查询!') 55             exit() 56           # 如果用户输入的是b,则中断当前的判断,退回到上一级省份目录 57         elif _city_number == 'b': 58             break 59         else: 60             # 如果用户输入的是正确的编号,则从cy城市列表中获取到城市信息,放到city中 61             for city in cy: 62                 # 判断用户输入的城市编号和cy列表中的城市编号是否匹配 63                 if _city_number in city: 64                     # 如果匹配,则将当前城市的名称保存到_citynumber变量中 65                     _citynumber = city 66                     # %s是处理对象的一种方法,是占位符,它的值来源于% _citynumber具体城市的值,然后通过print打印出来 67                     print('%s 该城市有下列区县:' % _citynumber) 68  69                     # 通过while循环,将具体城市下面的区县信息查出来 70                     while True: 71                         # 用于保存区县信息的列表 72                         n = [] 73                         # 通过for循环将用户选择的城市下面的区县列表放到_districts中 74                         for _districts in sorted(_country_dict[province][_citynumber].keys()): 75                             # 打印区县的名称信息,例如二七区 76                             print(_districts) 77                             # 将区县信息保存到n列表中 78                             n.append(_districts) 79                         # 提供交互式界面,让用户输入区县的查询行为 80                         _phone_number = input('请输入要查询的区县的编号:(后退:b 退出:q)') 81                         # # 打印区县和区县具体信息列表的分隔符 82                         print('---------------------------------------------------') 83                         # 如果用户输入了q,则结束查询 84                         if _phone_number == 'q': 85                             print('已结束查询!') 86                             exit() 87                         # 如果用户输入了b,则返回到上一级查询 88                         elif _phone_number == 'b': 89                             break  # 跳出当前循环,回到上一级循环 90                            else: 91                             # 通过循环遍历从区县列表n中读取区县信息到pn中 92                             for pn in n: 93                                 # 如果用户输入的区县编号和pn中的区县编号匹配 94                                 if _phone_number in pn: 95                                     # 则将具体匹配到的区县的名称保存到phone_number中 96                                     phone_number = pn 97                                     # %s的值来源于% _phone_number具体区县的值,然后通过print打印出来 98                                     print('%s 的信息如下:' % phone_number) 99                                     # 通过for循环将用户选择的具体的区县的列表中的信息放到p中100                                     for p in _country_dict[province][_citynumber][phone_number]:101                                         # 打印具体区县下面的邮政编码和区号信息102                                         print(p)103                                     # 打印查询分隔符104                                     print('---------------------------------------------------')105                                     # 通过交互式界面询问用户,是否继续查询106                                     _end_get = input('查询已完成,是否继续其他查询?(继续:Y 其他:结束)')107                                     # 如果用户输入的是大写的Y,则返回到上一级继续查询108                                     if _end_get == 'Y':109                                         break110                                     # 如果用户输入除了大写Y以外其他的值,则结束查询111                                     else:112                                         print('已结束查询!')113                                         exit()114                             # 如果用户输入的区县编号有误,提示用户重新输入115                             else:116                                 print('区县编号输入错误,请重新输入')117                         # 第三个while True循环的退出118                         break119     # 如果用户输入的城市编号不对,则提示用户重新输入120         else:121         print('城市编号输入有误,请重新输入!')122         # 第二个while True不设置中断条件,用户可以退回到当前的城市查询列表中123 124 while True:125 126          # 初始化空列表,用于保存省份信息127     c = []128          # 从国家字典中取第一级列表每一行的值,循环放到_country中129          for _country in sorted(_country_dict.keys()):130               # 逐行输出国家字典里第一级列表每一行的值131         print (_country)132         '''133         打印效果134         1.河南省135         2.河北省136         3.湖南省137         4.湖北省138     '''139         # 将取到的第一级列表每一行的值追加放入c列表中140         c.append(_country)141     # print(c) # c列表打印的结果['1.河南省', '2.河北省', '3.湖南省', '4.湖北省']142     # 提供交互式界面给用户输入省份编号信息143     country_number = input("请输入要查询的省份编号:(退出:q)")144     # 打印省份和城市分割线145     print('---------------------------------------------------')146     # 如果用户输入的是q,则退出查询147     if country_number == 'q':148         print('已退出查询!')149         break150 151     # 如果没有输入q,则有两种情况:1)查询到身份列表,则把省份信息传递给district()函数做进一步查询;2)提示用户输入的编号有错误152     else:153         # 遍历c列表中的省份信息,保存到country中154         for country in c:155             if country_number in country:156                 # 将遍历到的C列表的省份信息同用户输入的省份编号进行对比157                 # 如果输入的编号和省份编号一致,则把country的值赋予给province,从而方便进一步查询特定省份下面的城市列表158                 province = country159                 # 如果符合上面的条件,则开始执行函数,此函数的目的是在现有查询的基础上进一步查询城市和区县信息160                 district()161                 # print(country_number) # 测试用户交互式输入信息162                 break163         else:164             print("您输入的省份编号有误,请重新输入!")165 # 第一个while True不设置中断条件,用户可以退回到当前的身份查询列表中

登录后复制

3)Github笔记

第一天的笔记的地址是:

随堂练习

第一天作业的地址是:

作业

 4)Readme.md文档

作业/Readme_多级菜单.md

 

以上就是怎么编写多级菜单?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268280.html

(0)
上一篇 2025年2月27日 10:39:37
下一篇 2025年2月26日 14:07:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python的简单的登陆和注册功能实现

    大致的思路 我是分别写了五个函数 fileRead() 文件读取 登录后复制 FileWrite()文件写入 登录后复制 FileModify()文件修改 登录后复制 Register()注册 登录后复制 Login()登陆来实现整个功能的…

    编程技术 2025年2月27日
    200
  • python如何编写购物车程序的示例代码分享

    要求 1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 立即学…

    编程技术 2025年2月27日
    200
  • 如何利用Python编写希尔排序算法?

    如何利用Python编写希尔排序算法? 希尔排序(Shell Sort)是一种改进的插入排序算法,它通过比较相距一定间隔的元素来移动元素,从而减少了移动的次数。希尔排序的核心思想是将待排序的元素按照一定的间隔分组,然后对每个分组进行插入排序…

    2025年2月26日
    200
  • 如何用Python编写Tarjan算法?

    如何用Python编写Tarjan算法? Tarjan算法是一种基于深度优先搜索(DFS)的图算法,用于求解强连通分量(SCC)问题。本文将介绍如何用Python编写Tarjan算法,并附上具体的代码示例。 Tarjan算法的基本思想是通过…

    2025年2月26日
    200
  • 如何用Python编写支持向量机算法?

    如何用Python编写支持向量机算法? 支持向量机(Support Vector Machine,SVM)是一种用于二分类和回归问题的机器学习算法。它的主要目标是找到一个最优超平面,将不同类别的数据点尽可能地分开,并且使边界上的数据点到超平…

    2025年2月26日
    200
  • 如何用Python编写深度优先搜索算法?

    如何用Python编写深度优先搜索算法? 深度优先搜索(Depth-First Search,简称DFS)是一种常用的图遍历算法。在深度优先搜索中,从起始节点开始,不断探索邻接节点,直至无法继续探索,然后回退到上一节点,继续遍历还未探索的邻…

    2025年2月26日
    200
  • 如何用Python编写动态规划算法?

    如何用Python编写动态规划算法? 动态规划算法是一种常用的问题求解方法,它通过将问题分解为子问题,并将子问题的解保存起来,从而避免重复计算,提升算法效率。Python作为一种简洁易读的编程语言,非常适合用来编写动态规划算法。本文将介绍如…

    2025年2月26日
    200
  • 如何用Python编写KNN算法?

    如何用Python编写KNN算法? KNN(K-Nearest Neighbors,K近邻算法)是一种简单而常用的分类算法。它的思想是通过测量不同样本之间的距离,将测试样本分类到最近的K个邻居中。本文将介绍如何使用Python编写并实现KN…

    2025年2月26日
    200
  • 如何用Python编写随机森林算法?

    如何用Python编写随机森林算法? 随机森林是一种强大的机器学习方法,常用于分类和回归问题。该算法通过随机选择特征和随机抽样样本,建立多个决策树,并将它们的结果进行整合来做出预测。 本文将介绍如何使用Python编写随机森林算法,并提供具…

    2025年2月26日
    200
  • 如何用Python编写普里姆算法?

    如何用Python编写普里姆算法? 普里姆算法(Prim’s algorithm)是解决最小生成树问题的一种经典算法,它能够找到一个无向连通图的最小生成树。本文将介绍如何使用Python编写普里姆算法,并附上具体的代码示例。 首…

    2025年2月26日
    200

发表回复

登录后才能评论