迴圈結構和資料型別內建方法
阿新 • • 發佈:2022-03-08
迴圈結構和資料型別內建方法
while + else迴圈
# while + else連用
當while沒有被break主動結束時,才會執行else的子程式碼
# 語法結構
'''
while 條件:
迴圈體程式碼
else:
迴圈正常結束要執行的程式碼
'''
eg:
num = 1
while num < 10:
print(num)
num += 1
else:
print('列印完成')
# continue不會導致else不被執行,只有break會導致
死迴圈與while的巢狀
# 死迴圈就是一直執行下去的迴圈,死迴圈會極度影響電腦的效能,甚至會造成硬體的損壞 死迴圈無法結束,會一直迴圈執行下去,並且一直佔用CPU工作 eg: count = 10 while True: count *= count print(count) # 電腦頂不住了,報錯KeyboardInterrupt '''!!!不要輕易嘗試!!!''' # while巢狀 eg: i = 1 while i < 10: j = 1 while j <=i: print('%s * %s = %s'%(i,j,i*j),end=' ') j +=1 print() i +=1 執行結果: 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
for迴圈
""" for迴圈可以做到的事情while迴圈都可以做到!!! 但是for迴圈語法更加簡單 使用頻率更高 """ 一般情況下涉及到迴圈取值的時候 都會考慮使用for迴圈而不是while迴圈 # 語法結構 ''' for 變數名 in 迴圈物件: # 字串、列表、字典、元組、集合 迴圈體程式碼 每執行一次迴圈都將迴圈物件中的一個元素賦值給變數名,迴圈物件中的所有元素賦值完後迴圈結束 ps:針對for迴圈的變數命名,也要遵從見名知意 如果真的沒有合適的名字可以使用常用變數名i、j、k等 ''' eg: #列印十以內的數字 for num in range(10): print(num) 執行結果: 0 1 2 3 4 5 6 7 8 9
不同型別資料使用for迴圈的結果
-
列表
data_list = ['傘兵一號', 18, 183.5, 100] for data in data_list: print(data) 執行結果: 傘兵一號 18 183.5 100 # 遍歷列表每個元素
-
字串
# for迴圈字串 str1 = 'hello world' for item in str1: print(item) 執行結果: h e l l o w o r l d # 遍歷字串每個字元
-
字典
# for迴圈字典 city_dict = {'安徽':'合肥','江蘇':'南京'} for city in city_dict: print(city) 執行結果: 安徽 江蘇 # 遍歷每個鍵值對的key,value取不出來
-
元組
# for迴圈元組 tp = (11,22,33,44) for num in tp: print(num) 執行結果: 11 22 33 44 # 遍歷元組每個元素
-
集合
# for迴圈集合 s = {11,22,33,44} for num in s: print(num) 執行結果: 33 11 44 22 # 遍歷集合的每個元素,因為集合和字典的內部元素是無序的,但是字典因為使用較多,被pycharm優化了,所有字典輸出是有序的,集合因為使用較少,沒有優化,所以輸出的順序是亂的
range關鍵字
range方法在python2和python3中有所區分
在python2中range是直接產生一個列表 元素很多的情況下比較佔用空間
在python2中有一個xrange 其實就是python3裡面的range
在python3中range相當於哆啦A夢的口袋 不佔空間但是可以取出很多資料
在python3中就只有一個range了
'''range其實是一個迭代器,用於產生一個數據集合 但是更節省空間'''
-
range用法一
eg: for i in range(5): print(i) 執行結果: 0 1 2 3 4 #括號內只寫一個數字,可以看作生成從0到括號內的數字前一個數字的列表
-
range用法二
eg: for i in range(1,5): print(i) 執行結果: 1 2 3 4 #括號內寫了兩個數字,可以看作生成從前一個數字到後一個數字的列表,顧頭不顧尾
-
range用法三
eg: for i in range(1,5,2): print(i) 執行結果: 1 3 #第三個數字代表步長,即隔多少個數字取值一次
for迴圈補充
'''
for迴圈其實和while迴圈差別不大,用for迴圈可以實現的邏輯while都可以實現,只不過for迴圈相較於while迴圈更加簡潔,所以,while迴圈關鍵字for迴圈也可以使用
'''
#for + break
結束這個for迴圈
#for + continue
跳過本次迴圈,直接開始下一次迴圈
#for + else
for迴圈正常結束後執行else子程式碼
#for迴圈巢狀
原理和while迴圈相同
如何檢視資料型別的內建方法
藉助程式設計軟體自動提示,資料型別後使用英文句號即可顯示全部可用方法
資料型別的內建方法
-
整型
1. 型別轉換 eg: res = '123' print(type(res)) res = int(res) print(type(res)) 執行結果: <class 'str'> <class 'int'> '''int()可以將字串型別轉換成整型,但僅限於純數字,否則會報錯''' 2. 進位制轉換 eg: print(bin(100)) # 轉換成二進位制 print(oct(100)) # 轉換成八進位制 print(hex(100)) # 轉換成十六進位制 print(int('0b1100100',2)) # 二進位制轉換成十進位制 print(int('0o144',8)) # 八進位制轉換成十進位制 print(int('0x64',16)) # 十六進位制轉換成十進位制 執行結果: 0b1100100 0o144 0x64 100 100 100 '''int()括號裡直接加其他進位制數也可以轉換,注意不要加引號,會報錯'''
-
浮點型
1. 型別轉換 eg: res = '12.55' print(type(res)) res = float(res) print(type(res)) print(float(12)) 執行結果: <class 'str'> <class 'float'> 12.0 '''float()可以將字串型別轉換成浮點型,但僅限於純數字,否則會報錯,整數轉化後會在小數點後加一個0'''
-
字串
1. 型別轉換 str()可以將所有基本資料型別轉換成字串 eg: print(str(11), type(str(11))) print(str(11.0), type(str(11.0))) print(str(['11', '22']), type(str(['11', '22']))) print(str({'安徽': '合肥', '江蘇': '南京'}), type(str({'安徽': '合肥', '江蘇': '南京'}))) print(str((11, 22, 33)), type(str((11, 22, 33)))) print(str({11, 22, 33}), type(str({11, 22, 33}))) 執行結果: 11 <class 'str'> 11.0 <class 'str'> ['11', '22'] <class 'str'> {'安徽': '合肥', '江蘇': '南京'} <class 'str'> (11, 22, 33) <class 'str'> {33, 11, 22} <class 'str'> 2. 其他方法 s = 'hello world' # 1. 索引取值 # print(s[0]) # >>>h ================================================ # 2. 切片操作 # print(s[2:4]) # >>>ll # 取出s[2]到s[3]的字元,顧頭不顧尾 ================================================ # 3. 步長 # print(s[0:5:2]) # >>>hlo # 取出s[0]到s[4]的字元,每兩個取值間隔為2 ================================================ # 索引取切片擴充套件 # print(s[-1]) # 索引值為負則反向取值 # >>>d # print(s[-1:-5:-1]) #反向取值,步長為1,前面兩個都為負,步長必須為負 # >>>dlro # print(s[-5:-1]) # 從倒數第五個取到倒數第2個,顧頭不顧尾 # >>>worl ================================================ # 4. 統計字串長度 # print(len(s)) # >>>11 ================================================ # 5. 成員運算 # print('o' in s) # 判斷是否在字串中,返回布林值 # >>>True ================================================ # 6. 移除字串首位指定的字元(使用頻率較高) # print(s.strip('d')) # 當括號內為空時,預設移除空格 # >>>hello worl # 只能移除兩頭的,不能移除中間的 '''ps:登入賬號時用的多,可以移除使用者輸錯的空格''' ================================================ # 7.按照指定字元切割字串 # data = '傘兵一號|傘兵二號|傘兵三號' # print(data.split('|')) # >>>['傘兵一號', '傘兵二號', '傘兵三號'] # name1,name2,name3 = data.split('|') # print(name1,name2,name3) # >>>傘兵一號 傘兵二號 傘兵三號 # print(data.split('|',1)) # 控制切幾次 # >>>['傘兵一號', '傘兵二號|傘兵三號'] # print(data.rsplit('|',1)) # 從右邊開始切 # >>>['傘兵一號|傘兵二號', '傘兵三號'] """split方法切割完字串之後是一個列表""" ================================================ # 8. 大小寫問題 # print(s.lower()) # 將字串的字母全部轉成小寫 # >>>hello world # print(s.upper()) # 將字串的字母全部轉成大寫 # >>>HELLO WORLD ================================================ # 9. 判斷開頭結尾問題 # print(s.startswith('h')) # 判斷是否以括號內的內容開頭,返回True或者False,括號內不可以為空,但可以為多個字元 # >>>True # print(s.endswith('ld')) # 判斷是否以括號內的內容結尾,返回True或者False,括號內不可以為空,但可以為多個字元 # >>>True '''大小寫會影響到判斷結果'''