Python筆記
阿新 • • 發佈:2020-07-17
一、資料型別
1.基礎
0漁:( **kwargs) 傳:1. name = ... 2. 字典 **{,,,,} ( *args) 可變長度的列表(元祖) ( **kwargs) 可變長度的字典 *[] 遍歷元素 print 預設換行,如需取消,可更改為 print('aaa',end = '\t') enumerate() 函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標 變數: 1.變數只是一個門牌號,無任何實際意義 2.同樣的值不會被建立多次,再有變數則直接指向它 一、基本資料型別: python 函式中 start、end:均為 [ ) ,從0開始 1.字串 str :(11個魔法) #字串一經建立不可修改,所有修改和拼接都產生新的字串(在記憶體中連續) 1. 加法:組合 2. 乘法:重複n次 3. input() 接收到的都是字串 4. int() 可將字串強制轉換成數字 5. str() 可將某資料型別強制轉換成字串 -- 只在外面加了 '' 6. in 和 not in 成員運算子 ################### 7個基本魔法 ################## join replace split(不保留分割) find strip(去除) upper lower -- 首字母大寫 .capitalize() -- 變小寫 casefold lower -- 變大寫 upper -- 大小寫 翻轉 swapcase -- 在某長度居中 center -- 放左邊 ljust -- 放右邊 rjust -- 去除 (前面後面)所有空格、\n、\t(或指定字元,放括號裡傳進去) strip、lstrip、rstrip -- 子字串 在原字串中有幾個 count -- 判斷開頭、結尾 startswith endswith -- 索引子字串位置 index find -- 格式化 format 將字串中佔位符{xx} 賦值 ,, 用法還挺多(模板輸出必用!方便!) -- 賦值法 -- test = '可愛的{name}最喜歡在{location}幹{hobby}' -- test.format(name = name, location = location,hobby = hobby) -- 順序法 -- test = '可愛的{}最喜歡在{}幹{}' -- .format(name,location,hobby) -- 判斷是否全是 字母/漢字 、數字 isalnum -- 判斷是否全是 字母/漢字 isalpha -- 判斷是否全是 數字 isdigit isdecimal 還一個 -- 判斷是否存在 特殊\n \t 字元 isprintable -- 判斷是否全是空格 isspace -- 製表 expandtabs() 將製表符 展開為n個空格 -- 最後加,巨他媽方便! 將 \t 填充為 你想要的多少個空格 ★ -- join- 將..拼接符 插入字串之間 (產生新的,需要用新變數儲存,原來字串的統統不變) join -- 字元替換 之 replace -- test.replace('aa','11',2) # 將'aa'替換為'11',只替換前2個,預設為替換全部 # 一次只能替換1種 -- 字元替換 之 translate --先建立翻譯法則 m = str.maketrans('aeiou','12345') --再按照法則翻譯 v = test.translate(m) -- 字串分割 -- 普通分割 partition('s') 按第一個's'分割成3份 ('s'保留) rpartition('s') 按倒數第一個's'分割成3份('s'保留) split('s',8) 從左往右找8個's'進行分割('s'不保留)(不傳個數時,預設分割所有's') -- 超級方便的接受方法:v1,v2,..., = test.split('f') rsplit('s',8) 從右往左找8個's'進行分割('s'不保留) -- 按行分割 splitlines(True/False用於選擇是否保留換行,釘在前面) ##################### 5個灰魔法 ###################### -- 索引 [3] 第4個元素 -- 切片 [ )(左閉右開) 結果仍為字串而非元素--字元 [0:3] 第1-3 個 [0:-1] 第1-最後(-1不包括) [2: ] 第3個 - 最後全部 -- 獲取長度 len(test) 或 .len() (字串長度 / 元素個數) -- for迴圈 for A in test : print(A) -- range 用於建立連續的數字,或固定步長的數字 range(100) : 0,1,2,...,99 range(1,100) : 1,2,3,...,99 range(0,100,5) : 0,5,10,..,95 range(100,0,-1) : 從後往前 2.數字 int : 1. 次方:** 2. 取餘:% (可用於判斷奇偶數) 3. 取商:// 4. 加法求和時用 sum1 , 防止覆蓋掉sum()函式功能 ################## 數字的 方法 ################# 1. bit_length() 獲取數字佔了幾位 3.布林值 bool : 1.True False -- True : '有東西' 、 數字不為0 -- False : ' ' 、 0 2.開頭必須大寫 4.列表 list : -- li = [ 1,2,'a','b', [1,'a'] ,2 ] 1.元素也可為列表,子列表整體為一個元素 2.可用 [ :] 切片 ,得到的結果仍為列表 取最後一個:[-1] 3.支援 for迴圈、while迴圈 : 遍歷每個'元素' 4.支援 in 操作,查詢元素 4.修改:列表可被修改(記憶體中可不連續地存) -- 不可修改: 數字,字串,元祖 -- 可修改: 列表,字典,陣列,集合 5.刪除:del 6.強制轉換:list('asdf') -- ['a','s','d','f'] 7.列表->字串: 1.列表元素都是字串: -- ''.join(li) 2.列表元素有數字: -- 寫for迴圈,v = v + str(s) ############### list類:方法 (list可修改,不可用新變數接收)################# ★ 1. li.append('ss') -- 將'ss'整體 追加為列表最後一個元素 2. li.clear() -- 清空列表 3. li.copy() -- 淺拷貝 -- v = li.copy() 4. li.count('ss') -- 計數元素'ss'有幾個 ★ 5. li.expand(可迭代物件-- 如:列表,字串) -- 擴充套件列表(取可迭代物件裡的元素) 6. li.index('ss') -- 索引元素下標(位置),找到第一個就結束 -- 可傳入 start、end 來圈定區間 ★ 7. li.insert(2,'ss') 下標,值 -- 插入元素至指定位置 8. li.pop(下標) -- 刪除,預設預設刪除最後一個元素 -- 傳入下標,刪除指定位置的元素 -- 可接收所刪除的元素的值 v = li.pop() 9. li.remove('ss') -- 刪除指定的元素,找到第 一個就結束 -- 不可預設,不可接收 #### 刪除 #### #### pop remove del clear #### 10. li.reverse() -- 翻轉,將列表元素順序翻轉 11. li.sort() -- 排序,預設:從小到大對元素排序 -- ( reverse = True ):從大到小排 -- 列表元素型別必須全是數字 5.元祖 tuple : -- tu = ( 11,'ss',[],(),22,33 , ) -- 有序,可理解為不可修改的列表 -- 元祖的一級元素不可被 修改、增加、刪除 -- 二級或更高的可以被修改 -- 想修改時可 與 list靈活轉換 1. 支援 索引、切片 2. 支援 for迴圈 3. str list tuple 三個可迭代物件 :可互相強制型別轉換,join可用 ######### 方法 ######### 1. tu.count('ss') -- 計數元素 'ss' 有幾個 2. tu.index('ss') -- 索引元素 'ss' 位置 6.字典 dict : 按雜湊表儲存 -- dic = { 'v1' : 'k1' , # 鍵值對 'v2' : 'k2' } -- 無序,可修改 -- 字典的key 不可以是 :列表 字典 -- 字典的value :任何值都可以 -- 索引:(取值) -- v = dic['v1'] -- 結果:v = -- 若沒有,報錯 -- 刪除: -- del: -- del dic[key] -- 不支援 while 迴圈 -- 支援 for 迴圈 -- 迴圈下一級key: -- for i in dic: -- for i in dic.keys() : -- 迴圈下一級value: -- for i in dic.values() : -- 迴圈下一級鍵值對: -- for i,j in dic.items() : ################### 字典的 方法 ################### 重要:keys values items get update #### 普通方法 #### 1. dic.clear() -- 清空 2. dic.copy() -- 淺拷貝 ★ 3. dic.get(key,若沒有返回的值) -- 索引取值 -- 若沒有,不報錯,返回指定值 ★ 4. dic.keys() dic.values() dic.items() -- 返回所有資訊,為特殊型別,類似於可迴圈的列表 5. dic.pop(key,若沒有返回的值) -- 刪除key對應的值 -- 所刪除的值可用 v= 接收 -- 若沒有,不報錯,返回指定值 6. dic.popitem() -- 隨機刪一個鍵值對 7. dic.setdefalt(key,value) -- 設定一個新鍵值對的預設值(可理解為新增一個鍵值對) -- 若該key已存在,則不再設定 -- 可用 v= 接收到該key對應的當前值 ★ 8. dic.update(鍵值對或字典) -- 更新字典元素 -- 無則新增,有則覆蓋 -- 第二種寫法( key1=value1, key2=value2 ) #### 靜態方法 #### 1. dict.fromkeys(序列,value) -- 建立字典,{ 序列的每個元素 :統一的值 序列的每個元素 :統一的值 ... } -- 序列可為: 列表、字串 等 ######################## 整理 ########################### 一、數字 1. int() 二、字串 1. replace find join strip split startswith upper format 三、列表 1. append extend insert 2. 索引 切片 迴圈 四、元祖(不可修改的列表) ★ 一級元素不能被修改 增加 刪除 1. count index 都不重要 2. 索引 切片 迴圈 五、字典(鍵不可修改,值可修改) ★ 無序不能切片,可修改 1. get update keys values items 2. for迴圈 索引 六、布林值 1. bool() 2. False值:0 None '' [] () {} ######################## 變數、資料型別 總結 ########################### -- 是否可變: 1.可變:列表,字典 2.不可變:字串,元祖 -- 訪問順序: 1.順序訪問:字串,列表,元祖 2.對映訪問:字典(訪問速度快,但佔用記憶體多) -- 存放元素個數: 1.原子型別:數字,字串 2.容器型別:列表,元祖,字典 二、邏輯: 1.條件: 1. 要加冒號 2. elif: 3. and 與 or 優先順序一樣,嚴格按照先後順序執行 2.迴圈:(也要加冒號) 1. 死迴圈:while True: 2. 迴圈10次: count = 0 while count <10 : count +=1 ... ... 3. continue後的內容不執行,可用於跳過某個特殊條件 4. break 跳出迴圈
2.補充
####### 知識點 ####### # 1. 輸入輸出 ''' name = input ('ID:') password = input('PassWord:') print("hello world !") ''' # 2. 數字 ''' a1 = 2 a2 = 3 a3 = a1 / a2 a4 = a1 ** a2 a5 = a2 % a1 print( '除法:' , a3 , '\n' + '次方:', a4 , '\n' + '取餘:' , a5 , '\n' ) # 最好直接寫3個 print() ''' ######## 練習題 ####### # 考點: # 1. if條件語句 # 2. while迴圈 # 3. 奇偶數 # 1. 使用while迴圈輸出 123456 8910 ''' count = 0 while count < 10 : count += 1 # 先寫,容易忘(此時,count已經+1了,相當於從1開始) if count != 7 : print(count) else : pass ''' # 2. 求1-100所有數的和 ''' count = 0 sum1 = 0 while count < 100 : count += 1 sum1 = sum1 + count print(sum1) ''' # 3. 輸出1-100所有奇數 ''' count = 0 while count < 100 : count += 1 if count % 2 == 1 : print(count) ''' # 4. 輸出1-100所有偶數 ''' count = 0 while count < 100 : count += 1 if count % 2 == 0 : print(count) ''' # 5. 求1-2+3-4+5...99 ''' count = 0 sum1 = 0 while count < 99 : count += 1 if count % 2 == 1 : sum1 = sum1 + count else : sum1 = sum1 - count print(sum1) ''' # 6. 使用者登入(三次機會) ''' count = 0 while count < 3: count += 1 id = input ('please input your id:') password = input ('please input your password:') if id == 'shendaw' and password == '163': print ('login successful!') break else : print ('login failed!') ''' ################### 字串 #################### ################ 練習題 ############### # 例題 . 使用者輸入字串,列印其每個字元及其對應的索引 # 題眼:以len作為range ''' test = input('>>>') for i in range(len(test)) : print(i,test[i]) ''' ### 1.執行 python 指令碼的2種方式 # -- 1. 編輯好檔案後 執行檔案 # -- 2. python 直譯器 現場互動 寫一句執行一句 ### 2. 簡述 位、位元組 的關係 # -- 1位元組 = 8位 ### 3. 簡述 ascii unicode utf8 gbk 關係 # -- ascii : 1位元組 (7位 0-126) # -- unicode : 萬國碼 字符集 至少2位元組 # -- utf8 :Unicode壓縮版 編碼規則 漢字3位元組 # -- gbk :漢字編碼規則 2位元組 ### 10. 字串操作 # a. 移除兩頭空格 ''' name = ' aleX' v = name.strip('a') print(v) ''' # b. 判斷開頭是否為 al ''' name = 'aleX' v = name.startswith('al') print(v) ''' # c. 判斷結尾是否為 X ''' name = 'aleX' v = name.endswith('X') print(v) ''' # d. 將 l 替換為 p ''' name = 'aleX' v = name.replace('l','p') print(v) ''' # e. 根據 l 分割 (分割後變為列表型別) ''' name = 'aleX' v = name.split('l') print(v,type(v)) ''' # f. 變大寫 ''' name = 'aleX' v = name.upper() print(name,v) ''' # g. 變小寫 ''' name = 'aleX' v = name.lower() print(name,v) ''' # h. 輸出第2個字元 ''' name = 'aleX' v = name[1] print(name,v) ''' # i. 輸出後2個字元 ''' name = 'aleX' v = name[-2:] print(v) ''' # j. 輸出 e 下標 ''' name = 'aleX' v = name.find('e') print(v) ''' # k. 獲取子序列,僅不包含最後一個字元 # 法一: ''' name = input('>>>') v = name[:-1] print(v) ''' # 法二: ''' name = input('>>>') l = len(name) for i in range(0,l-1) : print(name[i]) ''' ### 21. 字串是否可迭代,如是,用for迴圈 ''' name = input('>>>') for i in name : print(i) ''' ### 22. 用下劃線 連線 字串裡的字元 ''' name = input('>>>') v = '_'.join(name) print(v) ''' ### 22. 用下劃線 連線 列表裡的元素 ''' name = ['sfdsdf','asfd','safggs'] v = '_'.join(name) print(v) ''' ### 23. range 在 python2 和 python3 裡的區別: # python2 裡 : 直接全部建立在記憶體裡 # python3 裡 : 迴圈時才一個一個建立 ''' for i in range(100,0,-1): print(i) ''' ### 24. 整數加法計算器: ''' n = input('>>>') l = n.split('+') n1 = int( l[0].strip() ) n2 = int( l[1].strip() ) re = n1 + n2 print(l,re) ''' ''' test = 'sdkflslkfjsslk' v = test.split('s',1) print(v) ''' ### 25. 統計 數字 、 字母 個數: ''' num = 0 alpha = 0 test = input('>>>') for i in test : if i.isdecimal() : num += 1 if i.isalpha(): alpha += 1 print(num,alpha) ''' ### 27. 製作模板 ''' name = input('name:') location = input('location:') hobby = input('hobby') result = '可愛的' + name + '最喜歡在' + location + '幹' + hobby print(result) ''' ''' name = input('name:') location = input('location:') hobby = input('hobby:') result = '可愛的{0}最喜歡在{1}幹{2}' result = result.format(name,location,hobby) print(result) ''' ### 28. 製作隨機驗證碼,不區分大小寫 ### 29. 過濾敏感詞彙 ''' test = input('>>>') new = test.replace('蒼老師','***') new = new.replace('東京熱','***') print(new) ''' ### 30. 製作表格 ,迴圈輸入,檢測到輸入為 q 或 Q 停止錄入,超過20字元以20個計 ''' result = 'name:\t'.expandtabs(25) + 'password:\t'.expandtabs(25) + 'email:\t\n'.expandtabs(25) while True : name = input('name:')[:20] + '\t' if name.strip().lower() == 'q' : break name = name.expandtabs(25) password = input('password:')[:20] + '\t' password = password.expandtabs(25) email = input('email:')[:20] + '\t\n' email = email.expandtabs(25) result = result + name + password + email print(result) ''' # 改進!牛逼!用了模板format 和 expandtabs最後加 !!! ''' template = '{}\t {}\t {}\t\n' result = template.format('name:','password:','email:') while True : name = input('name:')[:20] if name.strip().lower() == 'q' : break password = input('password:')[:20] email = input('email:')[:20] result = result + template.format(name,password,email) result = result.expandtabs(25) print(result) '''
3.總習題20個
################# 1. 用 下劃線 將列表元素拼接為一個字串 # li = ['a','b','k'] # v = '_'.join(li) # print(v) ################# 3. 列表操作 # li = ['a','b','k'] # del li[2] # print(li) ################ 5. 元祖操作 # 1.計算元祖長度並輸出 # 2.獲取元祖第二個元素並輸出 # 3.獲取1-2個元素並輸出 # 4.for迴圈輸出元素 # 5.for,len,range輸出元祖索引 # 6.enumrate輸出元素和序號(序號10開始) # tu = ('a','b','c') # v = enumerate(tu,10) # for i,j, in v : # print(i,j) ################ 6. 元祖操作 # tu = ('alex',[11,22,{'k1':'v1','k2':['age','name'],'k3':(11,22,33)},44]) # ## tu[1][2]['k2'].append('seven') # tu[1][2]['k3']=(111111) # # print(tu) ######################################### 10. 輸出商品列表 # 使用者輸入序號,顯示使用者選中的商品 # 商品 li = ['手機','電腦','滑鼠','鍵盤'] # 要求: 允許使用者新增商品 # li = ['手機','電腦','滑鼠','鍵盤'] # while True: # for i in range(len(li)) : # print(i,li[i]) # n1 = input('please choose what you want:') # if n1.isdecimal() : # 判斷格式是否正確 # n1 = int(n1) # 強制轉換為數字 # else : # print('the content format is wrong,please enter again!') # continue # print('the item you selected:', li[n1]) # # n2 = input('please input the item you want to add:') # if n2 != '' : # 使用者輸入的 n2非空,才新增 # li.append(n2) ############################################## 11. 使用者互動顯示 n級聯動選擇 # 如: 省市縣 # 要求: 允許使用者增加內容 # 南京市 = [1,2,3] # 宿遷市 = [4,5,6] # 杭州市 = [7,8,9] # 金華市 = [10,11,12] # # 江蘇省 = [南京市,宿遷市] # 浙江省 = [杭州市,金華市] # # 中國 = [江蘇省,浙江省] # for i in 中國 : # print(i) # 1. 字典法: dic = { '江蘇省':{ '南京市':[1,2,3], '蘇州市':[4,5,6], '宿遷市':[7,8,9] }, '浙江省':{ '杭州市': [1,2,3], '金華市':[4,5,6] }, '廣西省':{ '南寧市': [1,2,3], '桂林市':[4,5,6], '貴港市':[7,8,9] } } province = input('輸入省:') for i in dic[province]: print(i) city = input('city:') for i in dic[province][city]: print(i) ############################################## 12. 列舉布林值是 False的所有值 # 0 '' False # [] () {} # None # #################################### 13. 對 2個列表: # l1 = [11,22,33] # l2 = [22,33,44] # a. 獲取內容相同的元素列表 # b. l1有,l2沒有的元素列表 # c. l1沒有,l2有的元素列表 # d. 獲取內容都不相同的元素 # l1 = [11,22,33] # l2 = [22,33,44] # v = [] # for i in l1 : # if i in l2: # v.append(i) # print(v) # l1 = [11,22,33] # l2 = [22,33,44] # v = [] # for i in l1 : # if i not in l2: # v.append(i) # print(v) # l1 = [11,22,33] # l2 = [22,33,44] # v = [] # for i in l2 : # if i not in l1: # v.append(i) # print(v) # l1 = [11,22,33] # l2 = [22,33,44] # v = [] # for i in l1 : # if i not in l2: # v.append(i) # for i in l2 : # if i not in l1: # v.append(i) # print(v) 18.48 ########################################## 14. 利用 for迴圈和range輸出: # a. for迴圈從大到小輸出 1 - 100 # b. for迴圈從小到大輸出 100 - 1 # c. while迴圈從大到小輸出 1 - 100 # d. while迴圈從小到大輸出 100 - 1 # for i in range(1,101) : # print(i) # for i in range(100,0,-1) : # print(i) # count = 0 # while count < 100 : # count += 1 # print(count) # count = 101 # while count >1 : # count -= 1 # print(count) ####################################################### 15. 購物車 # 功能要求: # 要求使用者輸入總資產 # 顯示商品列表,使用者根據序號選擇商品加入購物車 # 購買,若商品總額大於資產餘額不足,否則購買成功 # goods = [ # {'name':'電腦','price':1999} # {'name':'滑鼠','price':10} # {'name':'鍵盤','price':20} # {'name':'老婆','price':998} # ] # goods = [ # {'name': '電腦', 'price': 1999}, # {'name': '滑鼠', 'price': 10}, # {'name': '鍵盤', 'price': 20}, # {'name': '老婆', 'price': 998} # ] # for i in goods : # n = goods.index(i) # print(n,i) # n1 = input('輸入資產:') # n1 = int(n1) # n2 = input('輸入編號:') # n2 = int(n2) # if n1 >= goods[n2]['price'] : # print('purchase success!') # else : # print('insufficient balance!') ######################################## 16. 分頁顯示內容 # a. 通過for迴圈建立301條資料,資料型別不限,如: # alex-1 [email protected] pwd1 # alex-2 [email protected] pwd1 # alex-3 [email protected] pwd1 # alex-4 [email protected] pwd1 # ... # b. 提示使用者輸入頁碼,顯示該頁資料 # # 注意:每頁顯示10條資料 # 若輸入的不是十進位制數字則提示格式錯誤 # 1.字串模板法: # template = 'alex-{}\t alex{}@live.com\t pwd{}' # test = [] # for i in range(1,302) : # v = template.format(i,i,i) # test.append(v) # n1 = input('page:') # n1 = int(n1) # for i in range(10*n1-10, min(10*n1,301) ) : # print(test[i]) # 2.字典法: # li = [] # for i in range(301): # temp = {'name':'alex'+str(i), # 'email':'alex'+str(i)+'@163.com', # 'pwd':'pwd'+str(i) # } # li.append(temp) # page = input('page:') # page = int(page) # for i in range((page-1)*10,min(301,page*10)) : # print(li[i]) ################################################# 17. 數字 1,2,3,4,5,6,7,8 # 能組成多少個互不相同且無重複數字的 2位數 # li = [1,2,3,4,5,6,7,8] # count = 0 # for i in li : # for j in li : # if i != j : # count += 1 # print(count) ################################################ 18. 用 for迴圈和range輸出 9*9 乘法表 # str0 = '' # for j in range(1,10) : # for i in range(1,10): # if i <= j : # r = i*j # str0 += str(i)+'*'+str(j)+'='+str(r)+'\t' # print(str0) # str0 = '' # for j in range(1,10) : # for i in range(1,10): # if i <= j : # r = i*j # print(i,'*',j,'=',r,end = '\t') # print('') ################################################ 19. 找出一列表中任 2元素相加 =9的元素集合 [(4,5),(3,6)] # nums = [2,7,11,15,1,8,7] # r = [] # for i in nums : # for j in nums : # if i!=j and i+j == 9 : # r.append((i,j)) # print(r) ############################################### 20. 百錢買百雞 # 公雞1只 5元 # 母雞1只 3元 # 小雞1只 1/3元 # 要求:100元買100只雞,三種都要有 # 問:各買幾隻? # for a in range(1,20) : # for b in range(1,67) : # for c in range(1,98) : # if 5*a + 3*b + c/3 == 100 and a+b+c == 100 : # print((a,b,c))
4.集合
1.集合:(set : 可變,不可修改)
(frozenset : 不可變集合)
1.無序
2.元素必須是不可修改型別
3.元素不同(相同的元素無效)
2.應用:
簡單去重:(會打亂順序)
強制轉換為集合,再轉換回去
3.set方法:
1. 新增1個元素
-- s.add()
7. 新增多個元素
-- s1.update([1,2,3])
2. 清空
-- s.clear()
3. 拷貝
-- s.copy()
4. 刪除(隨機刪一個元素)
-- s.pop()
5. 刪除(指定元素)(不存在會報錯)
-- s.remove('s')
6. 刪除(指定元素)(不會報錯)
-- s.discard('s')
7. 取交集
-- s3 = s1 & s2
-- s3 = s1.intersection(s2)
8. 取並集
-- s3 = s1 | s2
-- s3 = s1.union(s2)
9. 取差集(s1 - 相同部分)
-- s3 = s1 - s2
-- s3 = s1.difference(s2)
10. 交叉補集(s1+s2-相同部分)(互不相同部分)
-- s3 = s1 ^ s2
-- s3 = s1.symmetric_difference(s2)
11. 判斷有無交集
-- v = s1.isdisjoint(s2)
12. 判斷s1是否為s2子集
-- v = s1 <= s2
-- v = s1.issubset(s2)
13. 判斷s1是否為s2父級
-- v = s1 >= s2
-- v = s1.issuperset(s2)
二、字串格式化
一、% 方法
s = 'i am %s , my age is %d' %('shendaw',22)
1. + 儘量不用,會開闢記憶體空間,效率低
2. %s 萬能
-- %.4s (擷取字串前4位)
3. %d 整型數字
4. %f 浮點數(預設小數點後取6位)
-- %.2f (小數點後取2位)
5. %% 百分號
二、format 方法
# 一般方法
-- s = 'i am {} , my age is {}' .format('shendaw',22)
# 元祖索引方式取值
-- s = 'i am {1} , my age is {0}' .format(22,'shendaw')
-- s = 'i am {1} , my age is {0}' .format(*(22,'shendaw'))
-- s = 'i am {1} , my age is {0}' .format(*[22,'shendaw'])
# 字典方式取值
-- s = 'i am {name} , my age is {age}' .format(name='shendaw',age=22)
-- s = 'i am {name} , my age is {age}' .format(**{'name':'shendaw','age':22})
# 強制轉換型別
-- s = 'i am {:s} , my age is {:d}' .format('shendaw',22)
三、函式
1. 函式與過程:
過程:沒有返回值的函式
2. 啥時候用函式:
1. 減少重複程式碼 (有超過兩次的重複)
2. 保持一致性(易維護)
3. 增強可擴充套件性
4. 封裝一個功能
3. 出現同名的函式:
前面的都會被覆蓋掉,只有最後一個生效
4. 遇到第一個return即結束
5. def jj (x,y,z=6)
z的預設值為6
6. 可變長度引數:
def jj (x,y,*args) #可變長度的列表(元祖)
def jj (x,y,**kwargs) #可變長度的字典
傳參:
def jj (x,y,z):
jj( *[1,2,3] ) #遍歷取元素
四、刷題 -- 劍指offer
''' 3. 輸出任一重複的數字 '''
s = input('please input the figers:')
li = s.split(' ')
print(li)
''' 50. 輸出第一個無【重複】的字元 '''
# 1. 用列表自帶的count方法----程式碼最簡單
# s = input('please input the string:')
# s = list(s)
# for item in s :
# if s.count(item) == 1 :
# print(item)
# break
# 2. 構造輔助雜湊表(字典)----時間複雜度最小
# s = input('please input the string:')
# dic = {}
# # 建立雜湊表
# for item in s :
# dic.update({item:0})
# # 向雜湊表填值
# for item in s :
# dic[item] += 1
# # 以雜湊表輔助尋找次數 =1的字元
# for item in s :
# if dic[item] = 1 :
# print(item)
# break
# 3. 建立兩個容器,一個放不同的,一個放重複的。
# s1-s2得無重複的元素集合
# s = input('please input the string:')
#
# s1 = []
# s2 = set()
# for item in s:
# if item not in s1 :
# s1.append(item)
# else :
# s2.add(item)
# for item in s2:
# s1.remove(item)
#
# print(s1[0])
五、刷題 -- 位元組跳動 -- leetcode
# 3. 無重複字元的最長子串
# v = input('請輸入字串:')
# def find_max_length_from_i(v) :
# l = []
# for i in range(len(v)) :
# v_new = []
# for j in range(i,len(v)) :
# if v[j] not in v_new :
# v_new.append(v[j])
# else:
# l.append(len(v_new))
# break
# j += 1
# i+=1
# r = l.sort()
# r = l[-1]
# return r
#
# r = find_max_length_from_i(v)
# print(r)
############## 法二
# v = input('請輸入字串:')
# def hhh(v) :
#
# t2 = []
# for i in range(len(v)):
# t1 = []
# cnt= 0
# for j in range(i,len(v)):
#
# if v[j] not in t1:
# t1.append(v[j])
# cnt += 1
# else:
# break
# j += 1
# t2.append(cnt)
# i += 1
# return max(t2)
#
# r = hhh(v)
# print(r)
'''
10/9
'''
''' 1. 分類 -- 通過 '''
# test = input('please input the string:')
# res = 0
# n = len(test)
# for j in range(n) :
# temp = []
# for i in range(j,n) :
# if i < n-1 :
# if test[i] not in temp :
# temp.append(test[i])
# else :
# len_temp = len(temp)
# if len_temp > res :
# res = len_temp
# break
# else :
# if test[i] not in temp :
# temp.append(test[i])
# len_temp = len(temp)
# if len_temp > res :
# res = len_temp
# else:
# len_temp = len(temp)
# if len_temp > res :
# res = len_temp
# print(res)
''' 2. flag -- 未通過 '''
# test = input('please input the string:')
# res = 0
# n = len(test)
# for j in range(n) :
# temp = []
# flag = 0
# for i in range(j,n) :
# if i == n-1 or test[i] in temp :
# flag = 1
# if test[i] not in temp :
# temp.append(test[i])
# if flag == 1 :
# len_temp = len(temp)
# if len_temp > res:
# res = len_temp
# break
# print(res)
''' 3. 實時更新 -- 未通過 '''
# test = input('please input the string:')
# res = []
# for j in range(len(test)) :
# temp = []
# for i in range(j,len(test)) :
# if test[i] not in temp :
# temp.append(test[i])
# print('temp:',temp)
# print('res:',res)
# if len(temp) > len(res) :
# res = temp
# print('更新!')
# else :
# break
六、刷題 -- 位元組跳動 -- 牛客網
'''
血的教訓:面試題
# 題目:將陣列nums中所有0放到結尾去
# 錯因:刪除導致迴圈溢位、下標漏掉元素
# 經驗:刪除、迴圈溢位、下標漏元素 ———— 建立新容器
'''
# nums = [1,0,2,4,6,0,0,3]
# res = []
# cnt = 0
# for i in range(len(nums)) :
# if nums[i] != 0 :
# res.append(nums[i])
# else :
# cnt += 1
# for i in range(cnt) :
# res.append(0)
#
# print(res)
'''
1、萬萬沒想到之聰明的編輯
'''
####### 1. 刪除法 - 失敗 ######
# test1 = input('請輸入字串:')
# test1 = list(test1)
# for i in range(len(test1)-2):
# if test1[i] == test1[i+1]:
# if i+2<len(test1)-1 and test1[i+2] == test1[i+1]:
# test1.pop(i+2)
# elif i+3<len(test1)-1 and test1[i+2] == test1[i+3]:
# test1.pop(i+2)
# print(test1)
####### 2. 新增法 -成功 ######
# 分次輸入 — 簡單
# n = int(input())
# while n:
# test1 = input()
# test1_new = []
# for i in range(len(test1)):
# if i>=2 and test1[i-2] == test1[i-1]:
# if test1[i] == test1[i-1]:
# continue
# elif i<len(test1)-1 and test1[i] == test1[i+1]:
# continue
# else :
# test1_new.append(test1[i])
# else:
# test1_new.append(test1[i])
#
# print(''.join(test1_new))
# n-=1
# 連續輸入 - 較麻煩
# n = int(input('請輸入n:'))
# n1 = n
# test = []
# while n:
# test.append(list(input('請輸入字串:')))
# n-=1
#
# for j in range(n1):
# test_new = []
# for i in range(len(test[j])):
# if i>=2 and test[j][i-2] == test[j][i-1]:
# if test[j][i] == test[j][i-1]:
# continue
# elif i<len(test[j])-1 and test[j][i] == test[j][i+1]:
# continue
# else :
# test_new.append(test[j][i])
# else:
# test_new.append(test[j][i])
#
# print(''.join(test_new))
# n-=1
########### 大佬解法 ########
# n = int(input())
# while n > 0:
# s = input()
# res = []
# for e in s:
# if len(res) < 2:
# res.append(e)
# continue
# if len(res) >= 2:
# if e == res[-1] and e == res[-2]:
# continue
# if len(res) >= 3:
# if e == res[-1] and res[-2] == res[-3]:
# continue
# res.append(e)
# print("".join(res))
# n -= 1
# 2. 萬萬沒想到之抓捕孔連順
# 初步可行:
# s = input()
# n,d = s.split(' ')
# n = int(n)
# d = int(d)
# b = input().split(' ')
# cnt = 0
# for i in range(n-2):
# for j in range(i+1,n-1):
# for k in range(j+1,n):
# if int(b[k]) - int(b[i]) <= d :
# cnt+=1
# print(cnt)
# s = input()
# n,d = s.split(' ')
# n = int(n)
# d = int(d)
# b = input().split(' ')
# cnt = 0
# for i in range(n-2):
# for j in range(i+1,n-1):
# if int(b[j]) - int(b[i]) <= d :
# for k in range(j+1,n):
# if int(b[k]) - int(b[i]) <= d :
# cnt+=1
# print(cnt % 99997867)
# 自由落體
# import time
#
# time_start=time.time()
# while True:
# t = time.time() - time_start
# y = 0.5*9.8*t**2
# print('(0,%s)' %y)