为了以后更好更快速的复习,此博客记录我对作业的总结。对于基础作业,我认为最重要的是过程,至于实现是不是完美,代码是不是完美,虽然重要,但是作业过程中,用到的知识点是值得总结和整理的。一.模拟登陆:
1. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
思路:
1)输入时用户名后,先判断用户名是否被锁,然后检查用户名是否存在用户数据库;
2)输入相同不存在用户名3次,此用户名被锁;
3)输入用户名存在时才可输入密码,相同用户名时,输入密码错误三次,此用户名被锁;
4)若每次都没输入存在的用户,则再次要求输入用户,直到达到总输入次数;
基本流程图:
代码:
cat user_login.py #主程序
#!#!/usr/bin/env python #_*_coding:utf-8_*_ ''' * Created on 2016/10/10 22:13. * @author: Chinge_Yang. ''' import os import getpass retry_max = 3 retry_count = 0 user_file = "user.txt" lock_file = "user_lock.txt" user_same = 0 user_tmp = "" if not os.path.exists(lock_file): #不存在时,则创建 f = open(lock_file,'w') f.close() while retry_count < retry_max: #输入用户名 user_name = input("Please input your name:") #输入的用户名和上次输入的对比 if user_name == user_tmp: #用户一样数加1 user_same += 1 else: #用户一样数归0 user_same = 0 #输入的用户名存为临时变量 user_tmp = user_name #判断用户是否被锁 lock_check = open(lock_file) for line in lock_check: line = line.split() #用户被锁,打印提示 if user_name == line[0]: exit("User \033[1;31;40m%s\033[0m is locked!" % user_name) lock_check.close() #查看是否存在于用户数据库 user_check = open(user_file) for l in user_check: l = l.split() user = l[0] passwd = l[1] if user_name == user: #输入密码 #user_passwd = input("Please input your password:") user_passwd = getpass.getpass("\033[1;33;40mPlease input your password:\033[0m") #判断密码是否正确 if user_passwd == passwd: exit("\033[1;32;40mWelcome to you!\033[0m") else: print("User \033[1;31;40m%s\033[0m password is error!" % user_name) #用户存在于数据库,跳出循环 break else: print("User \033[1;31;40m%s\033[0m not match in the user file!" % user_name) user_check.close() if user_same >= 2: print("User \033[1;31;40m%s\033[0m name was locked!" % user_name) #将用户名写入到锁定文件中 file = open(lock_file,"a") file.write(user_name+"\n") file.close() retry_count += 1
user.txt文件内容格式:
cat user.txt
apache 123 jim 234 docker 333 fank yhn
总结:
1.getpass模板用于输入密码时,不显示明文;
2.os.path.exists(文件路径)用于判断文件是否存在;
3.input的用法,版本3,默认输入的内容是字符类型,如果是变量名,则为此变量名的数据类型;
4.if判断语句用法;
5.while循环语句用法;
6.split()指定分隔符对字符串切片用法;
7.print(“%s” % name)等格式化输出;
8.颜色输出用法:手打出来 \033[32;1m内容\033[0m ;
9.数学算法使用;
二.三级菜单:1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 菜单数据保存在文件中
思路:
1.菜单数据使用字典保存在文件中,使用import读取;
2.获取一级菜单;
3.获取二级菜单;
4.获取三级菜单;
5.使用循环打印菜单;
基本流程图:
代码:
cat Three_layer_menu.py #主程序
#!/usr/bin/env python #_*_coding:utf-8_*_ ''' * Created on 2016/10/16 21:31. * @author: Chinge_Yang. ''' import sys import menu while True: #定义一层菜单为字典 one_dict = {} #获取字典所有的键 one_layer = menu.menu.keys() #获取字典所有的枚举 one_enu = enumerate(one_layer) #一层菜单字典 for index1,value1 in one_enu: one_dict[index1]=value1 for k1 in one_dict: print ("\033[32m%d\033[0m --> %s" %(k1,one_dict[k1])) print ("输入【back】:返回;【quit】:退出") once_select = input("请输入你的选择:\n").strip() if once_select.isdigit(): once_select = int(once_select) if 0 <= once_select < len(one_dict): print("---->进入一级菜单 \033[32m%s\033[0m" %(one_dict[once_select])) while True: #定义二层菜单为字典 two_dict = {} # 获取字典所有的键 two_layer = menu.menu[one_dict[once_select]].keys() # 获取字典所有的枚举 two_enu = enumerate(two_layer) # 二层菜单字典 for index2, value2 in two_enu: two_dict[index2] = value2 # 打印二层菜单 for k2 in two_dict: print("\033[32m%d\033[0m --> %s" % (k2, two_dict[k2])) print("输入【back】:返回;【quit】:退出") twice_select = input("请输入你的选择:\n").strip() if twice_select.isdigit(): twice_select = int(twice_select) if 0 <= twice_select < len(two_dict): print("---->进入二级菜单 \033[32m%s\033[0m" % (two_dict[twice_select])) # 定义三层菜单列表 three_layer = menu.menu[one_dict[once_select]][two_dict[twice_select]] while True: # 打印三层菜单 for k3 in three_layer: print (k3) print ("输入【back】:返回;【quit】:退出") three_select = input("请输入你的选择:\n").strip() if three_select == "back": break elif three_select == "quit": sys.exit ("----谢谢使用----") continue else: if twice_select == "back": break elif twice_select == "quit": sys.exit ("----谢谢使用----") print ("\033[31m请输入数字\033[0m") else: print("----\033[31m数字超出范围,请重新输入!\033[0m----") else: if once_select == "back": break elif once_select == "quit": sys.exit ("----谢谢使用----") print ("\033[31m请输入数字\033[0m")
cat menu.py
#!/usr/bin/env python # _*_coding:utf-8_*_ ''' * Created on 2016/10/16 19:37. * @author: Chinge_Yang. ''' menu = { "家用电器": { "电视": [ "合资品牌电视", "国产品牌电视", "互联网品牌电视" ], "空调": [ "壁挂式空调", "柜式空调", "中央空调", "空调配件" ], "洗衣机": [ "滚筒洗衣机", "洗烘一体机", "波轮洗衣机", "迷你洗衣机", "洗衣机配件" ] }, "电脑": { "电脑整机": [ "笔记本", "游戏本" "平板电脑", "平板电脑配件", "台式机", "一体机服务器", "笔记本配件" ], "电脑配件": [ "显示器", "CPU", "主板", "硬盘", "内存" ], "外设产品": [ "鼠标", "键盘", "键鼠套装", "网络仪表仪器", "U盘", "移动硬盘" ] } }
总结:
1.字典的用法,包括获取key,value及相关函数用法;
2.列表的用法,遍历列表的用法;
3.import导入py文件用法;