一 內建函式
1. revserd 翻轉,返回的是迭代器
# 將 s 倒置 s = `不是上海自來水來自海上` # 方法一 print(s[::-1]) # 方法二 s1 = reversed(s) i = `` for el in s1: i +=el print(i)
2.slice 切片
lis = [`nishi`,`woshi`,`shuia`,`benjim`] s = slice(1,3) print(lis[s])
3.formate
# 格式化輸出 s = "我叫{name},我想去{adress},我喜歡{hobby}.".format(name=`zhangmeng`,adress=`上海`,hobby=`dance`) print(s) # 字串 print(format(`test`, `<20`)) # 左對齊 print(format(`test`, `>20`)) # 右對齊 print(format(`test`, `^20`)) # 居中 # 數值 print(format(3, `b`)) # 二進位制 print(format(97, `c`)) # 轉換成unicode字元 print(format(11, `d`)) # 十進位制 print(format(11, `o`)) # 八進位制 print(format(11, `x`)) # 十六進位制(小寫字母) print(format(11, `X`)) # 十六進位制(大寫字母) print(format(11, `n`)) # 和d一樣 print(format(11)) # 和d一樣 # 浮點數 print(format(123456789, `e`)) # 科學計數法. 預設保留6位小數 print(format(123456789, `0.2e`)) # 科學計數法. 保留2位小數(小寫) print(format(123456789, `0.2E`)) # 科學計數法. 保留2位小數(大寫) print(format(1.23456789, `f`)) # 小數點計數法. 保留6位小數 print(format(1.23456789, `0.2f`)) # 小數點計數法. 保留2位小數 print(format(1.23456789, `0.10f`)) # 小數點計數法. 保留10位小數 print(format(1.23456789e+10000, `F`)) # 小數點計數法.
4. type() 返回型別 ord() 輸入字元找字元編碼的位置 chr() 輸入位置找出對應的字元 ascii()判斷給出的資訊是否是ascii
for i in range(65536): print(chr(i), end="")
二. 遞迴
函式自己呼叫自己,遞迴的入口(引數) 和 出口(return)
語法:
def func(): print(`我是遞迴`) func() func() # 官方顯示最多到1000.但不會跑到1000,實際到998
# 樹形結構的遍歷 import os def func(lujing, n): lis = os.listdir(lujing) # 開啟資料夾,列出資料夾內的所有檔名 for el in lis: # el 為檔案的名字 # 還原檔案路徑 path = os.path.join(lujing,el) if os.path.isdir(path):# 判斷路徑是否是資料夾 print(`*` * n,el) # 顯示資料夾的名字 func(path, n+1) # 再來一次 else: print(`/t`*n,el) # 顯示檔案 func(`f:/a`, 0)
import os def func(lujing, n): lis = os.listdir(lujing ) # 開啟資料夾,列出資料夾內的所有檔名 for el in lis: # el為檔名 # 還原檔案的路徑 path = os.path.join(lujing, el) if os.path.isdir(path): # 判斷路徑是否是資料夾 print(`*`* n, el) # 顯示資料夾名稱 func(path, n+1) # 再來一次 else: with open(path,mode=`wb`) as f: # 開啟檔案,都寫入內容 f.write(b`123456`) print(`/t`*n, el) # 顯示檔案 func(`F:/a`,0)
三. 二分法
掐頭結尾取中間,查詢效率非常高,二分法查詢的主要作用就是查詢元素
# 二分法查詢 lst = [1,4,6,7,9,21,23,45,67,87,65,43,89] n = int(input(`請輸入一個數:`)) lst = sorted(lst) # print(lst) left = 0 right = len(lst)-1 while left <= right: mid = (left + right)//2 if n > lst[mid]: left = mid+1 elif n < lst[mid]: right = mid -1 else: print("存在") break else: print(`不存在`)
# 遞迴 切割列表 def func(n,lst): left = 0 right = len(lst)-1 if lst != []: mid = (left+right)//2 if n>lst[mid]: func(n,lst[mid+1:]) elif n < lst[mid]: func(n,lst[:mid]) else: print("找到了") return else: print("沒找到") return n = int(input(`請輸入你要查詢的數:`)) lst = [1,4,6,7,9,21,23,45,67,87,65,43,89] func(n,lst)
# 遞迴2 def func(n,lst,left,right): # 遞迴找到什麼是可變的,什麼是不可變的 if left <= right: mid = (left+right)//2 if n > lst[mid]: left = mid+1 return func(n,lst,left,right) elif n < lst[mid]: right = mid - 1 return func(n, lst, left, right) else: print(`找到了`) return mid # 難點 else: print(`找不到`) return -1 n = int(input(`請輸入你要查詢的數:`)) lst = [13,45,56,67,78,57,89,101] ret = func(n,lst,0,len(lst)-1) print(ret)
# 最快的查詢方法 lst = [13,45,56,57,67,78,89,101] # 找出最大的數 new_lst = [] for i in range(99): new_lst.append(0) for i in lst: new_lst[i] = 1 i = int(input(`請輸入你要找的資料:`)) if new_lst[i] == 0: print(`不存在`) else: print(`存在`)