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("\n" + username) def main(): retry_count = 0 retry_limit = 3 while retry_count < retry_limit: username = input("\033[32:lm请输入用户名:\033[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("\033[32:lm用户 %s 已经被锁定!\033[0m" %username) if __name__ == "__main__": main()