• 递归,re,time,random


    递归函数

    1.在函数中调用自己

    2.超过递归的最大深度报错,递归的最大深度:998大概

    3.递归的缺点:占内存

    4.优点:代码简单

    import sys
    sys.setrecursionlimit(2000)#修改最大深度,#不要随意修改

    实现斐波那契数列

    #斐波那契数列 1,1,2,3,5,8  后一项为前两项的和
    def fib(n):
        if n==1 or n==2:
            res=1
        else:
            res = fib(n-1)+fib(n-2)
        return res
    print(fib(6))
    
    #循环实现求斐波那契数列
    def fib(n):
        a,b = 1,1
        for i in range(0,n):
            a,b = b,a+b
        print(a)
    fib(5)

    递归实现二分查找算法

    二分查找算法
    def fin(li,searth,start=0,end=None):
        end = len(li) if end is None else end
        min = (end-start)//2+start
        if start<=end:
            if start == end and searth != li[start - 1]:
                print('没有找到该数据,可能不在列表中')
            elif searth<li[min]:
                fin(li,searth,start=start,end=min-1)
            elif searth>li[min]:
                fin(li,searth,start=min+1,end=end)
            else:print(min)
        else:
            print('没有找到该数据,可能不在列表中')
    fin([1,2,3,4,5,6,7,8,9],80)

    递归实现阶乘

    def factorial(n):
        if n==1:
            res = 1
        else:
            res = n*factorial(n-1)
        return res
    print(factorial(3))

    re模块

    正则表达式

    做字符串匹配的一种规则

    正则规则

    字符组:[],在同一个位置上可能出现的字符组成一个字符组
    正则规则:
    [0-9]:匹配数字
    [a-z]:匹配小写字母
    [A-Z]:匹配大写字母
    .:匹配除换行符以外的任意字符
    w:匹配数字字母下划线(word)
    s:匹配任意的空白符(space)
    d:匹配任意数字(digit)
    W:匹配非数字字母下划线
    S:匹配任意非空白符(space)
    D:匹配任意非数字(digit)
    
    :匹配换行符
    	:匹配制表符
    :匹配一个单词的结尾
    ^a:匹配字符串的开头,以a开头
    $a:以a结尾
    a|b:匹配a或b
    匹配次数(默认贪婪匹配,尽可能多的匹配)
    *:匹配多次或0次
    +:匹配多次
    ?:匹配0次或者1次,加在量词后面表示非贪婪匹配(尽可能少的匹配)
    {n}:匹配n次,必须是n次
    {n,}:匹配n次或更多
    {n,m}:匹配n到m次
    分组():对多个字符整体进行统一的约束
    r'd':表示不对字符串转义
    .*?:一个也不匹配
    [^]:除了字符组里面的都匹配
    \w:转义

    re模块的常用方法

    findall,search,match
    import re res = re.findall('[j]','jcc jcc')#返回所有匹配的元素放在列表中
    print(res)#分组优先
    res2 = re.search('c','jcc jcc')#从前往后匹配,找到一个符合条件的就返回,返回的变量需要调用group方法才能得到,如果没有匹配的内容,返回None print(res2.group()) 取分组中的内容

    import re name = 'name' res = re.search('d(?P<name>D+)+','iwuedh13245isdbc') print(res.group(name)) print(res.group(1)) res3 = re.match('[ab]','b')#从头开始匹配,如果从头开始可以匹配上,就返回一个变量,调用group方法获取 print(res3.group()) # split:根据正则表达式来分割 res4 = re.split('[ab]','abcdhyt') # sub:根据规则替换 res5 = re.sub('d','a','uyahsgdbaaa',1)

    collections模块

    python中的扩展数据类型

    namedtuple

    namedtuple 可命名元组
    from collections import namedtuple Point = namedtuple('point',['x','y']) p = Point(1,2) print(p.x,p.y)

    deque

    #deque 队列 先进先出
    import queue
    q = queue.Queue()
    q.put(10)
    print(q.get())
    # get的时候队列中如果没有值,则该程序会阻塞
    print(q.qsize())#判断队列中是否有值
    
    
    #deque  双管队列,可以从两端放数据和取数据,可以插队
    from collections import deque
    q = deque([1,2])
    q.append(3)#从后面放数据
    q.appendleft(4)#从前面放数据
    q.pop()#从后面取数据
    q.popleft()#从前面取数据

    orderdDict

    #有序字典 orderdDict  比较占内存
    from collections import OrderedDict
    od = OrderedDict([('a',1),('b',2)])
    # key是有序的
    
    # defaultDict  字典中的每一个key值都有默认值
    from collections import defaultdict
    my_dict = defaultdict(list(1))

    时间模块

    时间的三种表示形式

    # 时间的表示方式
    
    # 1.时间戳(timestamp)返回的是float类型:计算机识别
    time.time()
    
    # 2.格式化时间(format string):人看
    time.strftime('%Y-%m-%d %H:%M:%S')
    
    # 3.结构化时间(struct_time):做计算
    year = time.localtime().tm_year

    形式之间的转换

    # 时间戳-->结构化
    time.time()
    time.localtime()
    time.gmtime()
    # 结构化-->时间戳
    time.mktime(time.localtime())
    # 格式化-->结构化
    time.strptime('2012-12-11','%Y-%m-%d')
    # 结构化-->格式化
    time.strftime('%Y-%m-%d',time.localtime(200000))
    
    time.asctime()#显示的很全面
    import time
    time.sleep(1)#让程序在此处停留
    time.time()#返回时间

    random模块

    # random模块 随机数模块
    import random
    random.random()#返回一个大于0小于1的小数
    random.uniform(1,3)#返回一个大于1小于3的小数
    random.randint(1,5)#返回随机1到5,包含5之间的整数
    random.randrange(1,5,2)#随机返回1-10之间的整数,不包括10,可指定步长
    random.choice([1,'23',[1,2]])#随机选择一个返回  1或者’23‘或者[1,2]
    random.sample([1,2,3,4],2)#任意两个元素
    random.shuffle([1,2,3,4,5,6])#打乱次序
  • 相关阅读:
    C#扩展方法(转)
    设计模式与足球(一)创建型模式
    java设计模式之适配器模式
    java设计模式之建造者模式
    java设计模式之原型模式
    java设计模式之单例模式
    java之设计模式工厂三兄弟之抽象工厂模式
    java之设计模式工厂三兄弟之工厂方法模式
    创建对象与使用对象——谈谈工厂的作用
    java之设计模式工厂三兄弟之简单工厂模式
  • 原文地址:https://www.cnblogs.com/jiangchengcheng/p/9580303.html
Copyright © 2020-2023  润新知