知识内容:python
1.luffy买teslagit
2.ATM+购物商城github
1、luffy买teslajson
需求:app
1 1.目录结构说明 2 account 3 luffy.json --> 存储用户帐户信息 {"money": 1000000, "credit": 300000} 4 tesla.json --> 存储tesla帐户信息 {"money": 0} 5 bin 6 start.py --> 项目入口文件 7 core 8 withdraw.py --> 项目核心文件 9 logs 10 bank.log --> 日志文件 11 12 2.功能说明 13 当执行start.py出现交互窗口以下: 14 ----Luffy Bank---- 15 1.帐户信息 16 2.转帐 17 3.提现 18 (1)选择1帐户信息显示luffy的当前帐户余额和信用额度(存在luffy.json中) 19 (2)选择2转帐直接在luffy帐户中扣掉75万和5%的税费而且tesla帐户增长75万(存在tesla.json中) 20 (3)当选择3提现,提现金额应该小于信用额度,利息为5%,提现金额为用户自定义 21 (4)把用户转帐、登录、提现操做均经过logging模块记录日志在bank.log中
思路以及特殊技巧:函数
1.思路spa
start.py是程序的主入口,调用withdraw中的chose_func函数来执行代码,chose_func函数的功能相似一个菜单,将各个功能链接在一块儿,先完成用户信息展现、用户转帐、提现这3个功能函数,而后经过装饰器实现用户登陆验证而且用户只用登陆一次后续就不用登陆,最后将日志记录写成一个函数。参数为日志的等级和输出信息,在须要输出日志的地方调用这个函数便可debug
2.特殊技巧日志
如何让start.py调用withdraw.py中的函数,利用os模块得到项目的根目录而后动态添加进系统环境变量中便可,代码以下:code
1 def main(): 2 # 动态添加 3 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 4 # 导入核心模块文件 5 from core import withdraw 6 withdraw.chose_func() 7 8 9 # 项目主入口 10 if __name__ == '__main__': 11 main()
装饰器实现用户登陆:
1 # 装饰器函数 -> 实现登陆 2 def login(func): 3 def wrapper(*args, **kwargs): 4 global flag 5 if flag: # 未登陆就进行登陆验证 6 print("请先登陆而后进行操做") 7 username = input("username: ") 8 password = input("password: ") 9 if username == _username and password == _password: 10 # print("登陆成功!") 11 logging_message("info", "%s login!" % username) 12 flag = False # 登陆成功就把flag改成False,再使用别的功能就不用登陆 13 func(*args, **kwargs) 14 else: 15 # print("用户名或密码错误!") 16 logging_message("warn", "wrong username or wrong password!") 17 else: # 登陆过就不用验证 18 func(*args, **kwargs) 19 20 return wrapper
注:logging_message()是调用日志输出函数
日志输出函数:
1 # 实现日志功能 日志位置: /logs/bank.log 2 def logging_message(level, message): 3 route = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 提取项目的绝对路径 4 route += r"\logs\bank.log" # 加上项目文件的相对路径 5 6 # create logger 7 logger = logging.getLogger(_username) # 得到logger对象 8 logger.setLevel(logging.DEBUG) # 设置一个全局的日志级别 9 10 # create console handler and set level to debug 11 ch = logging.StreamHandler() # 把日志打印到屏幕 12 ch.setLevel(logging.INFO) # 设定屏幕的日志级别 13 14 # create file handler and set level to warning 15 fh = logging.FileHandler(route) # 把日志打印到文件 16 fh.setLevel(logging.INFO) # 设定文件的日志级别 17 18 # create formatter 设置输出格式 19 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 20 21 # add formatter to ch and fh 给屏幕和文件设置输出格式 22 ch.setFormatter(formatter) 23 fh.setFormatter(formatter) 24 25 # add ch and fh to logger 把日志打印到指定的handler中 26 logger.addHandler(ch) 27 logger.addHandler(fh) 28 29 # 'application' code 30 # 设置信息 31 if level == 'debug': 32 logger.debug(message) 33 if level == 'info': 34 logger.info(message) 35 if level == 'warn': 36 logger.warning(message) 37 if level == 'error': 38 logger.error(message) 39 if level == 'critical': 40 logger.critical(message) 41 42 # 添加下面一句,在记录日志以后移除句柄 43 logger.removeHandler(ch) 44 logger.removeHandler(fh)
3.完整代码:https://github.com/15387062910/python_train/tree/master/luffy_tesla
2、ATM+购物商城
需求:
1 模拟实现一个ATM + 购物商城程序 2 功能以下: 3 额度 15000或自定义 4 实现购物商城,买东西加入 购物车,调用信用卡接口结帐 5 能够提现,手续费5% 6 每个月22号出帐单,每个月10号为还款日,过时未还,按欠款总额 万分之5 每日计息 7 支持多帐户登陆 8 支持帐户间转帐 9 记录每个月平常消费流水 10 提供还款接口 11 ATM记录操做日志 12 提供管理接口,包括添加帐户、用户额度,冻结帐户等。。。 13 用户认证用装饰器
示例代码 https://github.com/triaquae/py3_training/tree/master/atm
简易流程图:https://www.processon.com/view/link/589eb841e4b0999184934329
思路以及特殊技巧:
代码实现: