#遞歸:
#在函數的內部調用本身-----遞歸
#遞歸的最大深度: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))html
# #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 40python
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))shell
不能算出不存在的數字bash
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))app
改爲returndom
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)))ide
修改參數:函數
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))ui
模塊:
#模塊就是 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)
一、接下來將時間戳時間轉換成結構化的時間:
#!/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))#倫敦的時間
二、結構化轉換成格式化時間:
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))
三、格式化時間--》結構化時間--》時間戳時間
'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
四、#時間戳轉化成格式化的使用
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") 改變當前腳本工做目錄;至關於shell下cd
3 os.curdir 返回當前目錄: ('.')
4 os.pardir 獲取當前目錄的父目錄字符串名:('..')
5 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
6 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
7 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname
8 os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir 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進制
。配任意字符
。。。。。
。。。。。