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