Python习题小程序(1)

Python练习小程序(1)

题目:编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
a={'Breakering':'break666666','Profhua':'hua666666'} #创建一个字典,相当于数据库
try:
    d = open('b.txt')               #以阅读模式打开黑名单,黑名单文件存在的情况下
except IOError:
    d = open('b.txt','w')           #黑名单文件不存的情况下,创建黑名单文件
    d.close()
    d= open('b.txt')                #创建完毕并进行阅读
for i in range(3):                  #允许用户进行三次尝试
    n=input('请输入你的名字:')
    if n in a.keys():            #如果用户名在数据库里面
        if n not in d.read():           #如果用户名不在黑名单里面
            for k in range(3):       #允许用户进行三次密码输入尝试
                m=input('请输入你的密码:')
                if m == a[n]:         #如果用户名和密码匹配
                    print('登陆成功!')
                    break             #成功登陆并退出循环
                else:
                    print('密码错误')  #否则提示密码错误继续循环
                    if k == 2 :        #如果输入次数已经达到3次
                        with open('b.txt','a') as c:  #打开黑名单,并将该用户放进去
                            c.write(n+'\n')
                            print('该用户已被锁定')
            break                      #用来退出外部循环
        else:
            print('该账户已被锁定')      #用户在黑名单,则输出该用户已被锁定
            break                        #用来退出外部循环
    else:
        print("用户名不存在")        #用户名不在数据库,则输出用户名不存在
d.close()

 

第一次写,不够完善!

1楼eaxebx
if n not in d.read(): 这句是有问题的,第一次故意输入错误,可以绕过黑名单
Re: Breakering
@eaxebx,谢谢大神指点,毕竟小白第一次考虑不周,现在发现将if n not in d.read():和if n in a.keys():这两个条件换下位置就可以修复这个BUG,大神看是不是这样!