1. 程式人生 > >程序控制結構--選擇結構

程序控制結構--選擇結構

err cond rac 語法 model fin mod enc 控制結構

選擇結構

  • 單分支選擇結構

    語法

    if 表達式:
    語句塊

    當表達式值為True時,表達式滿足,語句塊執行,否則不執行

    >>> x = input(‘Input two numbers:‘)
    Input two numbers:23 44
    >>> a,b = map(int,x.split())
    >>> if a<b:
    ... a,b=b,a
    ...
    >>> print(a,b)
    44 23
    >>> if 3>2: print(‘ok‘)
    ...
    ok
    >>> if True:print(3);print(5)
    ...
    3
    5
  • 雙分支選擇結構

    語法

    if 表達式:
    語句塊1
    else:
    語句塊2

    下面的代碼通過雞兔同籠問題演示了雙分支結構的用法

    >>> jitu,tui = map(int,input(‘請輸入雞兔總數和腿總數:‘).split())
    請輸入雞兔總數和腿總數:9 28
    >>> tu = (tui - jitui*2)/2
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name ‘jitui‘ is not defined
    >>> tu = (tui - jitu*2)/2
    >>> if int(tu) == tu:
    ... print(‘雞:{0},兔:{1}‘.format(int(jitu-tu),int(tu)))
    ... else:
    ... print(‘數據不正確,無解‘)
    ...
    雞:4,兔:5
  • 三元運算符

    語法

    value1 if condition else value2

    當表達式condition的值與True等價時,表達式的值為value1,否則表達式的值為value2,另外,value1和value2本身也可以是復雜的表達式,這個結構的表達式也具有惰性求值的特點

    >>> a = 5
    >>> print(6) if a>3 else print(5)
    6
    >>> print(6 if a>3 else 5)
    6
    >>> b=6 if a>13 else 9
    >>> b
    9
    >>> x = math.sqrt(9) if 5>3 else random.randint(1,100) # 還未導入math和random模塊
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name ‘math‘ is not defined
    >>> import math
    >>> x = math.sqrt(9) if 5>3 else random.randint(1,100)
    >>> x = math.sqrt(9) if 2>3 else random.randint(1,100)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name ‘random‘ is not defined
    >>> import random
    >>> x = math.sqrt(9) if 2>3 else random.randint(1,100)
    >>> x
    89
  • 多分支選擇結構

    語法

    if 表達式1:
    語句塊1
    elif 表達式2:
    語句塊2
    elif 表達式3:
    語句塊3
    .
    .
    .
    else:
    語句塊n

    其中,關鍵字elif是else if的縮寫,實例

    >>> def func(score):
    ... if score > 100 or score < 0:
    ... return ‘wrong score.must between 0 and 100.‘
    ... elif score > 90:
    ... return ‘A‘
    ... elif score >=80:
    ... return ‘B‘
    ... elif score >=70:
    ... return ‘C‘
    ... elif score >= 60:
    ... return ‘D‘
    ... else:
    ... return ‘E‘
    ...
    >>> func(78)
    ‘C‘
  • 選擇結構的嵌套

    語法

    if 表達式1:
    語句塊1
    if 表達式2:
    語句塊2
    else:
    語句塊3
    else:
    if 表達式4:
    語句塊4

    百分制轉等級制的代碼

    >>> def func(score):
    ... degree = ‘DCBAAE‘
    ... if score>100 or score<0:
    ... return ‘wrong score.must between 0 and 100.‘
    ... else:
    ... index = (score - 60) // 10
    ... if index >=0:
    ... return degree[index]
    ... else:
    ... return degree[-1]
    ...
    >>> func(78)
    ‘C‘
    >>> func(2)
    ‘E‘
    >>> func(-1)
    ‘wrong score.must between 0 and 100.‘
    >>> func(66)
    ‘D‘
  • 構建跳轉表實現多分支選擇結構

    使用列表、元組或字典可以很容易構建跳轉表,在某些場合下可以更快速地實現類似與多分支的選擇結構的功能。例如,下面代碼根據不同的輸入內容的不同來調用不同的函數完成不同的功能

    >>> funcDict = {‘1‘:lambda:print(‘You input 1‘),‘2‘:lambda:print(‘You input 2‘),‘3‘:lambda:print(‘You input 3‘)}
    >>> x = input(‘Input an integer to call different function:‘)
    Input an integer to call different function:3
    >>> func = funcDict.get(x,None)
    >>> if func:
    ... func()
    ... else:
    ... print(‘Wrong integer‘)
    ...
    You input 3

程序控制結構--選擇結構