三级菜单的惨案

三级菜单的惨案

程序: 三级菜单
要求: 
1.  打印省、市、县三级菜单
2.  可返回上一级
3.  可随时退出程序

三级菜单,多简单的东西,想都不用想循环就是了

dic = {
    '山东':{'济宁':{'1':'1','2':'2'},
            '济南':{'11':'11','22':'22'}},
    '北京':{'昌平':{'111':'111','222':'222'},
            '海淀':{'1111':'1111','2222':'2222'}}
}
while 1:
    for i in dic:
        print(i)
    c1 = input('请输入省份:')
    if c1 in dic:

        while 1:
            for j in dic[c1]:
                print(j)
            c2 = input('请输入市:')
            if c2 in dic[c1]:

                while 1:
                    for k in dic[c1][c2]:
                        print(k)
                    c3 = input('请输入县城:')
                    if c3 in dic[c1][c2]:
                        print(dic[c1][c2][c3])
                        # exit()
                    elif c3.upper() == 'Q':
                        exit()
                    elif c3.upper() == 'K':
                        break
                    else:
                        print('请正确输入')
            elif c2.upper() == 'Q':
                exit()
            elif c2.upper() == 'K':
                break
            else:
                print('请正确输入')
    elif c1.upper() == 'Q':
        exit()
    else:
        print('请正确输入')

看着几十行代码分分钟就出来了多简单。既有代码量,有能实现功能。

就是时间长了 看着越发的恶心

自己看着都反胃,我记得有种东西叫递归函数:自己日自己 自己调用自己,

这么多层,功能都差不多自己调用自己多简单,鼓捣了不知道多久以后,新鲜的代码出炉

dic = {
    '山东':{'济宁':{'1':'1','2':'2'},
            '济南':{'11':'11','22':'22'}},
    '北京':{'昌平':{'111':'111','222':'222'},
            '海淀':{'1111':'1111','2222':'2222'}}
}
def demo( dic,old_dic = dic):
    for i in dic:
        print(i)
    info = input('<<<')
    if info in dic:
        if isinstance(dic[info],str):
            print(dic[info])
        else:
            demo(dic[info],dic)
    elif info == 'q':
        exit()
    elif info == 'k':
        demo(old_dic)
    else:
        print('请正常输入')
        demo(dic)
demo(dic,dic)

研究了一会,美滋滋 结果也出来了,但是吧,我自己写的递归自己都看不明白,递归这东西有点太高深了。搞不懂!!

有没有简单的东西,看一眼就能看懂,还不废脑子。

有一个词叫做堆栈。队列:先进先出。栈:先进后出,既然用到了循环,能不能往这上面靠一靠,蹭一蹭热度

我们可以把数据仍到列表里,利用列表的pop来模拟栈,只要下一层中有数据就放到列表中。既不用递归,也不用那么多行代码进行循环。只需要每次循环最后一个元素就可以拿到需要操作的数据,听起来很简单,美滋滋,于是乎继续回炉重造

dic = {
    '山东':{'济宁':{'1':'1','2':'2'},
            '济南':{'11':'11','22':'22'}},
    '北京':{'昌平':{'111':'111','222':'222'},
            '海淀':{'1111':'1111','2222':'2222'}}
}
li = []
li.append(dic)
while li:
    content = li.pop()
    for i in content:
        print(i)
    user_input = input('<<<')
    if user_input in content:
        li.append(content)
        li.append(content[user_input])
        if isinstance(content[user_input],str):
            print('到底了')
    elif user_input.upper() == 'B':
        pass
    elif user_input.upper() == 'Q':
        break
    else:
        print('你输入有问题')
        li.append(content)

emm感觉越来越倒退了,连函数都没封装,我在去封装个函数QAQ

dic = {
    '山东':{'济宁':{'1':'1','2':'2'},
            '济南':{'11':'11','22':'22'}},
    '北京':{'昌平':{'111':'111','222':'222'},
            '海淀':{'1111':'1111','2222':'2222'}}
}
def func(dic):
    li = []
    li.append(dic)
    while li:
        content = li.pop()
        for i in content:
            print(i)
        user_input = input('<<<')
        if user_input in content:
            li.append(content)
            li.append(content[user_input])
            if isinstance(content[user_input],str):
                print('到底了')
        elif user_input.upper() == 'B':
            pass
        elif user_input.upper() == 'Q':
            break
        else:
            print('你输入有问题')
            li.append(content)

func(dic)

一个三级菜单,玩到心力憔悴.啊啊啊啊啊!!!本来开开心心准备装逼,然后发现装逼不成反被操 我要等着去试试能不能用上生成器!!! 心累,没事给自己挖坑玩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值