1. 程式人生 > >03-python基礎知識-迴圈結構

03-python基礎知識-迴圈結構

迴圈結構

迴圈結構(while)

  • 格式:

    while 表示式:
    	語句塊
    

    執行流程:當程式執行到while語句時,首先判斷表示式的真假。若表示式的值為真,則執行縮排的語句塊,之後返回表示式繼續判斷;若表示式的值為假,則跳過縮排的語句塊執行。

  • 說明:

    • 表示式:也叫迴圈條件
    • 語句塊:也叫迴圈體
    • 死迴圈:迴圈條件一直成立
    • break:跳出迴圈
    • continue:結束本次迴圈,進入下次迴圈
    • else:對應的語句塊,迴圈正常退出時會執行,非正常退出(break)時不執行

迴圈結構(for-in)

  • 說明:也是一種迴圈結構,經常用於便利可迭代物件,如:字串、列表、元組、字典等

  • 格式:

    for x in y:
    	語句塊	
    

    執行流程:x一次代表y種的一個元素,遍歷結束迴圈也就結束了。

列表生成式

  • range:

    # 一個物件,儲存了產生連續整數的演算法,可以節約空間
    # 可以指定起始位置,預設為0
    # print(range(10))
    
    # 可以進行遍歷
    for i in range(10):
        print(i)
    
    # 可以轉換為列表
    print(list(range
    (2, 10)))
  • 列表生成式

    # 列表生成式:可以快速方便地生成列表
    print([i for i in range(1, 11)])
    print([i for i in 'abcdefg'])
    print([i*2 for i in range(1, 11)])
    print([i*i for i in range(1, 11)])
    print([str(i) for i in range(1, 11)])
    print([i for i in range(1, 11) if i % 2 == 0])
    # 生成的列表可以與遍歷的內容沒有一毛錢關係
    print([250 for i in range
    (1, 11)])

迴圈巢狀

  • 迴圈能否巢狀

    • 答:能
  • 迴圈巢狀示例

    # 外層迴圈控制列印多少行
    for i in range(1, 11):
        # print('*' * i)
        # 記憶體迴圈控制每一行多少個
        for j in range(i):
            print('*', end=' ')
        print()
    

    練習:使用while實現一遍

  • 思考:列表排序實現,氣泡排序法思路(升序排序)

    lt = [8, 3, 6, 9, 5, 2, 4, 1, 7]
    第一輪:[3, 6, 8, 5, 4, 1, 7, 9]
    第二輪:[3, 6, 5, 4, 1, 7, 8, 9]
    第三輪:[3, 5, 4, 1, 6, 7, 8, 9]
    
    • 參考示例:
    # 氣泡排序:升序排序
    lt = [8, 3, 6, 9, 5, 2, 4, 1, 7]
    n = len(lt)
    # 外出迴圈控制排序多少輪
    for i in range(n-1):
        # 記憶體迴圈控制相鄰兩個元素的比較
        for j in range(n-1-i):
            if lt[j] > lt[j+1]:
                # 通用交換元素方式
                # temp = lt[j]
                # lt[j] = lt[j+1]
                # lt[j+1] = temp
                # python中特有方式
                lt[j], lt[j+1] = lt[j+1], lt[j]
    
    print(lt)
    
  • 選擇排序

    思路:先取出一個位置,用該位置的元素與後面的所有元素挨個比較,不合適就發生交換。
    示例:lt = [8, 3, 6, 9, 5, 2, 4, 1, 7]
    	第一輪:1, 8, 6, 9, 5, 3, 4, 2, 7
    	第二輪:1, 2, 8, 9, 6, 5, 4, 3, 7
    	第三輪:1, 2, 3, 9, 8, 6, 5, 4, 7
    

字串操作

  • 切割與拼接

    s = 'I love you more than i can say'
    # 切割字串
    # sep:指定按照什麼進行切割,預設按照空格切割
    # maxsplit:指定最大切割次數,預設不限制次數
    # ret = s.split(sep='abc', maxsplit=1)
    # 從右邊進行切割
    ret = s.rsplit(' ', maxsplit=1)
    print(ret)
    
    s = 'Hello\nworld'
    # 按照換行進行切割
    print(s.splitlines())
    
    s = 'I love you more than i can say'
    ret = s.split()
    # print(ret)
    # 字串拼接
    s2 = '*'.join(ret)
    print(s2)
    
  • 查詢統計判斷

    s = 'Hi buddy, if you have something to say, than say; if you have nothing to say, than go.'
    
    # 子串查詢:找到首次出現的位置,返回下標,找不到返回-1
    # ret = s.find('hello')
    # 從後面查詢
    # ret = s.rfind('to')
    # 統計子串出現的次數
    # ret = s.count('if')
    # 判斷是否已指定內容開頭
    # ret = s.startswith('Hi')
    # 判斷是否已指定內容結尾
    ret = s.endswith('go.')
    print(ret)
    
  • 轉換及替換

    s = 'hellO worlD!'
    # 轉換為全大寫
    print(s.upper())
    # 轉換為全小寫
    print(s.lower())
    # 大小寫轉換
    print(s.swapcase())
    # 首字母大寫
    print(s.capitalize())
    # 每個單詞首字母大寫
    print(s.title())
    # 用指定的內容替換指定內容,還可以值替換次數
    print(s.replace('l', 'L', 2))
    
  • 型別判斷

    s = 'abcABC2'
    # 是否是全大寫
    print(s.isupper())
    # 是否是全小寫
    print(s.islower())
    # 是否每個單詞首字母都大寫
    print(s.istitle())
    # 是否是全數字字元
    print(s.isdecimal())
    # 是否是全字母
    print(s.isalpha())
    # 是否全是字母或數字
    print(s.isalnum())