|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我是python小白 于 2019-4-22 20:37 编辑
递归
递归调用:一个函数,调用自身,称为递归调用
递归函数:一个会调用自身的函数称为递归函数
方式:
1、写出临界调条件
2、这这一次和上一次的关系
3、假设当前函数已经能用,调用自身计算上一次的结果,在求出本次的结果。
入一个数(大于等于1),求1+2+3+............+n的和
- def sum(n):
- if n == 1:
- return 1
- else:
- return n + sum(n-1)
复制代码 栈和堆队列
栈:
栈的特点:先进后出
压栈(向栈里存数据)
出栈:在栈里取数据
队列:
队列的特点:先进先出
- #模拟
- import collections
- #创建一个队列
- queue = collections.deque()
- print(queue)
- #进队
- queue.append("a")
- queue.append("b")
- queue.append("c")
- #出队
- res1 = queue.popleft()
- #这个出的是a
复制代码 目录遍历:
递归遍历目录:
- import os
- def getAllDirRE(path):
- #得到当前目录下所有文件
- filesList = os.listdir(path)
- #处理每个文件
- for fileName in fileList:
- #使用绝对路径
- fileAbsPath = os.path.join(path, fileName)
- if os.path.isdir(fileAbsPath):
- print("目录:", fileName)
- getAllDir(fileAbsPath)
- else:
- print("文件", fileName)
- getAllDir(r"c:\user\xlg\t\r\e\s\day\dir")
复制代码 "栈模拟递归遍历,(深度遍历)"
- def getAllDirDE(path):
- stack = []
- stack.append(path)
-
- #处理栈,当栈为空的时候结束循环
- while len(stack) != 0:
- #从栈里取出数据
- dirPath = stact.pop()
- #目录下所有文件
- fileList = os.listdir(dirpath)
- #处理每一个文件,如果是普通文件则打印出来,如果是目录文件则将该目录的地址压栈
- for fileName in filesList:
- filrAbspath = os.path.join(dirpath, fileName)
- if os,path.isdir(fileAbsPath):
- #目录就压栈
- print("目录:", fileName)
- stack.append(fileAbsPath)
- else:
- #打印普通文件
- print("普通:" + fileName)
-
复制代码 队列模拟递归,广度遍历
- import os,collections
- def getAllDirQUE(path):
- queue = cllections.deque()
- #进队
- queue.append(path)
- while len(queue) != 0:
- #出队数据
- dirpat = queue.popleft()
- #找出所有的文件
- fileList = os.listdir(dirPath)
- for fielName in fileList:
- #绝对路径
- fileAbsPath = os.path.join(dirpath, fileName)
- if os.path.isdir(fileAbsPath):
- print("目录:",fileName)
- queue.append(fileAbspath)
- else:
- print("文件:", fileName)
复制代码 Time模块
utc世界协调时间:格林尼治天文时间,世界标准时间,在中国来说就是utc+8
DST(夏令时):是一种节约能源而认为规定时间制度,在夏季调快一小时
时间表示形式:
1.时间轴:以整型或浮点型表示时间的一个以秒为单位的时间间隔,这个时间间隔的基础值是从1970年1月1日,开始算起
2、元组:一种python的整数结构表示,这个元组9个整型内容
3、格式化字符串
|格式| 含义|
| %a | 本地(locale)简化星期名称|
| %A |本地完整星期名称|
| %b | 本地简化月份名称|
| %B | 本地完整月份名称|
| %c | 本地相应的日期和时间表示|
%H | 一天中的第几个小时(24 小时制,00 - 23)|
%l | 一天中的第几个小时(12 小时制,01 - 12)| | |
%j | 一年中的第几天(001 - 366)| | |
| %p | 本地 am 或者 pm 的相应符 |
%U | 一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周 | *注3* |
%w | 一个星期中的第几天(0 - 6,0 是星期天)|
| %W | 和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始|
| %x | 本地相应日期 |
| %X | 本地相应时间 |
%y | 去掉世纪的年份(00 - 99) | | |
| %Y | 完整的年份 |
%z | 用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数) |
| %Z | 时区的名字(如果不存在为空字符) |
| %% | %号本身 |
- #返回当前时间戳,浮点数心事,不需要参数
- c = time.time()
- print(c)
- #将时间戳转换utc时间元组
- c = time.gmtime(c)
- #将时间戳转换成本地时间元组
- b =time.localtime(c)
- #将本地时间元祖转成时间戳
- m = time.mktime(b)
- #将时间元组转成字符串
- s = time.asctime(b)
- #将时间戳转为字符串
- p = time.ctime(c)
- #将时间元组转换成给定的字符串,参数2是一个本地时间元组,默认是当前时间
- q = time.strftime("%Y-%m-%d %H:%M:%S",b)
- #将时间字符串转为时间元组
- tome.strptime(q,"%Y-%m-%d %x")
- #延迟一个小时,整型或者浮点型
- time.sleep(4)
- #返回当前程序的cpu执行时间,Unix形式始终返回全部的运算时间,window从第二次开始,都是以第一个调用次函数的开始时间戳作为基数。
- y1 = time.clock()
- time.sleep(2)
- y2 = time.clock()
- print("%d", y2)
复制代码 DATAtime
datatime比time高级不少,可以理解为datetieme基于time进行封装提供了更为实用的函数,datetime模块的借口更直观,跟容易调用
模块中的类:
- #获取当前时间
- d1 = datetime.datetime.now()
- #获取指定时间
- d2 = datetime.datetime(1999, 10, 1, 10, 25, 28,11111111)
- #将时间转为字符串
- d3 = d1.strftime('%y-%d %x')
- #将格式化字符串转为datetime对像
- #转换格式要与字符串一致
- d4 = datetime.date.strptime(d3, "%y-%m-%d %x")
- #时间计算
- d5 = d1- d2
- #间隔天数和秒数
- print(d5)
- #间隔的天数
- print(d5.day)
- #间隔天数除外的秒数
- print(d7.seconds)
复制代码 calendar(日历)
日历模块:
- #使用
- #返回指定某年某月的日历
- print(calendar.month(2017,7))
- #返回指定年的日历
- print(calendar.caalendar(2017))
- #闰年返回True,否则返回False
- print(calendar.isleap(2000))
- #返回某个月的weekday的第一天和这个月所有的天数
- print(calendar.monthrange(2017,5))
- #返回某个月以每一周为元素的列表
- print(calendar.monthcalendar)
复制代码 |
|