作业要求:
1、输入用户名和密码
2、输错三次密码就锁定用户拉入黑名单
3、认证成功后输出欢迎信息
现有知识掌握解题,首先创建两个文件:
1.创建用户黑名单文本user_lock.txt
user_lock=open("user_lock.txt","w") user_lock.write("jake\n")#随意先写进去几个黑名单 user_lock.write("jason\n") user_lock.close()
2.创建可登陆用户密码列表文本user_pwd.txt
user_list=['lily','000000','lucy','111111','mike','222222'] user=str(user_list)
#调试zuoye1.py时,发现userpwd的输出结果为:["['lily'", " '000000'", " 'lucy'", " '111111'", " 'mike'", " '222222']"]
user=user.replace("[","")#去掉[ user=user.replace("'","")#去掉" user=user.replace("]","")#去掉],userpwd的输出结果为:['lily', ' 000000', ' lucy', ' 111111', ' mike', ' 222222']
user=user.replace(" ","")#去掉空格,userpwd的输出结果终于为:['lily', '000000', 'lucy', '111111', 'mike', '222222']
user_pwd=open("user_pwd.txt","w")
user_pwd.write(user)
user_pwd.close()
以上创建好后,可供后面程序读写判断,才能玩得起来,下面就是作业的内容了:
zuoye1.py
while 1:#我只是单纯滴想让用户在以下几种情况下,如果想再尝试输入别的用户名和密码都可以再次输入,其他知识暂且不会也没多想哈哈 user_lock=open("user_lock.txt","r+")#读取黑名单 userlock=user_lock.read().split() user_pwd=open("user_pwd.txt","r+")#读取用户名密码列表 userpwd=user_pwd.read().split(',')#需要将['lily,000000,lucy,111111,mike,222222']分隔为各个list元素 login_user=input("please input your username:") if login_user in userlock:#如果是黑名单中的账号 print("Locked")#信息提示已锁,返回到请输入用户名 elif login_user not in userpwd:#如果不是黑名单中的也不是正常账户列表中的 print("User does not exist")#信息提示不存在此用户名,返回到请输入用户名 else:#最后一种情况就是属于正常账户列表中的 for i in range(3):#最多进行三次密码输入验证 loginpwd=input("please input your password:") if loginpwd==userpwd[userpwd.index(login_user)+1]:#如果和userpwd中该用户login_user的密码相匹配 print("Welcome,%s!"%(login_user))#欢迎 break#跳出for循环,返回用户名输入
elif i==2 and loginpwd!=userpwd[userpwd.index(login_user)+1]:#如果输入第三次后,依然和密码不匹配 print("LOCKED")#信息提示账号被锁 user_lock.write(login_user+'\n')#随即写入user_lock.txt文本文件 break#跳出for循环,返回用户名输入
else:#输入第一次不匹配密码,输入第二次不匹配密码 print("WRONG!")#每次都给出信息提示账号错误,返回请输入密码,直到第三次密码也不对即执行上面的elif内部语句 continue#跳出本次循环,继续执行for的下一次循环 user_pwd.close() user_lock.close()
作业总结:
1.本次作业,花费我最长时间的就是不理解怎么把用户密码列表中的密码和用户进行匹配从而进行判断,通过看http://www.cnblogs.com/sanjiang/p/5089400.html,想起使用list的userpwd.index(login_user)+1,如有神助,顺利解决这个问题
2.还通过该博客和网上学习,了解并运用了.split()分割用法,虽然很粗浅,以后用到更深的再现学吧
3.忘了怎么知道的.replace(),成功解决了让我花费很久很久的列表显示问题,才能得以正常去判断用户名
最感谢的还是单位同事,做C#开发的,教会了我怎么去调试程序,才知道调试是多么的有必要和多强大哈哈哈,终于解决了我遇到的前三个问题,老司机带路,棒棒哒!