• Python作业之多级菜单


                                                      作业之多级菜单

    菜单实现要求:

    1. 列出菜单选择供选择

    2. 选择对应内容进入下一级菜单

    3. 任何时候都可以选择退出程序或返回上一级菜单

    具体代码如下:

    goods = {'华为':{'A系':{'A1':[1000,1100,1200,],'A2':[2000,2100,2200,],'A3':[3000,3100,3200,],},
                     'B系':{'B1':[4000,4200,4400,],'B2':[5000,5200,5400,],'B3':[6000,6200,6400,],},
                     'C系':{'C1':[7000,7300,7600,],'C2':[8000,8300,8600,],'C3':[9000,9300,9600,],},},
               '小米':{'M系':{'M1':[610,630,650,],'M2':[710,730,750,],'M3':[810,830,850,],},
                     'N系':{'N1':[920,950,980,],'N2':[1020,1050,1080,],'N3':[1120,1150,1180],},
                     'L系':{'L1':[1230,1270,1300,],'L2':[1430,1470,1500,],'L3':[1630,1670,1700,],},},
               '魅族':{'X系':{'X1':[599,699,799,],'X2':[699,799,899,],'X3':[799,899,999,],},
                     'Y系':{'Y1':[1099,1199,1299,],'Y2':[1299,1399,1499,],'Y3':[1499,1599,1699,],},
                     'Z系':{'Z1':[2099,2199,2299,],'Z2':[2399,2499,2599,],'Z3':[2699,2799,2899,],},},}
    print('欢迎来到购物商城!'.center(30,'*'))
    lie = [goods,]#声明一个列表,把上述的字典昨晚列表的元素
    def goods_lie(goods,n):
        '''该函数为多级菜单进入和返回的函数,函数有3个返回值,均是返回函数本事(调用递归)。'''
        if n > 0:
            while True:
                for index,phone in enumerate(goods,1):#使用枚举函数遍历字典的键
                    print(index,phone)
                print('温馨提示:
    1.选择商品编号进入下一级菜单
    2.选择B或者b返回上一级菜单
    3.选择Q或者q退出商城')
                choice = input('请选择您要购买的商品编号进入下一级菜单:').strip()
                if choice.isdigit():#判断输入的信息是否是纯数字
                    if int(choice) in range(1,4):
                        if type(goods) != dict:#判断传入的参数是否不是字典类型
                            print('商品的价格为%s已加入到购物车!'% goods[int(choice)-1])
                            back = input('已经最后一级菜单了,请选择返回或者退出!:').strip()
                            if back == 'B' or  back == 'b':
                                return goods_lie(lie[n-1],n-1)#调用函数本身,获取上一次函数执行的结果
                            elif back == 'Q' or back == 'q':
                                break
                            else:
                                print('请选择返回或者退出!')
                                continue
                        else:
                            price = list(goods.keys())[int(choice)-1]#获取商品编号对应的商品
                            lie.append(goods[price])#把商品字典添加到列表中
                            print('您选择的商品是:',price)
                            return goods_lie(goods[price],n+1)#调用函数本身,进入下一级菜单
                    else:
                        print('商品编号不存在,请重新输入!')
                        continue
                else:
                    if choice == 'B' or choice == 'b':
                        print('已返回上一级菜单!')
                        return goods_lie(lie[n-1],n-1)#调用函数本身,获取上一次函数执行的结果
                    elif choice == 'Q' or choice == 'q':
                        print('已退出购物商城!')
                        break
                    else:
                        print('您的输入有误,请重新输入!')
                        continue
    ret = goods_lie(goods,1)#赋值并调用函数
    

    注:该代码实现功能是:输入相应的编号进入下一级菜单或返回上一级菜单执行的结果,也可以虽然退出程序,使用了递归。

    多级菜单优化版

    import os
    if not os.path.exists('d:\users\three_menu.txt'):
        f = open('d:\users\three_menu.txt','w')
        f.write('''{'华为':{'A系':{'A1':[1000,1100,1200,],'A2':[2000,2100,2200,],'A3':[3000,3100,3200,],},
                         'B系':{'B1':[4000,4200,4400,],'B2':[5000,5200,5400,],'B3':[6000,6200,6400,],},
                         'C系':{'C1':[7000,7300,7600,],'C2':[8000,8300,8600,],'C3':[9000,9300,9600,],},},
                   '小米':{'M系':{'M1':[610,630,650,],'M2':[710,730,750,],'M3':[810,830,850,],},
                         'N系':{'N1':[920,950,980,],'N2':[1020,1050,1080,],'N3':[1120,1150,1180],},
                         'L系':{'L1':[1230,1270,1300,],'L2':[1430,1470,1500,],'L3':[1630,1670,1700,],},},
                   '魅族':{'X系':{'X1':[599,699,799,],'X2':[699,799,899,],'X3':[799,899,999,],},
                         'Y系':{'Y1':[1099,1199,1299,],'Y2':[1299,1399,1499,],'Y3':[1499,1599,1699,],},
                         'Z系':{'Z1':[2099,2199,2299,],'Z2':[2399,2499,2599,],'Z3':[2699,2799,2899,],},},}''')
        f.close()
    with open('d:\users\three_menu.txt','r') as f:
        menus = eval(f.read())#把文件中的内容读到内存中并转化为内存中的数据类型
        print('欢迎来到购物商城!'.center(30,'*'))
        menu = []#声明以空列表来存储上一级菜单
        while True:
            dic = {}#声明一个空字典,方便后续操作
            for index,good in enumerate(menus,1):#使用枚举函数遍历字典的键
                print(index,good)
                dic[index] = good#把序号作为字典的key,商品名称作为字典的value传入该字典中
            print('温馨提示:
    1.选择商品编号进入下一级菜单
    2.选择B或者b返回上一级菜单
    3.选择Q或者q退出商城')
            if type(menus) == list:#判断要枚举的菜单是否是列表类型
                choose = input('33[31m请选择你要购买的商品编号:33[0m').strip()
                if choose.isdigit():#判断输入的是否是纯数字
                    if  int(choose) <= len(menus):
                        print('您选择的%s已加入购物车!'% menus[int(choose)-1])
                        print('33[31m最后一级菜单,只能返回和退出!33[0m')
                    else:
                        print('out range')
                else:
                    if choose == 'q' or choose == 'Q':
                        print('已退出购物商城!')
                        break
                    elif choose == 'b' or choose == 'B':
                        menus = menu[-1]#把菜单赋值给列表的最后一个元素
                        menu.pop()#删掉列表的最后一个元素
                    else:
                        print('error')
            else:
                choice = input('请选择您要购买的商品编号进入下一级菜单:').strip()
                if choice.isdigit():
                    if int(choice) in dic.keys():
                        menu.append(menus)#把菜单添加到列表中
                        menus = menus[dic[int(choice)]]#重新赋值菜单
                    else:
                        print('range out')
                else:
                    if choice == 'B' or choice == 'b':
                        print('由于当前处于首层菜单,因此本次返回将退出程序!')
                        if len(menu) < 1:break
                        menus = menu[-1]#把菜单赋值给列表的最后一个元素
                        menu.pop()#删掉列表的最后一个元素
                    elif choice == 'Q' or choice == 'q':
                        print('已退出购物商城!')
                        break
                    else:
                        print('您的输入有误,请重新输入!')
    

    注:主要优化点为:

    1. 把菜单存储到文件中
    2. 简化代码
    3. 弃用递归(递归效率偏低)
  • 相关阅读:
    298. Binary Tree Longest Consecutive Sequence
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    163. Missing Ranges
    336. Palindrome Pairs
    727. Minimum Window Subsequence
    211. Add and Search Word
    年底购物狂欢,移动支付安全不容忽视
    成为程序员前需要做的10件事
    全球首推iOS应用防破解技术!
  • 原文地址:https://www.cnblogs.com/single-boy/p/7503528.html
Copyright © 2020-2023  润新知