#!/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循环