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)
    查看源码

     

 

posted @ 2023-05-12 22:31  yuhankeji  阅读(28)  评论(0)    收藏  举报