python练习案例07之登录接口升级版

190 阅读4分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

题目

 # :编写用户登录接口
 #1、输入账号密码完成验证,验证通过后输出"登录成功"
 #2、可以登录不同的用户
 #3、同一账号输错三次锁定,(提示:锁定的用户存入文件中,这样才能保证程序关闭后,该用户仍然被锁定)

users.txt内容

 r0ya1:r0ya1
 root:root
 admin:admin888
 abc:123

black_users.txt开始为空

完整代码:

 # 获取用户输入的用户名和密码
 flag = True
 black_list = []
 while flag:
     in_user = input('请输入用户名:').strip()
     in_pwd = input('请输入密码:').strip()
 ​
 # 打开两个文件,可读写模式
     with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
         open('./users.txt',mode='rt',encoding='utf-8') as f2:
         # 先判断是否在黑名单内,如果在,直接锁定,退出循环
         for line in f1:
             username = line.strip()
             if username == in_user:
                 print('抱歉您的账号被锁定')
                 flag = False
                 break
         # 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
         for line in f2:
             username,password = line.strip().split(':')
             if username == in_user and password == in_pwd:
                 print('登陆成功')
                 flag = False
                 break
         # 如果符合锁定条件,则开始计数,准备锁定账号
             elif username == in_user and password != in_pwd:
                  print('账号密码错误')
                  black_list.append(in_user)
                  # 同一个账号,密码输错三次则锁定
                  if black_list.count(in_user) >= 3:
                     flag = False
                     print('抱歉,您的密码输错三次,账号已被锁定')
                     username = in_user + '\n'
                     f1.write(username)
                     break

思路:

1.首先我们还是先写个用户输入,并处理空白符

 in_user = input('请输入用户名:').strip()
 in_pwd = input('请输入密码:').strip()

2.然后打开两个文件,users存放已注册账号,black_users为锁定用户,存放输错三次密码的账号

 # 打开两个文件,可读写模式
     with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
         open('./users.txt',mode='rt',encoding='utf-8') as f2:

3.先判断输入的用户名是否在黑名单中,如果在,直接结束

 # 先判断是否在黑名单内,如果在,直接锁定,退出循环
 for line in f1:
     username = line.strip()
     if username == in_user:
         print('抱歉您的账号被锁定')

4.如果不在,则判断是否与已注册账密一致,若一致,则直接登录成功

  # 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
 for line in f2:
     username,password = line.strip().split(':')
     if username == in_user and password == in_pwd:
         print('登陆成功')

5.如果同一个账号输入密码三次,我们需要锁定该账号,这里我们需要针对单个账号进行锁定,所以我们可以事先设个列表

 black_list = []

6.如果符合锁定条件则把账号添加到这个列表中

  # 如果符合锁定条件,则开始计数,准备锁定账号
 elif username == in_user and password != in_pwd:
     print('账号密码错误')
     black_list.append(in_user)

7.接着判断这个账号在列表中的个数是否大于等于3,若是,则提示账号已被锁定,然后写入black_users.txt文件中

  if black_list.count(in_user) >= 3:
     print('抱歉,您的密码输错三次,账号已被锁定')
     username = in_user + '\n'
     f1.write(username)

8.现在整个重要代码已经完成了,但是我们还需要一个循环,因为我们是需要用户重复输入用户密码,如果用户在黑名单之中,则退出循环,不必再输入;如果用户输入的账密正确,则退出循环,不必再输入;如果账号对了,密码错误则重新输入,若错了三次,则锁定该账号;若账号密码都不对,则重复输入,所以最后就是

 # 获取用户输入的用户名和密码
 flag = True
 black_list = []
 while flag:
     in_user = input('请输入用户名:').strip()
     in_pwd = input('请输入密码:').strip()
 ​
 # 打开两个文件,可读写模式
     with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
         open('./users.txt',mode='rt',encoding='utf-8') as f2:
         # 先判断是否在黑名单内,如果在,直接锁定,退出循环
         for line in f1:
             username = line.strip()
             if username == in_user:
                 print('抱歉您的账号被锁定')
                 flag = False
                 break
         # 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
         for line in f2:
             username,password = line.strip().split(':')
             if username == in_user and password == in_pwd:
                 print('登陆成功')
                 flag = False
                 break
         # 如果符合锁定条件,则开始计数,准备锁定账号
             elif username == in_user and password != in_pwd:
                  print('账号密码错误')
                  black_list.append(in_user)
                  # 同一个账号,密码输错三次则锁定
                  if black_list.count(in_user) >= 3:
                     flag = False
                     print('抱歉,您的密码输错三次,账号已被锁定')
                     username = in_user + '\n'
                     f1.write(username)
                     break

\