初涉python,用户登录功能

来源:互联网 发布:网络部招新面试问题 编辑:程序博客网 时间:2024/06/06 01:58

前段时间,部门组织学习python,然后群内突然出现了一份“家庭作业”的公告,内容为:

1、-输入用户名密码

2、-认证成功后显示欢迎信息

3、-输错三次后锁定

刚看到这个的时候,我内心是崩溃的,作为没有任何代码基础的我,一脸懵逼的看着电脑屏幕,不知从何下手,然后我就开始了漫长的百度生涯,经过不懈努力之后,版本V1.0终于诞生辣,代码如下:

#coding:utf-8username = 'chenhao'password = '123456'user_input = raw_input("请输入用户名:")pass_input = raw_input("请输入密码:")if user_input == username and pass_input == password:    print "登陆成功!"else:    print "登陆失败!"
执行结果 - 成功:
请输入用户名:chenhao请输入密码:123456登陆成功!
执行结果 - 失败:
请输入用户名:123请输入密码:123登陆失败!
以上,版本V1.0仅仅是实现了“输入用户名、密码,认证成功后显示欢迎信息”的功能,并没有输入三次错误锁定的判断,这个时候输错一次密码,就退出程序了,于是我又开始继续百度

----------------------------------------------------------------------------版本分割线---------------------------------------------------------------------

版本V2.0
#coding:utf-8 username = 'chenhao'    password = '123456'    for i in range(3):       user_input = raw_input("请输入用户名:")        pass_input = raw_input("请输入密码:")        if username == user_input and password == pass_input:          print "登陆成功!"            break       else:          print "登陆失败!" 
执行结果 - 成功:
请输入用户名:chenhao请输入密码:123456登陆成功!
执行结果 - 失败:
请输入用户名:123请输入密码:123登陆失败!请输入用户名:123请输入密码:abc登陆失败!请输入用户名:123请输入密码:456登陆失败!
以上:版本V2.0与V1.0相比,增加了一个for循环的判断,允许用户有3次输错密码的机会,但是与我们作业的最终要求还差了一点
----------------------------------------------------------------------------版本分割线---------------------------------------------------------------------
版本V3.0:
#coding:utf-8username = 'chenhao'    password = '123456'     xunhuancishu = 0       f = open('black_user.txt','r')     black = f.read()         f.close()user_input = raw_input('请输入用户名:')   for i in range(1):                            if user_input in black:                         print "你的用户已被锁定"        exit()    else:        continuefor i in range(3):                                                 pass_input = raw_input('请输入密码:')                            if username == user_input and password == pass_input:              print "登陆成功"                                               break                                                      else:                                                               print "用户名或密码输入错误,当前输入错误次数为",xunhuancishu+1,",共计输入错误3次,将锁定用户"    xunhuancishu += 1                                                   if xunhuancishu == 3:                                                   print "对不起,用户名或密码已错误3次,将锁定用户"                 f = open('black_user.txt','a')                                    f.write(user_input)                                             f.close()
执行结果 - 成功:
请输入用户名:chenhao请输入密码:123456登陆成功
执行结果 - 失败:
请输入用户名:abc请输入密码:123用户名或密码输入错误,当前输入错误次数为 1 ,共计输入错误3次,将锁定用户请输入密码:456用户名或密码输入错误,当前输入错误次数为 2 ,共计输入错误3次,将锁定用户请输入密码:789用户名或密码输入错误,当前输入错误次数为 3 ,共计输入错误3次,将锁定用户对不起,用户名或密码已错误3次,将锁定用户
执行结果 - 锁定:
请输入用户名:abc你的用户已被锁定
以上,可以看出版本V3.0,比V2.0多出了16行代码,功能已经比较完善了,这里我使用了一个txt文件作为黑名单来记录被锁定的用户名,然后在用户输入用户名的开始读取这个黑名单,如果发现黑名单中有这个用户,则直接锁定,不给予输入密码的机会;不仅实现了输错三次锁定的功能,并且在提示语方面也进行了优化,在输错密码时,会提示剩余尝试次数,但经过测试,发现其实版本V3.0还存在着bug
bug:当输入的新用户名包含于黑名单中的用户名时,也会被锁定,例如我之前被锁定的其实是“123”这个用户,但在我下次输入另一个用户名“12”的时候,“12”也被锁定了,但其实这两个用户是独立的两个用户,并没有关联,这样是不可以的
思考 + 百度后,在版本V4.0解决了这个bug
------------------------------------------------版本分割线-------------------------------------------------------------
版本V4.0:
#coding:utf-8username = 'chenhao'   password = '123456'     xunhuancishu = 0        f = open('black_user.txt','r')      black = f.read().splitlines()        f.close()user_input = raw_input('请输入用户名:')   for i in range(1):                           if user_input in black:                         print "你的用户已被锁定"        exit()    else:        continuefor i in range(3):                                                 pass_input = raw_input('请输入密码:')                            if username == user_input and password == pass_input:              print "登陆成功"                                               break                                                     else:                                                              print "用户名或密码输入错误,当前输入错误次数为",xunhuancishu+1,",共计输入错误3次,将锁定用户"    xunhuancishu += 1                                                 if xunhuancishu == 3:                                                   print "对不起,用户名或密码已错误3次,将锁定用户"                f = open('black_user.txt','a')                                      f.write(user_input + '\n')                                 f.close()
执行结果 - 成功:
请输入用户名:chenhao请输入密码:123456登陆成功
执行结果 - 失败:
请输入用户名:abc请输入密码:123用户名或密码输入错误,当前输入错误次数为 1 ,共计输入错误3次,将锁定用户请输入密码:456用户名或密码输入错误,当前输入错误次数为 2 ,共计输入错误3次,将锁定用户请输入密码:789用户名或密码输入错误,当前输入错误次数为 3 ,共计输入错误3次,将锁定用户对不起,用户名或密码已错误3次,将锁定用户
执行结果 - 锁定:
请输入用户名:abc你的用户已被锁定

以上,版本V4.0的代码,大致上和V3.0没有什么区别,唯一的区别在读取黑名单的时候,加了一个以数组的形式进行读取,并且在写入的时候,将每次写入的数据进行换行,这样可以保证每次读取到的数据之间,不会存在重叠的情况,从而解决版本V3.0的bug
功能比较简单,目前此次作业的最终版本就是V4.0,已经上交,因为之前完全没有代码基础,上面这些也都是我一边百度,一边问同事的,也许还有一些我没有发现的问题,以及代码风格啥的有不妥之处请见谅,希望能给同样没有代码基础,且初涉python的小伙伴一点帮助

0 0