1. 程式人生 > 其它 >迴圈結構和資料型別內建方法

迴圈結構和資料型別內建方法

迴圈結構和資料型別內建方法

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迴圈的結果

  1. 列表

    data_list = ['傘兵一號', 18, 183.5, 100]
    for data in data_list:
        print(data)
    執行結果:
        傘兵一號
        18
        183.5
        100	
        
    # 遍歷列表每個元素
    
  2. 字串

    # for迴圈字串
    str1 = 'hello world'
    for item in str1:
        print(item)
    執行結果:
        h
        e
        l
        l
        o
    
        w
        o
        r
        l
        d
        
    # 遍歷字串每個字元
    
  3. 字典

    # for迴圈字典
    city_dict = {'安徽':'合肥','江蘇':'南京'}
    for city in city_dict:
        print(city)
    執行結果:
        安徽
    	江蘇
        
    # 遍歷每個鍵值對的key,value取不出來
    
  4. 元組

    # for迴圈元組
    tp = (11,22,33,44)
    for num in tp:
        print(num)
    執行結果:
        11
        22
        33
        44
    # 遍歷元組每個元素
    
  5. 集合

    # 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其實是一個迭代器,用於產生一個數據集合 但是更節省空間'''
  1. range用法一

    eg:
        for i in range(5):
            print(i)
    執行結果:
        0
        1
        2
        3
        4
    #括號內只寫一個數字,可以看作生成從0到括號內的數字前一個數字的列表
    
  2. range用法二

    eg:
        for i in range(1,5):
            print(i)
    執行結果:
        1
        2
        3
        4
    #括號內寫了兩個數字,可以看作生成從前一個數字到後一個數字的列表,顧頭不顧尾
    
  3. 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. 整型

    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()括號裡直接加其他進位制數也可以轉換,注意不要加引號,會報錯'''
    
  2. 浮點型

    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'''
    
    
  3. 字串

    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
    '''大小寫會影響到判斷結果'''