首页 > 编程语言 >python多级菜单纯循环与分支

python多级菜单纯循环与分支

时间:2024-01-25 19:27:14浏览次数:33  
标签:info __ 菜单 python 多级 choice1 print message 分支

python_多级菜单_纯循环与分支

源代码:

#!/usr/bin/python3
 
__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/'
 
 
def menu(message):
    print('按q返回上一层')
    print('按e退出')
    ec = 'q'                                    # 返回上一级
    ex = 'e'
    for i in message:                              # 打印一级菜单
        print(i)
    while True:                                 # 进入一级菜单选择
        choice1 = input('请输入1>>>:')
        if choice1 in message:                     # 判断是否在字典中
            for i1 in message[choice1]:
                print(i1)                       # 打印值
    
            while True:
                choice2 = input('请输入2>>>:')  # 进入二级菜单选择
                if choice2 in message[choice1]:
                    for i2 in message[choice1][choice2]:
                        print(i2)
    
                    while True:
                        choice3 = input('请输入3>>>:')     # 进入三级菜单选择
                        if choice3 in message[choice1][choice2]:
                            for i3 in message[choice1][choice2][choice3]:
                                print(i3)
    
                        elif choice3 == ec:                 # 返回判断
                            for i2 in message[choice1]:
                                print(i2)                   # 打印上一级菜单
                            break
    
                        elif choice3 == ex:                 # 退出判断
                             exit('退出中……ing')
                        else:
                            print('输入错误,请重新输入,么么哒')
    
                elif choice2 == ec:                         # 返回判断,并打印上一级菜单
                    for i1 in message:
                        print(i1)
                    break
                elif choice2 == ex:                         # 退出判断
                    exit('退出中……ing')
                else:
                    print('输入错误,请重新输入,么么哒')
    
        elif choice1 == ec:                                 # 返回判断
            print('已经最顶级菜单,完全退出请输入 e ')
            continue
        elif choice1 == ex:                                 # 退出判断
            exit('退出中……ing')
        else:
            print('输入错误,请重新输入,么么哒')
 
if __name__ == '__main__':
    message = {'湖南':
                {'衡阳':
                     {'珠晖区': '湖南工学院'},
                 '湘潭':
                     {'晖晖': '啦啦'}},
            '北京':
                {'朝阳':
                     {"德玛:北京大学"}}}
    menu(message)

坑点:
1.纯分支与循坏,重复代码
2.多级字典的访问几级就需要几个[]中括号

用面向过程,函数方式做,返回上一级菜单未做,可做一个参考,有更好思路再更新

#!/usr/bin/python3
 
 
def menu_to(message):
    '''打印菜单'''
    try:
        message.endswith('end')
    except:
        for i in message:
            print(i)
    else:
        print(message.replace('end', ''))
 
 
def get_message_key(message_info):
    '''获得每层字典的单边值'''
    try:
        keys = []
        for i in message_info:
            message_info[i]
            keys.append(i)
        return keys
    except:
        return message_info + 'end'
 
 
def menu_go(message_info):
    '''进入主菜单'''
    while True:
        try:
            judgment(message_info)
        except Exception as e:
            print(e)
 
 
def judgment(message_info):
    '''循环菜单'''
    keys = get_message_key(message_info)
    while True:
        menu_to(keys)
 
        choice = input('请输入>>>:')
        if choice == ec:
            print('暂时未实现')
            return judgment(message_info)
        elif choice == ex:
            exit('退出程序')
 
        if type(keys) == type('str') and keys.endswith('end'):
            print('菜单到底了')
            continue
        else:
 
            if choice in keys:
                message_info = message_info[choice]
                return judgment(message_info)
            else:
                print('输入错误,请重新输入')
 
if __name__ == '__main__':
    info_message = {'湖南':
                        {'衡阳':
                             {'珠晖区': '湖南工学院'},
                         '湘潭':
                             {'晖晖': '啦啦'}},
                    '北京':
                        {'朝阳':
                             {"德玛": "北京大学"}}}
    ec = 'q'  # 返回上一级
    ex = 'e'  # 退出程序
    menu_go(info_message)

标签:info,__,菜单,python,多级,choice1,print,message,分支
From: https://www.cnblogs.com/mengdie1978/p/17880090.html

相关文章

  • [Python列表推导式使用举例]
    [Python列表推导式使用举例]"""列表推导式功能说明:列表推导式可以利用range区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。语法:[表达式for迭代变量in可迭代对象[if条件表达式]]"""list=[i+1foriinrange(10)]print(list)"""[1......
  • Python循环三级菜单
    Python循环三级菜单选择城市》选择区》选择区内的公司等三级菜单循环#coding=utf-8#Version:python3.6#Name:shiweidata={'北京':{'海淀':{'五道口':{'soho':{},'网易':{},......
  • python(48) 进程,线程 ,协程、
    python(48):进程,线程,协程、区别进程:拥有代码和打开的文件资源、数据资源、独立的内存空间。线程:线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。线程拥有自己的栈空间。对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。......
  • Python web crawler(2.1)多循环嵌套练习
    写个函数,传入(书名:book,标题:tittle,内容:content),要求在book文件夹下(不存在则创建),创建每个tittle.txt文件,写入content内容importosdefsave_to_file(folder_book,title,content):#如果文件夹不存在,则创建ifnotos.path.exists(folder_book):os.makedirs(......
  • python之生成器
    1.生成器优势节省空间:生成器按需生成值,避免了一次性加载所有数据到内存中。这对于处理大型数据集尤其重要。惰性计算:生成器支持惰性计算,只有在需要时才计算值。这在处理无限序列或需要动态生成数据的场景中非常有用。一次性使用:生成器通常是一次性的,一旦遍历完毕,就需要重新创......
  • locust+python性能测试库
    一.简介locust官网介绍:Locust是一个用于HTTP和其他协议的开源性能/负载测试工具。其对开发人员友好的方法允许您在常规Python代码中定义测试。Locust测试可以从命令行运行,也可以使用其基于Web的UI运行。可以实时查看吞吐量、响应时间和错误和/或导出以供以后分析。二.......
  • Python并发编程之进程池,线程池与信号量
    【一】进程池和线程池【0】池池的概念:资源管理:池用于管理和维护一组资源(如进程或线程),而不是每次需要时都创建和销毁这些资源。这有助于减少创建和销毁的开销。并发处理:池允许并发地执行多个任务,每个任务由池中的一个资源处理。这提高了程序的并发性能。任务队列:池通......
  • python之装饰器使用场景
    1.用户登录认证有三个界面需要登录认证通过后才能查看一个登录函数作为装饰器调用使用@函数名调用中如果加参数,则装饰器需要再加一层1deflogin(func):2defdesc(*args,**kwargs):3user='test'4passwd='123456'5n=06......
  • 详解ElasticSearch Python Client ReadTimeout
    详解ElasticSearchPythonClientReadTimeout在使用Python连接Elasticsearch时,我们经常会遇到一些异常情况,其中之一就是ReadTimeout错误。本文将详细介绍这个错误的原因以及如何处理。什么是ReadTimeout错误?ReadTimeout错误通常是由Elasticsearch连接超时引起的。当在与Elasticsea......
  • JAVA调用Python脚本执行
    SpringBoot-web环境<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>springboot--启动类@SpringBootApplication(ex......