作业一:编写登陆接口

  1、输入用户名密码

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

  3、输错三次后锁定

分析:

1、流程控制图

2、readme文件

需求:
1、用户登录
2、错误三次锁定
分析:
1、建立user_data.txt文件,含3个字段:name,password,lock(>3表示正常,3=<表示锁定)
2、用json模块把三个字段存成字典dict_data

3、代码

import json

def login(user_data):
'''
:param user_data: 用户信息字典
:return: True 成功, False 不成功
'''
name = input("请输入用户名:")
if user_data.get(name): #用户名存在
num = user_data[name][1]
if num >= 3: #用户已被锁定
print("用户已被锁定!")
return False
else: #用户未被锁定
flag_pass = True
while flag:
password = input("请输入密码:")
if password == user_data[name][0]: #密码正确
flag_pass = False
return True
else: #密码错误
num += 1
if num >= 3: #密码错误3次
print("用户已被锁定!")
user_data[name][1] = num
with open("user_data.txt","w") as f:
json.dump(dict_data,f)
return False
else: #用户名不存在
print("用户名不存在,请重新输入!")
return False if __name__ == "__main__":
dict_data = {}
flag = True
with open("user_data.txt", "r") as f:
dict_data = json.load(f)
while flag:
if login(dict_data):
flag = False
print("welcome back!")
import os
import json if os.path.exists(r'C:\Users\huang\PycharmProjects\day1\sql.txt'):
# 存储账户密码文件存在
while True: # 用户输入名字和密码并去前后空格
user_name = input('input name:').strip()
user_pwd = input('input pwd:').strip() # 以读的方式打开文件并把读取到的数据转化为dict对象
with open('sql.txt', 'r') as f:
d = json.loads(f.read()) if d.get(user_name) and d[user_name][1] < 3:
# 用户名存在并错误次数小于3次(3次锁定)
if d[user_name][0] == user_pwd:
# 用户密码正确
print('welcome back!')
else:
# 用户密码不正确,错误次数+1并写入文件
print('user or pwd is worry!')
d[user_name][1] += 1
with open('sql.txt', 'w') as file:
df = json.dumps(d)
print(df)
file.write(df)
else:
# 用户名不存在或错误次数大等于3次(3次锁定)
if d.get(user_name):
# 用户名存在且错误次数大等于3次(3次锁定)
print('worry to many!')
else:
# 用户名不存在
print('user_name is not exists!')
else:
# 存储账户密码文件不存在
print('soft is error!')

最新文章

  1. svn 常用命令总结
  2. Android成长日记-Noification实现状态栏通知
  3. Java字节流:InputStream OutputStream
  4. C++ 中超类化和子类化
  5. centos7 服务管理
  6. http://my.oschina.net/u/2007041/blog/508520
  7. [iOS 多线程 &amp; 网络 - 2.5] - 小文件上传
  8. SSO 登录功能的实现
  9. C_数据结构
  10. 解决IE增强配置的问题
  11. GoF设计模式 - 概述
  12. 例题:填词-poj
  13. linux tar解压命令
  14. SpringInAction学习笔记(一):核心概念
  15. el-table-column v-if条件渲染报错h.$scopedSlots.default is not a function
  16. ASP.NET MVC 4 (十二) Web API
  17. 使用express框架和mongoose在MongoDB新增数据
  18. Yii2如何批量添加数据
  19. [Erlang30]Erlang shell是如何工作的?
  20. PHP中类中成员及常量

热门文章

  1. 在职场中混,&quot;讲演稿&quot;的重要性
  2. CSS3 制作一个边框向周围散开的按钮效果
  3. 抛开flash,自己开发实现C++ RTMP直播流播放器
  4. 摇钱树运营小工具UI设计.vsd
  5. Transactional Replication2:在Subscriber中,主键列是只读的
  6. C#设计模式系列:工厂方法模式(Factory Method)
  7. C#设计模式系列:访问者模式(Visitor)
  8. 解读sencha touch移动框架的核心架构(一)
  9. Web APi之控制器选择Action方法过程(九)
  10. Expression Template(表达式模板,ET)