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,大神看是不是这样!