1. 程式人生 > >Python 程式設計語言 筆記(四)

Python 程式設計語言 筆記(四)

  • 【例項】三者最大值
  • 【IPO】 輸入:三個數值 處理:三者最大演算法 輸出:列印最大值
  • 【演算法比較】 ① 通盤比較 — 將每一個值與其他所有值比較以確定最大值 通盤比較 三個值的情況比較簡單,如果是五值比較複雜,而且效率低 (因為表示式沒有被充分利用) ② 決策樹 — 避免冗餘比較 決策樹 結構更加複雜! ③ 順序處理 — 逐個掃描每個值,保留最大者 【程式】程式9:
  • # program: maxn.py
    # 尋找一組數中的最大值
    def main():
        n = eval(input("How many numbers are there?"))
        # 將第一個值賦值給max
    max = eval(input("Enter a number >>")) # 連續與後面n-1值進行比較 for i in range(n-1): x = eval(input("Enter a number >>")) if x > max: max = x print("The largest value is", max) main()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    【執行結果】 How many numbers are there? 5 Enter a number >> 9 Enter a number >> 6 Enter a number >> 3 Enter a number >> 10 Enter a number >> 20 The largest value is 20

    ④ 使用Python內建函式max() 內建函式

    3.5 基本迴圈結構

    (1)for迴圈

    Python可以使用for語句迴圈遍歷整個序列的值,格式如下:

    for <var> in <sequence>:
        <body>
    • 1
    • 2

    在for迴圈中,迴圈變數var遍歷了佇列中的每一個值,迴圈變數var遍歷了佇列中的每一個值,迴圈語句體為每個值執行一次

    例:for迴圈求平均數

    • IPO: 輸入:待輸入數字個數,數字 處理:平均數演算法 輸出:平均數 通用設計方案:
      • ① 輸入數字的個數n
      • ② 將sum初始化為0
      • ③ 迴圈n次:
        • 輸入數字x
        • 將x加入sum中
      • ④ 將sum/n作為平均數輸出出來
    • 程式10:
    #average1.py
    n = eval(input("How many numbers?"))
    sum = 0.0
    for i in range(n):
        x = eval(input("Enter a number >>"))
        sum = sum + x
    print("\nThe average is", sum/n)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    【執行結果】 How many numbers? 3 Enter a number >> 5 Enter a number >> 7 Enter a number >> 6

    The average is 6.0

    for迴圈的缺點:

    程式開始時必須提供輸入數字總數,以提供固定迴圈次數 大規模數字則需要使用者數清楚個數 為此,Python提供了另一種迴圈模式即無限迴圈,不需要提前知道迴圈次數

    (2)while迴圈

    語句格式:

    while <condition>
        <body>
    • 1
    • 2

    條件總是在迴圈體執行之前被判斷,這種結構又被稱為前測迴圈(當型迴圈) 如果迴圈體沒有對i初始化或迴圈體沒有累加,條件判斷一直為真,迴圈體將一直執行,即為死迴圈程式,這時通常使用Ctrl+C來終止一個程式

    (3)break語句 —— 退出迴圈

    例:程式11:

    #TestBreak.py
    sum = 0
    number = 0
    while number  < 20:
        number += 1
        sum += number
        if sum > 100:
            break
    print("The number is", number)
    print("The sum is", sum)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    【執行結果】 The number is 14 The sum is 105

    (4)continue — 結束本次迴圈

    即跳出迴圈體中下面尚未執行的語句,對於while迴圈,繼續求解迴圈條件;對於for迴圈,繼續遍歷迴圈列表

    continue語句和break語句的區別:

    continue語句只結束本次迴圈,而不終止整個迴圈的執行,而break語句則是直接結束整個迴圈流程,不再判斷迴圈條件是否成立

    (5)迴圈語句中的else — 不滿足迴圈條件時執行

    3.6 通用迴圈構造方法

    (1)互動式迴圈

    互動式迴圈是無限迴圈的一種,允許使用者通過互動的方式重複程式特定部分 互動式迴圈

    (2)哨兵迴圈

    執行迴圈直到遇到特定的值,迴圈語句才終止執行

    設計方法:

    ① 設定一個哨兵值作為迴圈終止的標誌
    ② 任何值都可以做哨兵,但要與實際資料有所區別

    哨兵迴圈

    (3)檔案迴圈

    面向檔案的方法是資料處理的典型應用,可以事先將資料錄入到檔案,便於編輯修改,python中採用readline()方法中的end of file迴圈模式

    (4)迴圈巢狀

    決策和迴圈互相巢狀可以實現複雜演算法,假設數字以逗號分隔出現在檔案的同一行上

    (3)(4)整合程式如圖: 檔案迴圈巢狀

    3.7 死迴圈和迴圈巢狀

    (1)死迴圈 — 無法靠自身的控制中止的迴圈

    死迴圈

    死迴圈的使用:通過死迴圈可以一直檢測捕捉特定異常

    (2)後測迴圈(直到型迴圈)

    先接受輸入,再判斷迴圈條件是否滿足。在Python中沒有後測迴圈語句,但可以通過while和break語句間接實現,如: while

    break

    (3)半路迴圈 — 迴圈判斷條件在迴圈體的中部

    例: 半路迴圈

    3.8 布林表示式

    條件語句和迴圈語句都使用布林表示式作為條件 布林值為真(True)或假(Flase)

    (1)布林操作符:and,or,not

    and和or用於組合兩個布林表示式,併產生一個布林結果

    <expr> and <expr>
    <expr> or <expr>
    • 1
    • 2

    not運算子計算一個布林表示式的反值

    not <expr>
    • 1

    (2)布林操作符的優先順序:not > and > or

    真值表

    例:壁球比賽計分:

    • 假設scoreA和scoreB代表兩個壁球選手的分數
      • 規則1:只要一個選手達到了15分,本場比賽就結束
        • 即: scoreA == 15 or scoreB == 15
      • 在程式中構造一種迴圈條件,對遊戲結束條件取反,只要比賽還沒有結束遊戲就一直進行下去
        • 即: while not( scoreA == 15 or scoreB == 15 ) # 比賽繼續
      • 規則2:如果一方打了七分而另一方一分未得時,比賽也結束
        • 即:scoreA == 15 or scoreB == 15 or (a == 7 and b == 0) or (b == 7 and a == 0)
      • 需要一個團隊贏得至少兩分才算贏,即其中一個隊已經達到了15分,且分數差異至少為2時比賽結束(排球)
        • 即:(a >= 15 or b >= 15) and abs(a-b)>=2

    (3)布林代數: 布林表示式遵循特定的代數定律,這些規律被稱為布林邏輯或布林代數

    代數 布林代數
    a*0 = 0 a and false == false
    a*1 = a a and true == a
    a+0 = 0 a or false == a

    ① 任何資料和true進行or操作都是真

    ② and和or操作符都符合分配率

    ③ not操作符可負負抵消

    ④ 德摩根定律:not放進表示式後,and和or發生變化

    如:not(a or b) == (not a) and (not b) not(a and b) == (not a) or (not b)

    ⑤ 布林代數的應用 — 用德摩根定律分析和簡化表示式

    (4)布林表示式作為決策 — 判斷退出迴圈條件

    ① 對於數字(整數和浮點數)的零值被認為是false,任何非零值都是true

    ② bool型別是特殊的整數

    ③ 布林表示式具有短路求值的特性