zoukankan      html  css  js  c++  java
  • day1 作业二:多级菜单操作

    作业二:多级菜单

    (1)三级菜单

    (2)可以次选择进入各子菜单

    (3)所需新知识点:列表、字典

    要求:输入b返回上一层,输入q退出整个程序

    思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户可以根据内容选择要查看的东西,因此要使用while循环来进行操作,要有两层循环,第一层是b负责的,第二层是q负责的,要想退出整个循环,输入q结束整个大的循环,输入b结束内层循环,跳出内层循环之后会继续执行下面的循环。

    流程图如下:

    上面是程序大概的流程图:

        过程:

      (1)首先要有一个字典,存储三级菜单;

      (2)展示一级菜单内容;

      (3)用户输入查看的一级菜单内容;

      (4)展示二级菜单内容;

      (5)用户输入查看二级菜单内容

      (6)展示三级菜单内容;

      (7)用户查看三级菜单相应内容。

    代码如下:

    import collections
    #导入collections用于导入有序字典
    dic = collections.OrderedDict()
    #有序字典
    dic["河南"] = {
        "南阳":["邓州","南召","西峡","桐柏","新野","方城","镇平","宛城区"],
        "洛阳":["老城区","孟津县","宜阳县","伊川县","洛宁县","栾川县","洛龙区"],
        }
    dic["湖南"] = {
        "长沙":["开福区","望城区","岳麓区","芙蓉区","宁乡县","天心区","星沙"],
        "娄底":["涟源","双峰","冷水江市"],
        }
    
    dic["广东"] = {
        "广州":["越秀区","花都区","天河区","增城区"],
        "深圳":["罗湖区","福田区","宝安区","盐田区","龙岗区","龙华区","坪山区"],
    }
    
    
    active = True
    #标识符
    d1 = collections.OrderedDict()
    #定义一个空的字典,用户存放一级菜单内容
    d2 = collections.OrderedDict()
    #定义一个空的有序字典,用于存放二级菜单
    d3 = []
    #定义一个空的列表,用于存放三级菜单
    while active:
        #进入一级菜单
        print("省的编号   省的名称")
        for index1,province in enumerate(dic.keys(),1):
            print("  %s        %s  "%(index1,province))
            d1[index1] = province
            #把省的编号和对应的名称放到字典中
        num1 = input("请输入你要查看省的编号:")
        if num1.isdigit():
            #判断用户输入的是否是数字化编号
            if int(num1) > len(d1) or int(num1) < 1:
                print("对不起,你输入的编号有误,请重新输入")
            else:
                print(d1[int(num1)])
        else:
            if num1 == "q":
                active = False
            else:
                print("您输入的不是数字编号,请输入正确的数字编号!")
        while active:
            #键入二级菜单
            print("市的编号   市的名称")
            for index2,city in enumerate(dic[d1[int(num1)]].keys(),1):
                print("  %s        %s  " % (index2, city))
                d2[index2] = city
            num2 = input("请输入你要查看市的编号:")
            if num2.isdigit():
                if int(num2) > len(d2) or int(num2) < 1:
                    print("您输入的市的编号不对,请重新输入!")
                else:
                    print(d1[int(num1)],"      ",d2[int(num2)])
            else:
                if num2 == "b":
                    #如果用户输入的是b退出当前循环,调到上一次循环
                    break
                elif num2 == "q":
                    active = False
                else:
                    print("您输入的编号有误,请输入正确的数字编号")
            while active:
                #进入三级菜单
                print("县区编号    县区名称")
                d3 = dic[d1[int(num1)]][d2[int(num2)]]
                for index3,place in enumerate(d3,1):
                    print("  %s        %s  " % (index3, place))
                num3 = input("请输入你要查询的县/区的编号:")
                if num3.isdigit():
                    #判断用户输入的字符串是否是数字格式的
                    if int(num3) > len(d3) or int(num3) < 1:
                        print("您输入的查询编号超过范围,请重新输入!")
                    else:
                        print(d1[int(num1)], "      ", d2[int(num2)],"      ",d3[int(num3)-1])
                else:
                    if num3 == "b":
                        break
                    elif num3 == "q":
                        active = False
                    else:
                        print("您输入的查询编号格式不对,请重新输入!")

        上面代码中,我们有三级菜单,相应的也有三个循环,每个循环对应相应的菜单,可以在自己的循环中终止自己的本次循环和系统的所有循环,另外需要注意的是,我们经常使用input()输入数字,在本例中,我们输入字符字母"b"和字符数字,这样的情况如果不加判断就会造成操作,因为字符字母格式是不能够int()的。因此我们首先判断了用户输入的是否是数字。

    import sys
    
    account_file = "user_file"
    locked_file = "lock_file"
    
    def deny_account(username):
        print("您的用户已经被锁定!")
        with open(locked_file,"a") as deny_f:
            deny_f.write("
    " + username)
    
    def main():
        retry_count = 0
        retry_limit = 3
        while retry_count < retry_limit:
            username = input("33[32:lm请输入用户名:33[om")
            with open(locked_file,"r") as lock_f:
                #采用with的文件打开方式,防止忘记f.close()关闭文件
                """
                lines = []
                for line in lock_f.readlines():
                    lines.append(line.strip())
                if username in lines:
                """
                for line in lock_f.readlines():
                    if len(line) == 0:
                        continue
                    if username == line.strip():
                        sys.exit("33[32:lm用户 %s 已经被锁定!33[0m" %username)
    
    if __name__ == "__main__":
        main()  
  • 相关阅读:
    Python标准模块--logging
    Spark中决策树源码分析
    常见的相似或相异程度计算方法
    mpi4py实践
    集成学习
    决策树
    git使用
    Ubuntu 14.04 64bit 安装tensorflow(GPU版本)
    KNN算法
    一致性哈希算法原理及其在分布式系统中的应用
  • 原文地址:https://www.cnblogs.com/gengcx/p/6834067.html
Copyright © 2011-2022 走看看