作业需求:
基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
首先看到这个需求感觉不太难,立刻在脑子里过了一边思路,如下:
1、用两个列表分别保存用户名和密码且保证是一一对应关系用来验证密码是否正确
2、采用在列表中查找位置函数找到用户输入的用户名在列表中的位置,
4、如果密码不正确,将用户名写入文件,并且在下一行跟着输入错误次数
5、每次登录都验证文件里是否存在输入错误密码过的用户名和验证错误次数是否达到3次但是当真正写起来才发现不是想象中的那么容易,遇到的问题超级多首先写出来基本登录程序
user_name=['a','b','c','d'] #密码和字符串分别保存到两个列表内并对应位置
passward=['1','2','3','4']
input_user_name=str(input("请输入用户名")) #将格式转化为字符串格式
input_passward=str(input("请输入密码"))if input_user_name in user_name: #判断用户名是否存在
user_name_position = user_name.index(input_user_name) #获得用户名在列表中的位置
if input_passward == passward[user_name_position]: #对应用户名位置判断密码是否正确
print("登陆成功")
开始就遇到第一个问题,不知道列表的基本使用方法,然后去百度现查的user_name.index(list) 这个方法浪费不少时间
这是查过的列表使用方法的连接
http://www.cnblogs.com/Devilf/p/8039805.html
然后第二个问题就是输入的用户名和密码要转换成字符串格式才能更好的在列表中查找它所在的位置,否则输入数字默认未int型在列表中找不到
ps:要考虑到当用户不存在的时候怎么办
然后要先检索文件中是否有过这个账号的错误记录,没有就新加
后面就该写当用户输入密码错误的时侯然后要先检索文件中是否有过这个账号的错误记录,没有就新加有的话将错误次数写入一个列表然后写入文档
当时我就想那就写呗,没啥大不了的,
然后还是像上个一样网上现找写入文档的操作办法
当然又忽略了一点,每次都要从文件中读取写入列表对列表进行修改然后再写回文档
Python中文件的读取和写入
https://blog.csdn.net/sinat_34474705/article/details/77389258
然后我写不下去了,出的错误太多了,还是回去好好补补我的基础吧,本想着一会就能写完呢,谁知道昨天写了凌晨将近两点,
对了,还有当你不知道怎么命名变量的时候,百度翻译是一个很好的选择
还有下次写程序的时候一定要把思路想清楚,要从头想到尾,否则你不知道一会又出啥问题了,有必要先把流程图画出来
最后附上我的超级超级烂的代码吧,
# input_user_name='a'
user_name=['a','b','c','d'] #密码和字符串分别保存到两个列表内并对应位置
passward=['1','2','3','4']
error_record=[]
def judge():
error_record = []
input_user_name=str(input("请输入用户名")) #将格式转化为字符串格式
input_passward=str(input("请输入密码"))
if input_user_name in user_name: # 判断用户名是否存在
user_name_position = user_name.index(input_user_name) # 获得用户名在列表中的位置
if input_passward == passward[user_name_position]: # 对应用户名位置判断密码是否正确
print("登陆成功")
else:
with open('error_record.txt') as f: # 打开文件并返回对象
for line in f: # 对每一行数据进行循环
rs = line.replace('\n', '') # 替换换行符
error_record.append(rs) # 循环放到列表内
f.close()
print(error_record)
if input_user_name in error_record: # 如果列表里有这个用户名
user_name_position1 = error_record.index(input_user_name) # 找到这个用户名的位置
print(user_name_position1)
if error_record[user_name_position1 + 1] == '1': # 判断输入错误次数
if input_passward == passward[user_name_position]: # 对应用户名位置判断密码是否正确
print("登陆成功")
judge()
else:
error_record[user_name_position1 + 1] = '2' #
print(error_record)
with open('error_record.txt', 'w') as f:
f.truncate() # 文档清空
for i in error_record: # 循环写入文档新列表
with open('error_record.txt', 'a') as f:
f.write(i)
f.write('\n')
f.close()
judge()
elif error_record[user_name_position1 + 1] == '2':
if input_passward == passward[user_name_position]: # 对应用户名位置判断密码是否正确
print("登陆成功")
judge()
else:
error_record[user_name_position1 + 1] = '3' #
print(error_record)
with open('error_record.txt', 'w') as f:
f.truncate() # 文档清空
for i in error_record: # 循环写入文档新列表
with open('error_record.txt', 'a') as f:
f.write(i)
f.write('\n')
f.close()
judge()
elif error_record[user_name_position1 + 1] == '3':
print("登录失败,账户已经被锁定")
judge()
else:
error_record.append(input_user_name)
error_record.append('1')
print(error_record)
with open('error_record.txt', 'w') as f:
f.truncate() # 文档清空
for i in error_record: # 循环写入文档新列表
with open('error_record.txt', 'a') as f:
f.write(i)
f.write('\n')
f.close()
judge()
judge()
然后流程图,待会补吧