本实例综合运用了列表、字典、元祖以及for循环、while循环和if-else语句,是入门同学比较经典的事例之一。
china_ditie = {
"北京": {
"一号线": ["四惠", "大望路", "天安门", "西单"],
"二号线": ["北京站", "朝阳门", "东直门", "西直门"],
"三号线": ["国贸", "三元桥", "知春路", "巴沟"]
},
"上海": {
"四号线": ["徐家汇", "人民广场", "延长路", "共康路", "呼兰路"],
"五号线": ["东昌路", "静安寺", "江苏路", "虹桥火车站"],
"六号线": ["宝山路", "赤峰路", "曹阳路", "虹桥路", "宜山路"]
},
"广州": {
"七号线": ["东山口", "农讲所", "烈士陵园", "公园前", "体育西路"],
"八号线": ["黄边", "纪念堂", "三元里", "白云公园"],
"九号线": ["沙河顶", "北京路", "一德路", "文化公园"]
},
"深圳": {
"一号线": ["高新园", "桃园", "白石洲", "华侨城"],
"四号线": ["白石龙", "明乐", "少年宫", "红山"],
"五号线": ["大学城", "兴东", "西里", "深圳北站"]
},
}
import time
start = True
city_list =[] #用于存储一级菜单的列表(城市)
xian_list =[] #用于存储二级菜单的列表(线路)
print("\033[31;1m欢迎访问地铁查询系统\033[1m".center(40,"="))#给输入的内容加颜色
while start : #死循环
print("".center(36,"="))
for v,city in enumerate(china_ditie.keys(),1) :#循环输出字典中的城市,用到了枚举,v表示城市的编号,city表示对应的城市,并且编号从1开始
print(v,city) #打印城市列表并编号
city_list.append(city) #把城市名称存储到一级菜单的列表里
print("退出 \033[31;1MQ\033[1m") #提示语句退出按q
print("".center(36,"=")) # 生成分隔符
c_city=input("请选择你要查询的城市编号:") #输入城市编号
print("".center(36,"="))#生成分隔符
if c_city == "q" or c_city == "Q" :#打印城市列表选择Q退出
break
if c_city.isdigit() :#判断是否为数字,数字转换成int类型
c_city=int(c_city)
if c_city <= len(city_list) and c_city >0 :#判断输入编号是否存在
while start :
for x,xian in enumerate(china_ditie[city_list[c_city-1]].keys(),1):#循环城市地铁线路名称(for基于enumerate的索引,格式固定)
print(x,xian) #打印线路名称,x在此处只是一个数
xian_list.append(xian) #将线路加入到线路列表中
print("返回上一级\033[31;1mb\033[1m,退出 \033[31;1mq\033[1m")
print("".center(36,"="))#分割线
c_xian = input("请选择你要查询的线路:") #让用户输入查询的线路
print("".center(36,"="))#分割线
if c_xian == "b" or c_xian == "B" :#退出当前循环返回上一级
del city_list[:] #删除城市列表中的所有数据
del xian_list[:] #删除线列表中的所有数据
break
elif c_xian == "q" or c_xian =="Q" :#退出程序
start = False
elif c_xian.isdigit() : #输入的数字变成int类型
c_xian=int(c_xian)
if c_xian <= len(xian_list) and c_xian > 0 : #判断输入的是否在列表长度范围内
while start :
for name in china_ditie[city_list[c_city-1]][xian_list[c_xian-1]]: #循环字典中地铁的名称
print(name) #打印字典中的内容
print("返回上一级 \033[31;1mb\033[1m,退出 \033[31;1mq\033[1m")
print("".center(36,"=")) #分割线
c_n = input("请输入你需要的操作:")
if c_n == 'b' or c_n =='B' :
del xian_list[:]
break
elif c_n == 'q' or c_n =='Q' : #退出程序
start = False
else :
print("\033[31;1m输入错误请重新输入,退出请按\033[31;1mq\033[1m!\033[1m")
time.sleep(1)#函数推迟调用即下面的语句在推迟1s执行 方法语法time.sleep(t),t推迟执行的秒数
else :
del xian_list[:]
print("\033[31;1m没有此线路请输入错误!\033[1m")
time.sleep(1)
else :#输入错误提示并刷新线路列表
del xian_list[:]
print("\033[31;1m输入错误,请输入数字!\033[1m")
time.sleep(1)
else : #输入错误提示并刷新城市列表
del city_list[:]
print("\033[31;1m没有此城市或者输入错误!\033[1m")
time.sleep(1)
else : #输入错误提示并刷新城市列表
del city_list[:]
print("\033[31;1m没有此城市或者输入错误!\033[1m")
time.sleep(1)
0