python老男孩第三课
模块调用 from import 或者 import as 会执行一遍导入模块中的内容
- 至关重要的__init__.py 模块与文件的区别 模块下面有__init__.py 文件夹下面没有
- 是否为主文件: __name__ if__name__=='__main__' 如果不是主文件 返回(文件夹/文件名)
- 当前文件路径 :__file__
- 当前文件描述:__doc__
函数式编程 一个功能写一个函数,最好细分化,代码不要超过一屏
def Fun(arg,*arg,**arg) 形参arg(默认参数arg=,默认参数一般放在最后) 可变参数*arg,**arg (*arg带入列表的时候列表前需要增加*)(**arg带入字典的时候字典前需要增加**)
函数体
return 函数的返回值
def Fun(*arg): for line in arg: print(line) def Fun1(**arg): for a in arg.items(): print(a) Fun('maomao','niuniu','duoduo','jiajia') Fun(*['maomao','niuniu','duoduo','jiajia']) Fun1(name='niuniu',age=1,addeess='nanyang') Fun1(**{'name':'duoduo','age':12,'address':'xixa'})
yield 的用法
三元运算 代码实例: result='gt' if 1>3 else 'lt' print(result)
lambda 表达式 代码实例:a=lambda x,y:x+y print(a(4,10))
内置函数
- help() 帮助
- dir(object) 列出对象下的方法和属性的所有键
- vars(object) 列出对象下的方法和属性的所有的键及值
- type(object) 查看对象的类型
- import(temp)
- id() 查看对象的内存地址
- abs() 取绝对值 cmp() 比较两个值的大小 bool() 转换布尔值 divmod(9,2) 求商及余数 max(list)最大值 min(list)取最小值 sum(list) 求和 pow(2,10) 指数
- len(object) 对象长度 all(可迭代对象) 判读是否全部为真,返回布尔值 any(可迭代对象) 判断是否有一个为真,返回布尔值
- chr(int) 将数字转换成字符 ord(str) 将字符转换成数字 hex()转换成16进制 bin()转换成2进制 oct()转换成8进制
- range() 生成一个可迭代的对象 enumerate(list) 将列表(元组)增加一个序列
- 占位符 s='i am {0},{1}' s.format('niuniu',12) format字符串中占位符
- apply(Function,arg) Function 函数名称 arg 函数参数 执行函数 同 Function (arg)
- map(Function,sequence) Function 函数名称 sequence 序列 遍历序列中每个元素当作参数执行Function
- filter(Function,sequence) Function 函数名称 sequence 序列 过滤序列中每个元素,返回符合过滤条件的值
- reduce(Function,sequence) Function 函数名称 sequence 序列 序列中每个元素累计 python3中不存在
- zip(list1,list2,list3) 序列组合
- a= '8*8' eval(a) 把字符转换成数字运算
反射
- temp='os' , model=__import__(temp) model.path 通过字符串形式导入模块
- 反射 通过字符串的形式导入模块,并以字符串的形式执行函数 temp='pymysql' , func='cout',model=__import__(temp),function=getattr(model,func), function() hasattr() 判断是否有某个函数 delattr() 删除某个函数
常用模块 random
- random.random() 生成0到1之间的随机数
- random.randint(start,stop) 生成start与stop之间的随机整数[start,stop]
- random.randrange(start,stop) 生成start与stop之间的随机整数[start,stop)
随机验证码实例
code=[] import random for i in range(5): if i == random.randint(1,4): code.append(str(random.randint(1,9))) else: code.append(chr(random.randint(65,90))) print(code) print(''.join(code))
MD5加密
- import hashlib hash=hashlib.md5 hash.update() hash.hexdigest()
序列化 pickle和json pickle用于python与python之间交互可以序列化任何对象(序列,类,函数,对象) json是所有语音都支持,只可以序列化序列
- import pickle pickle.dumps(object) 序列化成二进制 pickle.loads() 二进制反序列化为对象 pickle.dump(object,文件句柄) 序列化到文件中 pixkle.load(文件句柄)
- import json json.dumps(序列) 序列化成字符串 json.loads() 字符串反序列化为序列 json.dump(序列,文件句柄) 序列化到文件中 json.load(文件句柄)
正则表达式 re
- re.match 从给定字符串的起始的位置匹配(起始位置匹配成功,返回匹配的值,否则返回NONE) m=re.match() m.group() 如果没有匹配成功group会报错ma=re.match('\d+','sdfakjds12313214lksaj234dfl333kj')
- re.seatch 从给定的字符串开始匹配(从起始位置开始匹配,只到匹配成功(整个字符串)) mm=re.seatch() mm.group() 如果没有匹配成功group会报错mta=re.search('\d+','sdfakjds12313214lksaj234dfl333kj')
- re.findall() 给的的字符串中全部匹配返回一个列表 mm=re.findall('\d+','sdfakjds12313214lksaj234dfl333kj')
- re.compile() 表达式编译 生成一个对象 com= re.compile('\d+') com.findall('sdfakjds12313214lksaj234dfl333kj')
正则表达式格式
- 字符: \d 数字 \w匹配包括下划线的任何单词字符 \t 制表符 . 除了回车以外的所有字符
- 次数:* 大于等于0 , +大于等于1 , ? 0或者1 ,{m} 出现的次数 ,{m,n} 出现[m,n]之间的次数
time模块 三种表示形式
- 时间戳 1970年1月1日之后的秒 time.time() // time.mktime(结构化) 将结构化转换成时间戳
- 元祖(结构化) 包含了年、月、星期等 time.struct_time('142395673') time.gmtime() ,time.localtime() //time.strptime('2023-05-11','%Y-%m-%d') 字符串形式转换成元祖形式
- 格式化的字符串 2023-05011 time.asctim() time.ctime(time.time()) // time.strftime('%Y-%m-%d %H:%M:%s',time.gmtime) 结构化转出字符串
datetime 模块
- datetime.date 表示日期的类 常用的属性有 year,month,day
- datetime.time 表示时间的类 常用的属性有 hour,minute,second
- datetime.datetime: 表示日期时间
- datetime.timedelta 表示时间间隔,即两个时间点的长度
- datetime.timedelta([days[,seconds[,microseconds[,milliseconds[) 括号中是参数
sys 模块
- sys.argv 命令行参数list,第一个元素是程序本身路径
- sys.exit() 退出程序,正常退出是eixt(0)
- sys.version 获取python解释程序的版本信息
- sys.maxint 最大的int值
- sys.maxunicode 最大的unicode 值
- sys.path 返回模块的搜索路径,初始化时使用pythonpath
- sys.platform 返回操作系统平台名称
作业 网上银行
功能(必须)
- 额度15000
- 可以提现,手续费5%
- 每月最后一天出账单(每月30日),写入文件
- 记录每月日常消费流水
- 提供还款接口优化
(可选功能)
- 每月10日为还款日,到期未还,按欠款额5%。计息
-
查看源码#_*_coding:utf-8_*_ import datetime import time import json bank_mondy = 15000 def creat_name(): with open('d:/bank.txt', 'w+',encoding='utf-8') as f: dict1 = {'时间': time.strftime('%Y-%m-%d', time.localtime()), '提款额': 0, '余额': bank_mondy} json.dump(dict1,f) f.writelines('\n') def time_cha(arg1,arg2): tt=time.mktime(time.strptime(arg1, '%Y-%m-%d'))-time.mktime(time.strptime(arg2,'%Y-%m-%d')) day1=divmod(tt,24*60*60) if day1[1]>0: cha=day1[0]+1 else: cha=day1[0] return cha def tixian(mondy,bank_mondy=15000): with open('d:/bank.txt', 'a+',encoding='utf-8') as f: #seek=f.tell() f.seek(0) for line in f.readlines(): line=line.strip() dd=json.loads(line) print(dd) if dd.get('余额',0)!=0 and dd['余额']-mondy>0: print(dd['余额']) if dd['余额']==bank_mondy or mondy==0: cha=dd.get('用款天数',0)+0 lixi=dd.get('利息',0)+0 else: cha1=time_cha(time.strftime('%Y-%m-%d', time.localtime()),dd['时间']) cha=dd['用款天数']+cha1 print('天数',cha1) lixi = dd.get('利息', 0) + (bank_mondy-dd['余额'])*0.005*cha1/30 print('利息',lixi) bank_yue = dd['余额'] - mondy dict1={'时间': time.strftime('%Y-%m-%d', time.localtime()), '提款额': mondy, '余额': bank_yue,'用款天数':cha,'利息':lixi} #dict1 = {'时间': time.strftime('%Y-%m-%d', time.localtime()), '提款额': mondy, '余额': bank_mondy} json.dump(dict1, f) f.writelines('\n') else: print('余额不足,请即时存款,你可用额度为%s'%dd['余额']) creat_name() tixian(1000)

浙公网安备 33010602011771号