第五天,感觉开始烧脑了。递归逻辑难,模块数量多,但是绝世武功都是十年磨一剑出来的!稳住!

1 递归。

定义-----递归就是在函数的内部调用自己
递归深度 998
不建议修改递归深度,因为如果998都没有解决,那么这个功能就不适合用递归写
例子:
猜年龄
alex多大,alex比wusir大两岁 40+2+2
wusit多大,wusir比金老板大两岁 40+2
金老板多大了,40了
def age(n)
if n == 3:
return 40
else:
return age(n+1)+2
age(1)
递归求解二分查找算法:
99*99 可以 99*100-99 就是9900 - 99 = 9801
这个属于人类的算法。
计算机的算法是 计算一些比较复杂的问题,所采用的 在空间上,或者时间上
更有优势的方法
空间就是节省内存。时间是执行时间计算速度更快 比如排序50000万个数找到最小的与最大的,一般是快速排序,堆排序,冒泡排序
查找功能使用算法
二分法: 只能查找有序的数字集合的查找问题
l = [2,3,4,5,6,7,8,9,0,11,22,23,24,27,33,37,44,46,55,59,66,67,77,74,88,90,92,98]
def cal(num=66):
length - len(l)
mid = length//2
if num > l[mid]:
l = l[mid:] def cal(l,num,start,end)
if start < = end
mid = (end - start)//2 +start
if l[mid] > num:
return cal(l,num,start,mid-1)
elif l[mid] < num:
return cal(l,num,mid+1,end)
else:
print("找到了",mid,l[mid])
else:
return " 没找到"

2 常用模块1 模块定义:模块就是py文件,模块是写好了但不直接使用的功能。

2 模块的意义(摘抄):
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用, 3 模块的分类:
常用的 和某个操作相关的 根据相关性分为三类:内置模块。扩展模块。自定义模块
内置模块
安装了Python解析器后就一起提供了这些模块,一般是特别常用的
扩展模块
需要自己下载安装的模块
pypi网站:
www.pypi.org
自定义模块
自己写的模块 4 内置模块:
一 collections模块
orderedDict
提供了很多其他的数据结构,比如有序字典orderedDict
d = collections.OrderedDict() counter
计算某一个字符串出现的次数 defaultdict
from collections import defaultdict
l = [11,22,33,44,55,66,77,88]
my_dict = defaultdict(list)
默认这个字典的value是一个空列表
print(my_dict["a"])
my_dict["b"] = 10
print(my_dict)
如果新创建了key 并指定了值,那么就按照你指定的值赋值,就不是默认列表了 namedtuple
创建一个元祖,但是里面的元素都用一个名字代表。
生成可以使用名字来访问元素内容的tuple deque
双端队列,可以快速的从另外一侧追加和推出对象 二 时间模块
     定义:时间模块通常有三种方式来表示时间:时间戳、格式化的时间字符串、元组(struct_time)
        1。时间戳时间:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
  print(time.time()) 2.格式化时间:
  time.strftime("%Y-%m-%d %H:%M:%S")
  还有%x %c等常用的格式。
       格式化时间字符串(摘抄):
        %y 两位数的年份表示(00-99)
        %Y 四位数的年份表示(000-9999)
        %m 月份(01-12)
        %d 月内中的一天(0-31)
        %H 24小时制小时数(0-23)
        %I 12小时制小时数(01-12)
        %M 分钟数(00=59)
        %S 秒(00-59)
        %a 本地简化星期名称
        %A 本地完整星期名称
        %b 本地简化的月份名称
        %B 本地完整的月份名称
        %c 本地相应的日期表示和时间表示
        %j 年内的一天(001-366)
        %p 本地A.M.或P.M.的等价符
        %U 一年中的星期数(00-53)星期天为星期的开始
        %w 星期(0-6),星期天为星期的开始
        %W 一年中的星期数(00-53)星期一为星期的开始
        %x 本地相应的日期表示
        %X 本地相应的时间表示
        %Z 当前时区的名称
        %% %号本身
        3.元组时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
print(time.localtime())
t = time.localtime()
       格式(摘抄)
索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示周一)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为0

     4.时间的转换:
  可以接收一个时间戳时间变成本地化的时间
  print(time.localtime(1550000000))
  格式化时间转字符串时间
  stryct_time = time_gmtime(20000000000)
  print(time.strftime("%Y-%m-%d %H:%M:%S",stryct_time))
  格式化时间转时间戳时间
  s = "1988-12-22 9:23:22"
  ret = time.strptime(s,"%Y-%m-%d %H:%M:%S",stryct_time")
  print(ret)
  print(time.rmktime(ret))
    


      
练习题:
1 拿到当前时间的月初1号的0点的时间戳时间。
2 计算任意 两个时间点之间经过了多少年月日时分秒
datetime是根据time模块再次封装的模块 更上层 三 random模块
随机小数
random.random() 大于0且小于1之间的小数
random.uniform(1,3) 大于1小于3的小数
练习:
发红包 随机整数
random.randint(0,9) 取一到二
练习:
验证码
s = ""
for i in range(4):
s += rangom.randint(0,9)
print(s)
字母与数字都有:
id = ""
num = random.randint(65,90)
c = chr(num)
num2 = random.randint(0,9)
print(num2)
s = random.choice([c,num2])
print(s)
for i in range(4):
id += s
print(ss)
随机选择一个返回
随机选择多个返回,返回的个数为函数的第二个参数 四 os模块
系统相关模块
文件操作:
删除文件
os.remove()
重命名文件
os.rename("old","new")
目录操作:
os.makedirs("dir1/dir2") 多层递归创建目录
os.removedirs("dir1") 若目录为空则删除,并递归到上一级目录。如果也为空则删除。以此类推
os.mkdir("dir1") 生成单级目录
os.rmdir("dir1") 删除单级空目录 目录不为空则无法删除。
os.listdir("dir1") 列出指定目录下的所有文件和子目录。包括隐藏文件并以列表方式打印
当前工作目录有关操作:
os.getcwd() 获取当前工作目录。即当前python脚本工作的目录路径。
os.chdir("dir1") 改变当前脚本工作目录。相对于shell 的cd ,注意如果改变了路径 open 文件时候会在改变的路径下创建文件。
os.curdir() 返回当前目录:"."
os.pardir() 放回上一级目录:".."
stat 属性操作:
os.stat("dir/file")
st_mode  inode保护模式
st_ino  inode节点号
st_dev  inode驻留设备
st_nlink  inode的连接数
st_uid  所有者的用户ID
st_gid  所有者的组ID
st_size  普通文件以字节为单位大小,包含等待某些特殊文件的数据
st_atime 上次访问时间
st_mtime 上次修改元数据时间
st_ctime 上次修改文件内容数据的时间
操作系统差异:
os.sep 输出操作系特定的路径分隔符 win是\\ linux /
os.linesep 输出当前平台使用的行终止符 win是\t\n linux是\n
os.pathsep 输出用于分割文件路径的字符串 win ; linux :
"path1%spath2%s",%os.pathsep
os.name 输出字符串指示当前使用平台, win是 nt linux是posix
操作系统命令执行:
os.system 执行系统的命令,直接显示。
os.system("dir") 执行dir命令
os.popen 执行系统命令,返回返回值。
ret = os.popen("dir").read()
print(ret)
截屏 五 sys模块
Python解析器模块
sys.exit() 解释器退出,程序结束
sys.modules #放了所有在解释器运行过程中导入的模块名称。
sys.path 程序相关的路径。 一个模块能否导入需要看是否在这里sys.path列表里面存放的路径下面
sys.argv 在执行Python脚本的时候,可以传递一些参数进来
if sys.argv[1] == "alex" and sys.argv[2] == "alex3714":
print("可以执行下面的代码")
else:
print("密码错误退出")
sys.exit()
这个只能从命令行中执行并传入参数来使用 六 re正则表达式模块
功能比如简单的校验
正则表达式 字符串匹配相关的操作的时候用到的一种规则
正则表达式的规则
使用python中的re模块去操作正则表达式
在线测试工具
http://tool.chinaz.com/regex 正则表达式:
[] 匹配一个字符位置的字符
[0-9] 匹配0到9的字符
[a-z] 匹配a到z的字母
[A-Za-z] 匹配大小写字母
[0-9a-fA-F] 匹配一个十六进制字符 元字符:
. 匹配任意一个字符
\d 匹配任意一个数字
\w 匹配任意一个数字,字母,下划线
\s 匹配任意一个空白符
\n 匹配换行符
\t 匹配制表符
a\b 匹配单词结尾,这里是结尾是否是a
^a 匹配最开始 这里是匹配是a开头的字符
a$ 匹配结尾 这里是匹配a为结尾的字符 大写的就都是相反的
\W 就是匹配非数字,字母,下划线
[\w\W] 这是一种全组,可以匹配所有 ABC|ABCD 如果两个正则表达式先匹配到ABC那么就不往后匹配了,所以要先把长的写到前面
应该写为ABCD|ABC [^...] 如果在字符组中加^ 那么就是除了字符组的其他的都匹配[^ABC] 量词
{num} 约束出现几次,只约束紧挨着前面的
[1][3-9][0-9]{9} 就是可以匹配前面[0-9]字符组出现9次
量词跟在一个元字符的后面 约束某个字符的规则能够重复多少次
如果要匹配的字符刚好是和元字符一模一样,那么需要对这个元字符进行转义 \ * 重复零次或多次
+ 重复一次或多次
?重复0次或一次
{n} 匹配n次
{n,} 重复n次或多次
{n,m} 重复n次到m次 贪婪普配
正则表达式中的所有量词,都会尽量多的为你匹配
+表示匹配一次或多次
算法:回朔算法
练习:
匹配整数与小数
\d+(/.\d+)? 惰性匹配
? 如果在量词的后面 ?号就是惰性匹配
\d+?
\d{3,5}? 只匹配3次
?? 只匹配0次或一次 尽量少匹配
{n,}? 匹配n次或多次,尽量只配置n次
.*?x 匹配任意字符碰到一个x就停止 匹配身份证
^[1-9]\d{14}(\d{2}[0-9x])?$ re模块方法:
re.findall() 匹配全部符合条件的值,并全部返回
ret = re.findall("\d+","df12 dsfs23dd sdfs21")
print(ret) re.search() 找第一个符合条件的。同时返回的值是一个内存地址。需要group()调用
ret = re.search("\d+","df12 dsfs23dd sdfs21")
print(ret.group())
一般是
if ret:
print(ret.group()) re.match 在search基础上,给每一条都加上了^ 匹配开头
ret = re.match("\d+","df12 dsfs23dd sdfs21")
print(ret)
结果是空 re.split 匹配切割 re.sub 把数字替换成字符串 后面指定替换几次
ret = re.sub("\d","g","adfasdf2131sdfsdf",1) re.subn 吧数字替换成字符串 并返回元祖(替换的结果,替换了多少次) re.cap 不常用 注意:
findall 的优先级
如果匹配中有分组,那么只返回分组的匹配,所以需要在分组前加?:来取消分组优先级 作业:
字符串计算器,加减乘除小括号,使用正则
提示:先算小括号里面的
然后在算乘除,再算加减 三级菜单 递归 或堆栈
时间模块
红包

python修炼第五天的更多相关文章

  1. python修炼第一天

    Python修炼第一天 新的开始:不会Python的运维,人生是不完整的. 为了我的人生能够完整,所以我来了!今后跟着太白金星师傅学习功夫,记录一下心得,以便日后苦练. 一 Python的历史: Py ...

  2. 初学 Python(十五)——装饰器

    初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...

  3. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  4. python学习第五次笔记

    python学习第五次笔记 列表的缺点 1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2.列表只能按照顺序存储,数据与数据之间关联性不强 数据类型划分 数据类型:可变数据 ...

  5. Python学习第五堂课

    Python学习第五堂课推荐电影:华尔街之狼 被拯救的姜哥 阿甘正传 辛德勒的名单 肖申克的救赎 上帝之城 焦土之城 绝美之城 #上节内容: 变量 if else 注释 # ""& ...

  6. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  7. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  8. Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  9. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

随机推荐

  1. k8s基本对象及架构

    一.基本对象 pod pod是最小的部署单元,一个pod由一个或多个容器组成,pod中的容器共享存储和网络,在同一台docker主机上运行. service service是一个应用服务的抽象,定义了 ...

  2. python操作pymysql数据库

    首先需要导入通过import pymysql导入数据库模块 已经创建好一个数据库test,数据库中有一个空表t,只有两个字段id int(5),name varchar(20) import pymy ...

  3. Android组件系列----Intent详解(转载笔记)

    [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用 ...

  4. PL/SQL变量的作用域和可见性

    变量的作用域和可见性设计变量在块中的位置,不同的位置使得变量具有不同的有效性与可访问性. 变量的作用域是指可以使用变量的程序单元部分,可以是包和子程序包等. 当一个变量在它的作用域中可以用一个不限定的 ...

  5. FL Studio中的音频设置

    在FL Studio中,有一步很关键的设置需要我们详细熟悉了解,它就是音频设置,什么是音频设置呢?它就是需要我们选择音频设备驱动程序并优化设置.在了解音频设备之前,我们先来看看什么是音频设备. 我们的 ...

  6. 通过反射将request中的参数封装到对象中

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...

  7. 树形插件zTree与组织插件jOrgChart交互

    <html> <head> <title>组织架构</title> <meta http-equiv="content-type&quo ...

  8. 【做题】POI2011R1 - Plot——最小圆覆盖&倍增

    原文链接 https://www.cnblogs.com/cly-none/p/loj2159.html 题意:给出\(n\)个点,你需要按编号将其划分成不超过\(m\)段连续的区间,使得所有每个区间 ...

  9. iOS QQ 扫一扫 捷径URL

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. vue_全局注册过滤器

    在一个项目中, 某些过滤器全局都有可能用的到, 统一管理并自动化全局注册是很方便的. 代码如下, 后续只需要在src/filters/index.js中添加方法就可以全局使用过滤器了. // src/ ...