1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3
4 import getpass #调用getpass模块,避免用户输入的密码展示在命令行
5 import time #调用time时间模块
6
7
8 def login(): #定义函数login,功能:注册时使用
9 print('\033[32m+\033[0m' * 20)
10 print('\033[32m欢迎来到注册中心!!\033[0m')
11 print('\033[32m+\033[0m' * 20)
12 n = [] #定义空列表
13 User=input('User:').strip() #定以变量User,记录用户输入
14 Passwd=getpass.getpass('Passwd:').strip() #同上
15 n.append(User) #将User、Passwd添加到n列表里
16 n.append(Passwd)
17 Name=':'.join(n) #使用join函数将列表转换成字符串以:号分割
18 UserFile.write('%s \n' % Name) #写到用户的文件里
19
20 while True: #定义while循环,只有条件不成立时才会退出循环
21 UserFile=open('/home/haifeng/python_script/day1/user.txt','r+')
22 LockFile=open('/home/haifeng/python_script/day1/lock.txt','r+') #以读写的方式打开文件
23 User={} #定义一个空字典
24 for Line in UserFile.readlines(): #将文件全部一行一行的读取出来,定义为Line
25 key,value=Line.split(':') #定义字典的key,value 以:分割
26 User[key]= value #给字典的key赋值,{'alex': '123\n', 'jack': '456\n'}
27 LockUser=[] #定义一个空列表
28 for a in LockFile.readlines(): #将锁文件里的内容一行一行读进内存
29 LockLine=a.strip() #去掉空格
30 LockUser.append(LockLine) #添加到LockUser列表里
31
32 break_flag=False #定义一个跳出循环的flag,当子循环要求父循环一起跳出循环时,值为True
33 UserName=input('请输入用户名:').strip() #记录用户名输入
34 if len(UserName)==0: #判断输入是否为空,空则跳出当前循环,进入下一次循环
35 print('\033[31m你没有输入,请输入正确用户名\033[0m')
36 continue
37 elif UserName not in User: #如果用户输入用户名不在User里,会提示用户是否注册新用户
38 Num=input('\033[31m无效用户!! 是否注册新用户: y or n:\033[0m').strip()
39 if Num == 'y': #如果用户输入y就是调用上面的login函数注册新用户,n则跳出当前循环
40 time.sleep(1)
41 login()
42 print('\033[32m注册成功!!!\033[0m')
43 else:
44 print('请重新输入!!!')
45 continue
46 elif UserName in LockUser: #如果用户输入用户名在LockUser里直接退出
47 print('账户已经被锁定,请联系管理员进行解锁!!!')
48 break
49 else:
50 Num = 1 #定义计数器
51 for i in range(3): #for循环三次
52 PassWord=getpass.getpass('请输入密码:').strip() #提示用户输入密码,为空重新输入
53 if len(PassWord)==0:
54 print('密码不能为空!!')
55 continue
56 elif PassWord in User[UserName]: #匹配用户名密码
57 print("\033[32m登录成功!祝你购物愉快!!!\033[0m")
58 break_flag=True #登录成功,退出子循环
59 break
60 else:
61 print('密码错误,三次以后账号锁定,你已使用%s次.' % Num)
62 Num += 1 #相反密码输入错误就会自加1,当Num等于4的时候账户锁定
63 if Num == 4:
64 print('账户锁定')
65 LockFile.write('%s \n' % UserName) #将锁定用户写入LockFile里
66 break_flag=True #退出子循环
67 break
68 if break_flag: #判断子循环是否退出,退出则一起退出
69 break