当前位置:Gxlcms > Python > 多级菜单操作(函数实现)

多级菜单操作(函数实现)

时间:2021-07-01 10:21:17 帮助过:34人阅读

作业二:多级菜单

(1)三级菜单

(2)可以次选择进入各子菜单

(3)所需新知识点:列表、字典

要求:输入back返回上一层,输入quit退出整个程序

本示例的三级菜单是一个yaml文件格式,格式如下:

  1. 香港:
  2. 香港
  3. 澳门:
  4. 澳门
  5. 台湾:
  6. 台湾
  7. 钓鱼岛:
  8. 钓鱼岛
  9. 北京市: - 市辖区 - 东城区 - 西城区 - 崇文区 - 宣武区 - 朝阳区
  10. 河北省: - 石家庄市:- 长安区- 桥东区- 桥西区- 新华区 - 唐山市:- 路南区- 路北区- 古冶区- 开平区 - 秦皇岛市:- 海港区- 山海关区
  11. 山西省: - 太原市:- 小店区- 迎泽区- 杏花岭区 - 大同市:- 城 区- 矿 区- 南郊区 - 阳泉市:- 城 区- 矿 区- 郊 区- 平定县- 盂 县 - 长治市:- 城 区- 郊 区- 长治县- 襄垣县- 屯留县

yaml格式的处理方法如下:

首先,上面的格式是一个多级模式,有一级,二级,三级的情况,使用yaml处理后的字典如下形式:

  1. ,) =

运行得到的字典如下格式:

{'香港': '香港',

   '北京市': ['市辖区', '东城区', '西城区', '崇文区', '宣武区', '朝阳区'],

   '台湾': '台湾',

   '澳门': '澳门',

   '河北省': [{'石家庄市': ['长安区', '桥东区', '桥西区', '新华区']}, {'唐山市': ['路南区', '路北区', '古冶区', '开平区']}, {'秦皇岛市': ['海港区', '山海关区']}],

   '钓鱼岛': '钓鱼岛',

    '山西省': [{'太原市': ['小店区', '迎泽区', '杏花岭区']}, {'大同市': ['城 区', '矿 区', '南郊区']}, {'阳泉市': ['城 区', '矿 区', '郊 区', '平定县', '盂 县']}, {'长治市': ['城 区', '郊 区', '长治县', '襄垣县', '屯留县']}]}

得到的是字典,一级如,"香港":"香港",值是字符串类型;二级如: '北京市': ['市辖区', '东城区', '西城区', '崇文区', '宣武区', '朝阳区'],值是列表形式,里面嵌套的是字符串;最复杂的是三级模式,如:'河北省': [{'石家庄市': ['长安区', '桥东区', '桥西区', '新华区']}, {'唐山市': ['路南区', '路北区', '古冶区', '开平区']}, {'秦皇岛市': ['海港区', '山海关区']}],里面第二层是列表,列表里面嵌套的还是字典。

思路:

(1)本项目的核心其实是得到省/市/县这样的模式,在处理的过程中,我们根据值对应的类型进行判断,使用那种方式处理比较好;

(2)首先我们遍历字典的第一层,得到省份,把省份放在一个字典中,这样,我们就可以根据用户输入的值的情况去进行输出对应的省;

  (3)得到省之后,我们可以得到省下面的键值,判断值对应的类型,根据不同值的类型进行不同方式的操作;

(4)如果值是字符串,说明是一级菜单形式,这种方式最好处理;

  (5)如果值是列表,且第一个值是字符串,说明是北京这种的二级模式,使用二级模式的方法进行展示;

  (6)如果值是列表,且第一个值是一个字典的形式,说明是三级模式的情形,就要使用三级模式来进行操作;

(7)定义全局变量,我们要知道我们需要得到的是什么,我们要得到省市县三级模式;只有知道了对应的省市县,我们只需要去字典中遍历即可得到值的信息。

流程图如下:

代码如下:

  1. s = province_dict = num,province_name enumerate(dic_db.keys(), province_dict[num] = print( %(num,province_name) + ,end= num % == print( print( find_index = input( find_index = find_index == sys.exit( find_index P_NAME = elif find_index P_NAME = print( P_NAME #省的函数运行完成之后,返回省的名称,以便后续使用,因为主要是得到省/市/ city_name = type(city_name) == elif type(city_name) == type(city_name[]) == elif type(city_name[]) == city_dict = city_num,city_name enumerate(city_list, city_dict[city_num] = print( %(city_num,city_name) + ,end= city_num % == print( print( city_index = input( city_index = city_index == city_index == elif city_index C_NAME = elif city_index C_NAME = print( city_dict = c_num,c_name enumerate(country_list, key city_dict[c_num] = k,v print( %(k,v) + ,end= k % == print( print( city_num = input( city_num = city_num == city_num == elif city_num C_NAME = key,value value == C_INDEX = elif city_num C_NAME = C_INDEX = print( countries = country_list[C_INDEX - c_index,country enumerate(countries, print( %(c_index,country) + ,end= k % == print( print( country_index = input( country_index = country_index == country_index == elif country_index elif country_index range(,len(countries)+ show(province,C_NAME,countries[country_index- print( def framework(province=,city=,country= os.system( message = +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \[;1m欢迎来到全国省市查询系统\ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *************************************************************************** 省 份:% 市(区):% 县(区):% *************************************************************************** print(message % def show(province_name=,city_name=,country_name= output = ---------------------------------------------------------------------------- 美丽的%s %s % ---------------------------------------------------------------------------- \[0m print(output % __name__ == with open(,) dic_db = ProvinceName = judge(ProvinceName,dic_db)
  2. 代码运行如下:
  3. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  4. 欢迎来到全国省市查询系统
  5. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6. ***************************************************************************
  7. 省 份:
  8. 市(区):
  9. 县(区):
  10. ***************************************************************************
  11. 1. 澳门 2. 山西省 3. 北京市 4. 台湾
  12. 5. 钓鱼岛 6. 香港 7. 河北省
  13. ==============================================================
  14. q:Exit
  15. 请输入你要查询的省的编号/名字:1
  16. ----------------------------------------------------------------------------
  17. 美丽的澳门
  18. 欢迎您!
  19. 这里山美,水美,姑娘更美
  20. ----------------------------------------------------------------------------
  21. 1. 澳门 2. 山西省 3. 北京市 4. 台湾
  22. 5. 钓鱼岛 6. 香港 7. 河北省
  23. ==============================================================
  24. q:Exit
  25. 请输入你要查询的省的编号/名字:2
  26. ----------------------------------------------------------------------------
  27. 美丽的山西省
  28. 欢迎您!
  29. 这里山美,水美,姑娘更美
  30. ----------------------------------------------------------------------------
  31. 1.太原市 2.大同市 3.阳泉市 4.长治市
  32. ===============================================================================
  33. q:Exit b:退回上一层
  34. 请输入您要查询的市的编号/名字:2
  35. ----------------------------------------------------------------------------
  36. 美丽的山西省 大同市
  37. 欢迎您!
  38. 这里山美,水美,姑娘更美
  39. ----------------------------------------------------------------------------
  40. 1.城 区
  41. 2.矿 区
  42. 3.南郊区
  43. ===============================================================================
  44. q:Exit b:退回上一层
  45. 请输入你要查询的县(区)编号/名字:2
  46. ----------------------------------------------------------------------------
  47. 美丽的山西省 大同市 矿 区
  48. 欢迎您!
  49. 这里山美,水美,姑娘更美
  50. ----------------------------------------------------------------------------
  51. 1.城 区
  52. 2.矿 区
  53. 3.南郊区
  54. ===============================================================================
  55. q:Exit b:退回上一层
  56. 请输入你要查询的县(区)编号/名字:b
  57. 请输入您要查询的市的编号/名字:b
  58. 1. 澳门 2. 山西省 3. 北京市 4. 台湾
  59. 5. 钓鱼岛 6. 香港 7. 河北省
  60. ==============================================================
  61. q:Exit
  62. 请输入你要查询的省的编号/名字:北京市
  63. ----------------------------------------------------------------------------
  64. 美丽的北京市
  65. 欢迎您!
  66. 这里山美,水美,姑娘更美
  67. ----------------------------------------------------------------------------
  68. 1.市辖区
  69. ==================================================================
  70. q:Exit b:退回上一层
  71. 请输入您要查询的市的编号/名字:1
  72. ----------------------------------------------------------------------------
  73. 美丽的北京市 市辖区
  74. 欢迎您!
  75. 这里山美,水美,姑娘更美
  76. ----------------------------------------------------------------------------
  77. 1. 澳门 2. 山西省 3. 北京市 4. 台湾
  78. 5. 钓鱼岛 6. 香港 7. 河北省
  79. ==============================================================
  80. q:Exit
  81. 请输入你要查询的省的编号/名字:7
  82. ----------------------------------------------------------------------------
  83. 美丽的河北省
  84. 欢迎您!
  85. 这里山美,水美,姑娘更美
  86. ----------------------------------------------------------------------------
  87. 1.石家庄市 2.唐山市 3.秦皇岛市
  88. ===============================================================================
  89. q:Exit b:退回上一层
  90. 请输入您要查询的市的编号/名字:石家庄市
  91. ----------------------------------------------------------------------------
  92. 美丽的河北省 石家庄市
  93. 欢迎您!
  94. 这里山美,水美,姑娘更美
  95. ----------------------------------------------------------------------------
  96. 1.长安区 2.桥东区 3.桥西区 4.新华区
  97. ===============================================================================
  98. q:Exit b:退回上一层
  99. 请输入你要查询的县(区)编号/名字:长安区
  100. ----------------------------------------------------------------------------
  101. 美丽的河北省 石家庄市 长安区
  102. 欢迎您!
  103. 这里山美,水美,姑娘更美
  104. ----------------------------------------------------------------------------
  105. 1.长安区 2.桥东区 3.桥西区 4.新华区
  106. ===============================================================================
  107. q:Exit b:退回上一层
  108. 请输入你要查询的县(区)编号/名字:q

上面代码,我学到了如下知识:

  (1)yaml格式文件的处理,导入yaml模块,使用yaml.load()进行文件字符串转换为字典形式;

(2)全局变量的定义,在很多时候,在程序运行的过程中,我们总是需要的到几个重要的变量,使用全局变量,能够让我们更好的理清思路,全局变量使用global来进行定义;

(3)函数def的结束是遇到return,遇到return无论什么时候,就结束这个函数,因为当我们与while结合使用的时候,可以直接使用return来结束这个循环;

(4)字典、列表的处理方式;

  (5)enumerate()函数的使用;

  (6)sys.exit()来退出整个程序,sys模块;

(7)不怕麻烦,牢牢知道自己需要的是什么自己的目的是什么。

以上就是多级菜单操作(函数实现)的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行