今天是第一天写博客,也是第一天开始学习全栈,怀着激动的小心情,开始了我的码农历程,嘎嘎嘎,一个拥有8块腹肌的程序猿诞生了。
题目内容:
- 用户名和密码
- 登陆成功后显示欢迎信息
- 输错3次后显示锁定
- (输入的用户名和密码是否正确是却决于能否在文件文本中找到输入信息,所以牵扯到文件读写。)
- (我是用户名和密码组成一个字典值存在文本中的想法)
知识点:
---input输入---流程判断---for循环--- 列表(append,insert)---字典---文件读写---
正文开始了:
一 . 第一部分:
-
f.readlines()能获取文本中每一行的内容,返回列表类型(因为一次获取一行,所以列表中的每个元素都是一行内容且有个换行符,每个元素的类型是"str"类型)
-
因为需要获得dict类型的数据,所以需要用for循环遍历,并用eval()函数去掉每个元素的引号,使其由“str”变成“dict”(因为我在文件中写的方式就是字典类型,只不过用文件读取方式返回列表类型后变成了str类型,所以用eval()去掉引号后就又变成了原来的数据类型)
counts = 0 f = open('E:/old_chid_study/day1/name_password.txt') fo = open('E:/old_chid_study/day1/Error_data.txt', 'w+') lists = [] for line in f.readlines(): lists.append(line.strip()) # 去掉文件中的\n print(type(eval(lists[0]))) # 检测eval的功能
二 . 第二部分:
-
一个是判断name(key)是否在字典中(具体知识可百度)
-
一个是else在for循环中的用法(else的各种用法在下一篇详解)
while counts < 4: # counts = 0 #用于循环内部判断是第几次与list内的字典进行对比 name = input('name:') password = eval(input('password:')) for dict in lists: dict = eval(dict) if name in dict: # 判断name(key)是否在字典中 if dict[name] == password: # 判断密码是否相等 print('登陆成功') counts = 4 # 结束while循环 break # 执行break后跳出for循环,但是不再执行else面的count+=1 else: counts += 1 print('第{}次输入错误,请重试'.format(counts)) if counts == 3: print('次数已用完,继续输入错误账户将被锁定') # 三次密码都没输对 break elif counts == 4: print('账户已被锁定,请2小时后重试') break else: break else: counts += 1 print('第{}次输入错误,请重试'.format(counts)) if counts == 3: print('已经输错3次,继续输入错误账户将被锁定') elif counts == 4: fo.write(str(name) + ':' + str(password) + '\n') #将第四次输入且登录失败的内容 #存进另一个文本中 print('账户已被锁定,请2小时后重试')
欢迎在下面提出问题给我指出不足的地方,谢谢!!!