编写三级菜单----地图

2023-05-13,,

从学习Python来,老师布置了一次作业,就是完成对菜单的功能,输入一个省份,进而能查询省份下的县市,如果要继续查看直接输入市县就进一步查看,如果要返回直接输入提示数字即可:

代码如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
provice = {
    "江苏省":{"苏州市":{'工业园区','姑苏区','吴中区'},"无锡市":{'锡山区','新区','南塘区'}},
    "湖北省":{"武汉市":{'江汉区','江岸区','洪山区'},"宜昌市":{'夷陵区','枝江市','西陵区'}},
    "浙江省":{"杭州市":{'上城区','下城区','拱墅区'},"湖州市":{'南浔区','吴兴区','安吉县'}},
    "安徽省":{"合肥市":{'庐阳区','蜀山区','琼海区'},"芜湖市":{'鸠江区','新芜区','繁昌区'}}
  }
for i in range(3):#循环3次防止无限调用
       print "\033[31;1m----------行政区划图---------------\033[0m"
       for pro in provice.keys():#获取省信息列表,这里可以将provice.keys()赋值给某个一变量,如sheng_name_list = provice.keys(),然后再对sheng# _name_list进行遍历
            print "\033[29;1m ============%s=============\033[0m" % pro#打印省份名字
       print "\033[34;1m----------------------------------------------------\033[0m"
       proname = raw_input("请输入要查看省份的名字:")
       jump_up_flag = False  #定义标志位用来跳出整个循环
       if proname not in provice.keys():#判断输入省份名字如果不在地图中
            continue#跳出本次循环,回到循环开头
       else:#如果在地图列表中则进行如下遍历操作
            print "\033[33;1m %s包含如下城市:\033[0m" %(proname)
            for s_name in provice[proname].keys():#遍历省份列表然后打印输出
                print "\033[32;1m  %s   \033[0m" %(s_name)#输出省份名字列表
            while True:
                cs_name = raw_input("输入要查看的城市名字:")
                chengshi_list = provice[proname].keys()
                if cs_name in chengshi_list:
                    for area  in provice[proname][cs_name]:
                         print "\033[32;1m %s \033[0m" %(area)
                    print "\033[31;1m-----------------------------\033[0m"
                else:
                    print "\033[31;1m你输入的城市名\033[34;1m %s \033[0m\033[31;1m不存在请重新输入!\033[0m" % (cs_name)
                    continue
                jump_tag = raw_input("\033[32;1m请问是否退出:1 退出、2 返回最上层,任意输入返回上一层:\033[0m")
                """
                判断用户的输入:如果输入1则将jump_up_flag 置为True然后跳出while循环,返回到上级目录,在上一层代码中判断标志位的代码
            如果标志位为True执行break将跳出整个循环
            如果输入2.直接break跳出while循环到最上级目录!
                """
                if jump_tag == "1":
                    jump_up_flag = True
                    break
                if jump_tag == "2":
                    break#如果jump_tag赋值为2,则直接跳出while循环,到上层for循环
       if jump_up_flag:#判断如果标志位为True,将执行下面break代码跳出整个循环。
            break
       else:#如果标志位(即jump_up_flag)为False,则直接执行continue终止本次for循环进入下一次for循环
           continue
else:#如果超出三次输入,则跳出整个for循环
       print "\033[31;1m信息无效请重新输入!3次错误之后程序将退出!\033[0m"
总结:本案例重点是标识位,运用标识位的赋值对循环进行判断:
比如:
        if jump_tag == "1":
          jump_up_flag = True
          break
        if jump_tag == "2":
          break#如果jump_tag赋值为2,则直接跳出while循环,到上层for循环
     if jump_up_flag:#判断如果标志位为True,将执行下面break代码跳出整个循环。
            break
在jump_tag == "1"重新修改jump_up_flag = True,影响到下一次是否跳出整个循环的思路,这个是本次案例的点睛之笔
另外就是:
for i in range(3):
--------------
--------------
else:

  配合使用,超过三次就直接退出for循环,else提示跳出for循环,for作为限制循环次数,这种用法在程序中是比较高明的思路

《编写三级菜单----地图.doc》

下载本文的Word格式文档,以方便收藏与打印。