iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

玩程式新手村 – C和Python系列 第 23

第23天 - C 和 Python的較量 (三)

  • 分享至 

  • xImage
  •  

「條件判斷」與「迴圈」是程式語言來控制執行流程的主要方法。我們來看看 C 和 Python 在這兩個流程控制結構的差異。

條件判斷 (Conditional statement)

  • 在 C 語言中,if...else 和 switch...case 都是用來進行條件判斷的控制結構。
    可以根據不同的條件執行不同的程式碼區塊。

    兩者的比較:

    • if...else 比較靈活 (switch...case 只能比較數值或是字元)
    • switch…case 的效率比 if...else 要高

    用以下 C 程式來舉例說明:

    int x = 5;
    int score = 96;
    
    // if-else example:
    if (x > 0) {
        printf("x 是正值\n");
    } else if (x < 0) {
        printf("x 是負值\n");
    } else {
        printf("x 是零\n");
    }
    
    if (score >= 90 && score <= 100) {  // 邏輯AND運算子(&&)
            printf("成績: A\n");
    }
    
    // switch example:
    switch (x) {
        case 1:
            printf(" x 是 1\n");
            break;
        case 2:
            printf(" x 是 2\n");
            break;
        default:
            printf(" x 不是 1或2\n");
    }
    
  • 在 Python 中,可以使用 if...elif...else 語句來進行條件判斷。

    # if-else example:
    x = 5
    if x > 0:
        print("x 是正值")
    elif x < 0:
        print("x 是負值")
    else:
        print("x 是零")
    
    score = 96
    if 90 <= score <= 100:  # 也可以用 if score >= 90 and score <= 100:
    		print("成績: A")
    
    • Python 沒有 switch...case 的語句。
  • 不過,Python 3.10 引入了一項名為 Structural Pattern Matching 的新功能。

    match ... case語句比 C 語言中的 switch...case 語句更強大,因為它不僅可以根據表達式的值進行匹配,還有更多功能變化,例如模式比對(Structural pattern matching)。
    這裡就用以下 Python 程式來簡單說明基本功能。

    def buy(thing):
        match thing:
            case 'apple' | 'banana' | 'orange':
                print('It is a fruit.')
        return True
    
    # 另外一例:
    # 在平面任一點: (0, 0), (3, 6), (3, 0), (0, 6), (3,)
    point = (3, 6) 
    # 表達式是一個(x, y)元組
    match point:
        case (0, 0):
            print("原點")
        case (0, y):
            print(f"Y={y}")
        case (x, 0):
            print(f"X={x}")
        case (x, y):
            print(f"X={x}, Y={y}")
        case _:
            print("不是點座標")
    
    

    注意:C的 switch.. case (常要加上 break) 和Python的 match…case 兩者的流程不一樣。
    match 中不會有 Fallthrough (繼續向下) 的情況,也就是一個 case區塊 執行完畢就會離開 match區塊,而不會繼續下一個 case區塊。

    注意到上面程式中碼中的最後一個 case,他的 pattern 是個底線 _,這叫 萬用字元 (wildcard),也就是會 match 所有的情況,當然這個 case 是可省略的。有點類似 C 的 default

三元運算子 (Ternary operator)

  • 是一種簡潔表達條件操作的方式,最適合用於簡單的條件表達式。
    請注意,不要在複雜的條件下使用,可能導致程式碼變得不易閱讀。

  • 在C語言也稱為條件運算子 (conditional operator),語法是:
    condition ? expression_if_true : expression_if_false;

    • 變數 = 條件式 ? 表達式1 : 表達式2

    舉例:

    int a = 6;
    int b = 3;
    
    int maxValue = (a > b) ? a : b;
    
  • 在Python也稱為條件表達式 (conditional expression),語法是:
    expression_if_true if condition else expression_if_false

    • 變數 = 表達式1 if 條件式 else 表達式2

    用以下 Python 程式來舉例說明:

    a = 6
    b = 3
    
    max_value = a if a > b else b
    

上一篇
第22天 - C 和 Python的較量 (二)
下一篇
第24天 - C 和 Python的較量 (四)
系列文
玩程式新手村 – C和Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言