python3--尝试写一个三级菜单

# 程序: 三级菜单

# 要求:

# 1.打印省、市、县三级菜单

# 2.可返回上一级

# 3.可随时退出程序,可返回顶部重新开始程序

代码如下

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'
class city_info(object):
    def __init__(self):
        self.list = {
                    '湖北省': {
                        '武汉市': ['新洲', '武昌', '汉口', '汉阳'],
                        '黄冈市': ['麻城', '黄陂', '罗田', '英山'],
                        '咸宁市': ['通城', '通山', '嘉鱼', '崇阳'],
                        '孝感市': ['汉川', '应城', '云梦', '安陆'],
                    },
                    '湖南省': {
                        '郴州市': ['湖区', '苏仙', '贵阳', '桂东'],
                        '衡阳市': ['珠晖', '石鼓', '常宁', '衡山'],
                        '长沙市': ['芙蓉', '天心', '开福', '雨花'],
                        '湘潭市': ['雨湖', '岳塘', '韶山', '湘乡'],
                    },
                    '广东省': {
                        '广州市': ['越秀', '东山', '天河', '白云'],
                        '惠州市': ['龙门', '博罗', '惠城', '惠阳'],
                        '东莞市': ['莞城', '东城', '南城', '万江'],
                        '佛山市': ['南海', '顺德', '高明', '三水'],
                    },
                    '广西省': {
                        '南宁市': ['江南', '良庆', '武鸣', '青秀'],
                        '桂林市': ['秀峰', '叠彩', '象山', '雁山'],
                        '玉林市': ['北流', '陆川', '玉州', '福绵'],
                        '柳州市': ['柳南', '鱼峰', '城中', '柳北'],
                    }
        }
        self.run()

    def run(self):
        while True:
            content = input("是否打印省列表:\nY/y(yes/Yes)打印省列表\nQ/q(quit/QUIT)退出程序\
            \n输入你的选择:").strip()
            if content.upper() == 'Y' or content.upper() == 'YES':
                self.sheng()
                return True
            elif content.upper() == 'Q' or content.upper() == 'QUIT':
                exit()
            else:
                print("输入有误!")

    def sheng(self):
        while True:
            self.sheng_index = list(self.list.keys())
            for i in self.sheng_index:
                print("\t{}\t{}\t".format(self.sheng_index.index(i)+1, i))
            self.sheng_content = input("选择序号: 省--->打印市\nB/b(back/BACK)返回上级选项\
            \nQ/q(quit/QUIT)退出程序!\n输入你的选择:").strip()
            if self.sheng_content.isdigit():
                self.sheng_content = int(self.sheng_content)
                if 0 < self.sheng_content <= len(self.sheng_index):
                    self.sheng_content -= 1
                    self.city_shi = list(self.list[self.sheng_index[self.sheng_content]].keys())
                    #print(self.city_shi)
                    for s in self.city_shi:
                        print("\t{}\t{}\t".format(self.city_shi.index(s)+1, s))

                    self.shi()
                    return True
                else:
                    print("输入的省序号不存在!")
            elif self.sheng_content.upper() == 'B' or self.sheng_content.upper() == 'BACK':
                self.run()
                return True
            elif self.sheng_content.upper() == 'Q'or self.sheng_content.upper() == 'QUIT':
                exit()
            else:
                print("error(非法字符)")

    def shi(self):
        while True:
            self.shi_content = input("选择序号 市---->打印县 :\nB/b(back/BACK)返回上级选项\
            \nQ/q(quit/QUIT)退出程序!\n输入你的选择:").strip()
            if  self.shi_content.isdigit():
                self.shi_content = int(self.shi_content)
                if 0 < self.shi_content <= len(self.city_shi):
                    self.shi_content = int(self.shi_content) - 1
                    self.shi_xian = \
                    list(self.list[self.sheng_index[self.sheng_content]][self.city_shi[self.sheng_content]])
                    sum1 = 0
                    for i in self.shi_xian:
                        sum1 +=1 < len(self.shi_xian)
                        print("\t{}\t{}\t".format(sum1, i))
                    self.xian()
                    return True
                else:
                    print("输入的市序号不存在!")
            elif self.shi_content.upper() == 'B' or self.shi_content.upper() == 'BACK':
                self.sheng()
                return True
            elif self.shi_content.upper() == 'Q' or self.shi_content.upper() == 'QUIT':
                exit()
            else:
                print("输入错误!")
    def xian(self):
        while True:
            self.xian_content = input("***************end***************\nB/b(back/BACK)返回上级选项\
            \nT/t(top/TOP)返回顶部\nQ/q(quit/QUIT)退出程序!\n输入你的选择:").strip()
            if self.xian_content.upper() == 'B' or self.xian_content.upper() == 'BACK':
                self.shi()
                return True
            elif self.xian_content.upper() == 'T' or self.xian_content.upper() == 'TOP':
                self.run()
                return True
            elif self.xian_content.upper() == 'Q' or self.xian_content.upper() == 'QUIT':
                exit()
            else:
                print("输入错误")

if __name__ == '__main__':
    st = city_info()

运行效果展示

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

关于windows完成端口(IOCP)的一些理解(一)

系列目录 关于windows完成端口(IOCP)的一些理解(一) 关于windows完成端口(IOCP)的一些理解(二) 关于windows完成端口(IOCP)...

1K90
来自专栏me的随笔

.NET中的各种池

在.NET中,常用到的池有四个:字符串拘留池、线程池 、应用程序池、数据库连接池。

9840
来自专栏me的随笔

.NET Core中的包、元包与框架

.NET Core是一个由NuGet包组成的平台。一些产品受益于细粒度包的定义,也有一些受益于粗粒度包的定义。为了适应这种二重性,.NET Core平台被分为一...

12840
来自专栏圣杰的专栏

Asp.net mvc 知多少(二)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

22480
来自专栏『不羁阁』 | 行走少年郎专栏

iOS多线程:『pthread、NSThread』详尽总结

22050
来自专栏程序员互动联盟

【编程基础】跟我学创建Windows动态库

如何简单快速创建Win32平台下的动态链接库?但是有的创建出来用C/C++调用时没有问题,但是在其它编程语言调用时可能会出现问题,下面我们就按四个傻瓜式的步骤创...

30190
来自专栏大内老A

ASP.NET MVC的Razor引擎:View编译原理

通过.cshtml或者.vbhtml文件定义的View能够被执行,必须先被编译成存在于某个程序集的类型,ASP.NET MVC采用动态编译的方式对View文件实...

23870
来自专栏码农阿宇

国内开源社区巨作AspectCore-Framework入门

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技...

28710
来自专栏木宛城主

ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇。在本文中,将为大家介绍ASP.NET ...

24380
来自专栏张善友的专栏

Contact Manager Web API 示例[3] 分页和查询(Paging and Querying)

联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地...

22360

扫码关注云+社区

领取腾讯云代金券