码迷,mamicode.com
首页 > 其他好文 > 详细

5)基础模块和上节回顾

时间:2018-05-10 23:45:05      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:time;radom


                    

技术分享图片技术分享图片

技术分享图片技术分享图片

技术分享图片

 

 

#递归:

#在函数的内部调用自己-----递归
#递归的最大深度:998
#小例子
#猜年龄
#alex多大了,alex比wusir 大两岁   40 +2 +2
#wusir多大了,wusir比金老板大两岁  40+2
#金老板多大了, 40
# age(1)
# n = 1 age(2)+2
# n = 2 age(3)+2
# n = 3 age(4) = 40

def age(n):
    if n ==3:
        return 40
    else:
       return age(n+1)+2
print(age(1))


# #n = 1
# def age(1):
#     if 1 ==3:
#         return 40
#     else:
#         age(2)+2
# #n=2
# def age(2):
#     if 2 ==3:
#         return 40
#     else:
#         age(3)+2
# #n = 3
# def age(3):
#     if 3 ==3:
#         return 40

 

 

技术分享图片 

技术分享图片技术分享图片 

技术分享图片 

技术分享图片

 技术分享图片

 技术分享图片

l = [2,3,4,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]


def cal(l,num = 66):
    length = len(l)
    mid = length//2
    if num > l[mid]:
        l = l[mid+1:]
        cal(l,num)
    elif num < l[mid]:
        l = l[:mid]
        cal(l,num)
    else:
        print('找到了',l[mid],mid)
cal(l,66)

 

 

 

 

 

l =[2,3,4,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
#列表不能变
def cal(l,num,start,end):
    mid = (end -start) //2 +start #0 25-1 /2   12
    if l[mid] >num:
        start =0
        end = mid -1
        cal(l,num,start,mid-1)
    elif l[mid] < num:  #13 24
        start = mid+1
        end= len(l) -1
        cal(l,num,mid+1,end)
    else:
        print('找到了',mid,l[mid])
cal(l,66,0,len(l))
print(l.index(66))

 

 技术分享图片

不能算出不存在的数字

l = [2,3,4,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
#列表不能变
def cal(l,num,start,end):
    if start <=end:
        mid = (end -start) //2 +start #0 25-1 /2   12
        if l[mid] >num:
            # start =0
            # end = mid -1
            cal(l,num,start,mid-1)
        elif l[mid] < num:  #13 24
            # start = mid+1
            # end= len(l) -1
            cal(l,num,mid+1,end)
        else:
            print('找到了',mid,l[mid])
    else:
        print('没找到')
cal(l,60,0,len(l))

 


技术分享图片改成return

l = [2,3,4,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
#列表不能变
def cal(l,num,start,end):
    if start <=end:
        mid = (end -start) //2 +start #0 25-1 /2   12
        if l[mid] >num:
            # start =0
            # end = mid -1
            return cal(l,num,start,mid-1)
        elif l[mid] < num:  #13 24
            # start = mid+1
            # end= len(l) -1
            return cal(l,num,mid+1,end)
        else:
            return mid
    else:
        return '没找到'
print(cal(l,66,0,len(l)))

 

 

 技术分享图片

修改参数:

l = [2,3,4,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
#列表不能变
def cal(l,num,start=0,end=None):
    # if end is None:end = len(l)-1
    end = len(l) -1 if end is None else end
    if start <=end:
        mid = (end -start) //2 +start #0 25-1 /2   12
        if l[mid] >num:
            # start =0
            # end = mid -1
            return cal(l,num,start,mid-1)
        elif l[mid] < num:  #13 24
            # start = mid+1
            # end= len(l) -1
            return cal(l,num,mid+1,end)
        else:
            return mid
    else:
        return '没找到'
print(cal(l,66))

 

 

 

 技术分享图片

 

模块:

 

 

#模块就是 py文件
#特点,写好了,但不直接使用的功能

#为什么这些模块不能直接使用要先导入在使用
#常用的和某个操作相关的 更具相关性分类

#分成不同模块
#三种:内置、扩展、自定义三种模块

 

 

#!/usr/bin/env python
#coding:utf-8

import collections
d = collections.OrderedDict()
print(d)
d['电脑']=1000
d['苹果'] = 10
print(d['电脑'])
for i in d:
    print(i,d[i])

 

技术分享图片 

 技术分享图片



from  collections import namedtuple
lxf = namedtuple('point',['x','y'])
p = lxf(1,2)
print(p.x)
print(p.y)

技术分享图片

from  collections import namedtuple
Card = namedtuple('card',['rank','suit'])
c = Card('2','红心')
print(c.rank,c.suit)#2 红心

 

 

双关队列deque

技术分享图片 

from  collections import deque
q = deque()
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.appendleft('a')
print(q.popleft()) #a
print(q.pop())#4
print(q)

技术分享图片 

Time模块:

%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 当前时区的名称

%% %号本身

 

import time
print(time.time()) #时间戳
print(time.localtime())#结构化时间
print(time.strftime('%Y-%m-%d %H:%M:%S'))#格式化时间

 

import time
print(time.time())#时间戳时间

#格式化时间,用字符串表示的时间
s = time.strftime('%Y-%m-%d %H:%M:%S')
print(s)
print(time.strftime('%x'))

#结构化时间

print(time.localtime())


s = time.localtime()
#时间戳<--结构化-->格式化的时间
print(s.tm_year)

 

1、接下来将时间戳时间转换成结构化的时间:

#!/usr/bin/env python
#coding:utf-8
import time
print(time.time())#1525756410.7670994
print(time.localtime(1500000000))#time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195
print(time.localtime(1600000000))#time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=20, tm_min=26, tm_sec=40, tm_wday=6, tm_yday=257

print(time.gmtime(1600000000))#伦敦的时间

 

2、结构化转换成格式化时间:

str_time = time.gmtime(1600000000)  #伦敦时间
print(time.strftime('%Y-%m-%d %H:%M:%S',str_time))
str_time = time.localtime(1600000000)#当前时间
print(time.strftime('%Y-%m-%d %H:%M:%S',str_time))

 

 

 

3、格式化时间--》结构化时间--》时间戳时间

 

'2018-05-12 13:35:33'
ss = '2018-05-12 13:35:33'
ret = time.strptime(ss,'%Y-%m-%d %H:%M:%S')#time.struct_time(tm_year=2018, tm_mon=5, tm_mday=12, tm_hour=13, tm_min=35, tm_sec=33, tm_wday=5
print(ret)

print(time.mktime(ret))#1526103333.0

 

import time
4、#时间戳转化成格式化的使用
print(time.time())#时间戳
times = time.localtime(1525759883.4262004)#结构化时间
print(time.strftime("%Y-%m-%d",times))#结构化时间---》格式化时间

 

 

 

其他的模块:

技术分享图片 

 

Random模块:

import random
#小数

print(random.random())#0-1之间的小数
print(random.uniform(1,4))#0-4之间的小数

#整数

print(random.randint(1,3))#0\2\3的随机数
print(random.randrange(1,10)) #1-9的随机数不包括10

 

#随机返回
print(random.choice([1,'23',[4,5]]))# 随机返回一个1或者23或者[4,5]
print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合[[4, 5], '23']

 

 

 

 

#验证码:
import random
s = ''
for i in range(4):
   s+= str(random.randint(0,9))
print(s)

#字母带数字

import random
def v_code():
    code = ''
    for i in range(5):
        num = random.randint(0,9)
        alf = chr(random.randint(65,90))#可以换成97,122
        add = random.choice([num,alf])
        code= ''.join([code,str(add)])
    return code
print(v_code())

 

 

#数字、字母
#chr内置方式
num = random.randint(65,90)
print(chr(num))
num = random.randint(97,122)
print(chr(num))

 

#带数字大小写字母验证

import random

def func():
    id = ''
    for i in range(6):
        num = random.randint(65,90)
        alpha1 = chr(num)
        num2 = random.randint(97,122)
        alpha2 = chr(num2)
        num3 = str(random.randint(0,9))
        s = random.choice([alpha1,alpha2,num3])
        id = ''.join([id,str(s)])
    return id
print(func())

 

 

 

SYS模块:

 

import sys    #python解释器
#sys.path  环境变量
#sys.argv  脚本执行
#sys.modules 存放了导入的模块的路径
#sys.exit()  退出

print(sys.path) #['E:\\PyCharm\\day5', 'E:\\PyCharm', 'E:\\python\\python36.zip', 'E:\\python\\DLLs', 'E:\\python\\lib', 'E:\\python', 'E:\\python\\lib\\site-packages']

 

一个模块是否可以被导入,全看是不是在sys.path包含的路径

技术分享图片 

 

 

通过脚本:

import sys
print(sys.argv)
if sys.argv[1] == 'zlex' and sys.argv[2] == 'zlex3714':
    print('keyizhixing')
else:
    sys.exit()

 

技术分享图片 

Os模块:

 

 

 

 

 

 

1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 

2 os.chdir("dirname")  改变当前脚本工作目录;相当于shellcd 

3 os.curdir  返回当前目录: ('.') 

4 os.pardir  获取当前目录的父目录字符串名:('..') 

5 os.makedirs('dirname1/dirname2')    可生成多层递归目录 

6 os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 

7 os.mkdir('dirname')    生成单级目录;相当于shellmkdir dirname 

8 os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname 

9 os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

10 os.remove()  删除一个文件

11 os.rename("oldname","newname")  重命名文件/目录

12 os.stat('path/filename')  获取文件/目录信息

13 os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

14 os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

15 os.pathsep    输出用于分割文件路径的字符串

16 os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

17 os.system("bash command")  运行shell命令,直接显示

18 os.environ  获取系统环境变量

19 os.path.abspath(path)  返回path规范化的绝对路径

20 os.path.split(path)  path分割成目录和文件名二元组返回

21 os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素22 os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False

24 os.path.isabs(path)  如果path是绝对路径,返回True

25 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False

26 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False

27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

28 os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间

29 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

 

https://docs.python.org/2/library/sys.html?highlight=sys#module-sys

技术分享图片 

#!/usr/bin/env python
#coding:utf-8
getcwd 显示当前路径

Chdir 切换目录到其他目录
import os
print(os.getcwd())  #E:\PyCharm\day5
os.chdir(r'E:\PyCharm')
print(os.getcwd()) #E:\PyCharm

 

技术分享图片

技术分享图片 技术分享图片

import os
ret = os.popen('dir').read()
print(ret)# 驱动器 E 中的卷是 软件
 #卷的序列号是 81D7-5D2B

 #E:\PyCharm\day5 的目录

 

 

 

import os
print(os.path.abspath('模块.py'))#E:\PyCharm\day5\模块.py
print(os.path.dirname(r'E:/PyCharm/day5/模块.py'))#E:/PyCharm/day5
print(os.path.dirname(r'E:/PyCharm/day5'))#E:/PyCharm
print(os.path.split(r'E:/PyCharm/day5/模块.py'))#('E:/PyCharm/day5', '模块.py')
print(os.path.basename(r' E:/PyCharm/day5/模块.py'))#模块.py

import os
print(os.path.join(r'E:\\','GG','BB'))

 

ret = os.listdir(r'E:/PyCharm/day5')
print(ret)#['log', 'ss.py', '__pycache__', '模块.py']


技术分享图片

 

#算文件夹的大小:
import os
print(os.path.getsize(r'E:/PyCharm/day5/模块.py'))


import os
ret = os.listdir(r'E:/PyCharm/day5')
print(ret)
sum =0
for path in ret:
    if os.path.isfile(path) is True:
        sum += os.path.getsize(path)
print(sum)



技术分享图片

 

正则表达式:

 

正则表达式的规则:


0-9】 【a - z】 【A - Z】 【A - z】不建议这样写,可能有特殊字符

最好写成【a - z A - Z

0-9a-fA-F】用来匹配16进制

。配任意字符

。。。。。  

。。。。。

技术分享图片 

 

 

 技术分享图片


5)基础模块和上节回顾

标签:time;radom

原文地址:http://blog.51cto.com/xiaorenwutest/2115032

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!