铁路查询系统

2020-02-10 23:02:07 浏览数 (1)

 本实例综合运用了列表、字典、元祖以及for循环、while循环和if-else语句,是入门同学比较经典的事例之一。

代码语言:javascript复制
china_ditie = {

"北京": {

    "一号线": ["四惠", "大望路", "天安门", "西单"],

    "二号线": ["北京站", "朝阳门", "东直门", "西直门"],

    "三号线": ["国贸", "三元桥", "知春路", "巴沟"]

    },

"上海": {

    "四号线": ["徐家汇", "人民广场", "延长路", "共康路", "呼兰路"],

    "五号线": ["东昌路", "静安寺", "江苏路", "虹桥火车站"],

    "六号线": ["宝山路", "赤峰路", "曹阳路", "虹桥路", "宜山路"]

     },

"广州": {

    "七号线": ["东山口", "农讲所", "烈士陵园", "公园前", "体育西路"],

    "八号线": ["黄边", "纪念堂", "三元里", "白云公园"],

    "九号线": ["沙河顶", "北京路", "一德路", "文化公园"]

    },

"深圳": {

    "一号线": ["高新园", "桃园", "白石洲", "华侨城"],

    "四号线": ["白石龙", "明乐", "少年宫", "红山"],

    "五号线": ["大学城", "兴东", "西里", "深圳北站"]

    },

}
import time
start = True
city_list =[]  #用于存储一级菜单的列表(城市)
xian_list =[]  #用于存储二级菜单的列表(线路)
print("33[31;1m欢迎访问地铁查询系统33[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("退出 33[31;1mq33[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("返回上一级33[31;1mb33[1m,退出 33[31;1mq33[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("返回上一级 33[31;1mb33[1m,退出 33[31;1mq33[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("33[31;1m输入错误请重新输入,退出请按33[31;1mq33[1m!33[1m")
                                time.sleep(1)#函数推迟调用即下面的语句在推迟1s执行 方法语法time.sleep(t),t推迟执行的秒数
                    else :
                        del xian_list[:]
                        print("33[31;1m没有此线路请输入错误!33[1m")
                        time.sleep(1)
                else :#输入错误提示并刷新线路列表
                    del xian_list[:]
                    print("33[31;1m输入错误,请输入数字!33[1m")
                    time.sleep(1)
        else : #输入错误提示并刷新城市列表
            del city_list[:]
            print("33[31;1m没有此城市或者输入错误!33[1m")
            time.sleep(1)
    else : #输入错误提示并刷新城市列表
        del city_list[:]
        print("33[31;1m没有此城市或者输入错误!33[1m")
        time.sleep(1)

0 人点赞