路飞学城Python-Day14(practise)
本章总结
练习题
- 写一个用户登录验证程序,文件如下1234.json{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
- 用户名为json文件名,密码为 password。
- 判断是否过期,与expire_date进行对比。
- 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
# 写一个用户登录验证程序,文件如下
# 1234.json
# {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
# 用户名为json文件名,密码为 password。
# 判断是否过期,与expire_date进行对比。
# 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
import json
import time
with open('1234.json','r+',encoding='utf-8') as f:
count = 0
user_dict = json.loads(f.read())
if time.mktime(time.struct_time(time.strptime(user_dict['expire_date'],'%Y-%m-%d')))>time.mktime(time.struct_time(time.strptime(time.strftime('%Y-%m-%d'),'%Y-%m-%d'))):
while count < 3:
username = input('请输入用户名>>>').strip()
pwd = input('请输入密码>>>').strip()
if user_dict['status'] == 1:
print('该账户已经被锁定')
break
elif count == 2:
user_dict['status'] = 1
f = open('1234.json','r+',encoding='utf-8')
json.dump(user_dict, f)
f.close()
elif username == str(user_dict['id']) and pwd ==user_dict['password'] and user_dict['status'] == 0:
print('欢迎登录')
break
else:
print('登录失败')
count += 1
else:
print('账户已过期')
# 写一个用户登录验证程序,文件如下
# 1234.json
# {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
# 用户名为json文件名,密码为 password。
# 判断是否过期,与expire_date进行对比。
# 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
# 把第12题三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证
import json
import time
import hashlib
with open('1234.json','r+',encoding='utf-8') as f:
hash = hashlib.md5()
count = 0
user_dict = json.loads(f.read())
hash.update(user_dict['password'].encode('utf-8'))
user_dict['password'] = hash.hexdigest()
if time.mktime(time.struct_time(time.strptime(user_dict['expire_date'],'%Y-%m-%d')))>time.mktime(time.struct_time(time.strptime(time.strftime('%Y-%m-%d'),'%Y-%m-%d'))):
while count < 3:
username = input('请输入用户名>>>').strip()
pwd = input('请输入密码>>>').strip()
hash_pwd = hashlib.md5()
hash_pwd.update(pwd.encode('utf-8'))
pwd = hash_pwd.hexdigest()
if user_dict['status'] == 1:
print('该账户已经被锁定')
break
elif count == 2:
user_dict['status'] = 1
f = open('1234.json','r+',encoding='utf-8')
json.dump(user_dict, f)
f.close()
elif username == str(user_dict['id']) and pwd ==user_dict['password'] and user_dict['status'] == 0:
print('欢迎登录')
break
else:
print('登录失败')
count += 1
else:
print('账户已过期')
- 最近luffy买了个tesla,通过转账的形式,并且支付了5%的手续费,tesla价格为75万。文件为json,请用程序实现该转账行为。需求如下:
- 目录结构为
- .├── account│ ├── luffy.json│ └── tesla.json└── bin└── start.py
- ------- Luffy Bank ---------1. 账户信息2. 转账
- 选择1 账户信息 显示luffy的当前账户余额。
- 选择2 转账 直接扣掉75万和利息费用并且tesla账户增加75万
- 对上题增加一个需求:提现。目录结构如下.├── account│ └── luffy.json├── bin│ └── start.py└── core└── withdraw.py当执行start.py时,出现交互窗口------- Luffy Bank ---------1. 账户信息2. 提现
- 选择1 账户信息 显示luffy的当前账户余额和信用额度。
- 选择2 提现 提现金额应小于等于信用额度,利息为5%,提现金额为用户自定义。
- 尝试把上一章的验证用户登陆的装饰器添加到提现和转账的功能上。
- 对第15题的用户转账、登录、提现操作均通过logging模块记录日志,日志文件位置如下.├── account│ └── luffy.json├── bin│ └── start.py└── core| └── withdraw.py└── logs└── bank.log
本章作业:
- 额度 15000或自定义
- 实现购物商城,买东西加入 购物车,调用信用卡接口结账
- 可以提现,手续费5%
- 支持多账户登录
- 支持账户间转账
- 记录每月日常消费流水
- 提供还款接口
- ATM记录操作日志
- 提供管理接口,包括添加账户、用户额度,冻结账户等。。。
- 用户认证用装饰器
路飞学城Python-Day14(practise)的更多相关文章
- 路飞学城—Python爬虫实战密训班 第三章
路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...
- 路飞学城—Python爬虫实战密训班 第二章
路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 路飞学城-Python开发集训-第1章
学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...
- 路飞学城-Python开发集训-第4章
学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...
- 路飞学城-Python开发集训-第2章
学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...
- 路飞学城Python-Day19(practise)
# 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...
- 路飞学城-Python开发-第二章
''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...
- 路飞学城-Python开发-第三章
# 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...
随机推荐
- ZBrush中如何实现智能对称
ZBrush软件智能化和人性化的工作流程让用户在创作中提高工作效率,体验创作乐趣,说起智能化不得不提的就是ZBrush 4R8®给我们提供的智能对称功能,所谓的智能对称就是当您在编辑其中一半的物体模型 ...
- java真实面试题(1)
2019年春杭州邦盛科技java面试题. 1,java基本类型 byte,char,short,int,long,float,double,boolean. 2,重写重载 重写,子类重写父类的方法,方 ...
- Pyhton学习——Day51
model(数据库模型)------ORM----- 表与表之间的关系(两张表) 一对多 多对多 一对一 ORM------object relation mapping python的类 class ...
- Python 函数部分练习题
函 数 基 础 1.写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作2.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 3.写函数,判断用户传入的 ...
- laravel 常用单词翻译
1.ORM:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping), 翻译为:对象关系映射. 是一种程序技术,用于实现面向对象编程语言里不同类型系统的 ...
- AJAX 创建对象 请求 响应 readyState
AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...
- POI实现Excel2003插入多张图片
POI的操作Excel时,不可避免有操作图片的处理.怎么插入图片呢?网上也有不少介绍. 下面的代码是向Excel中插入多张图片的例子: public static void main(String[] ...
- Spring IoC简介及使用
Spring根本任务 Spring的根本任务就是简化Java开发. 目前许多框架如果要使用他们,就必须要继承或实现这些框架的各种类.这使得框架与我们的程序耦合度过高.由于在我们的程序中加入了过多的框架 ...
- spring boot和maven的约定大于配置体现在哪些方面
spring boot和maven的约定大于配置体现在哪些方面? 两者都遵从了约定大于配置的路线 约定优于配置体现点: 1.maven的目录文件结构 1)默认有resources文件夹,存放资源配置文 ...
- JDK+JDBC+MySQL实例及注意事项
by qx.zhong Hangzhou 29 Jun 2014 开发环境 OS: Win8.1 x64 JDK: 1.8 SE DB: MySQL 5.5 Lib: mysql-connec ...