第3章 選擇與循環


3.1 條件表達式

  • 算術運算符:+、-、*、/、//、%、**
  • 關系運算符:>、<、==、<=、>=、!=,且可連續使用,如
>>> 1<2<3 True >>> 1<2>3 False >>> 1<3>2 True
  • 測試運算符:in、not in、is、is not
  • 邏輯運算符:and、or、not,注意短路求值
  • 位運算符:~、&、|、 ^、 <<、>>    (前述文章有涉及)
  • 矩陣乘法運算符:@
  • 條件表達式的值只要不是 False、0(或0.0、0j等)、空值None、空列表、空元組、空集合、空字典、空字符串、空 range 對象或其他空迭代對象,解釋器均認為與 True 等價。
>>> if 3:              #使用整數作為條件表達式
        print(5) 5
>>> a = [1, 2, 3] >>> if a:              #使用列表作為條件表達式
        print(a) [1, 2, 3] >>> a = [] >>> if a: print(a) else: print('empty') empty
>>> i = s = 0 >>> while i <= 10:              #使用關系表達式作為條件表達式
    s += i i += 1
>>> print(s) 55
>>> i = s = 0 >>> while True:                    #使用常量True作為條件表達式
    s += i i += 1
    if i > 10: break
>>> print(s) 55
>>> s = 0 >>> for i in range(0, 11, 1):   #遍歷迭代對象中的所有元素
    s += i >>> print(s)
  • 條件表達式中不允許使用賦值運算符“=”。
>>> if a=3: SyntaxError: invalid syntax >>> if (a=3) and (b=4): SyntaxError: invalid syntax

3.2.1 單分支選擇結構

語法:

if 表達式:

  語句塊

x = input('Input two number:') a, b = map(int, x.split()) if a > b: a, b = b, a               #序列解包,交換兩個變量的值
print(a, b)

3.2.2 雙分支結構

if 表達式:

  語句塊1

else:

  語句塊2

>>> chTest = ['1', '2', '3', '4', '5'] >>> if chTest: print(chTest) else: print('Empty') ['1', '2', '3', '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 2>3 else random.randint(1, 100) x

86

3.2.3 多分支結構

if 表達式1:

  語句塊1

elif 表達式2:

  語句塊2

elif 表達式3:

  語句塊3

else:

  語句塊4

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

例子:

def func(score): if score > 100: return 'wrong score.must <= 100.'
    elif score >= 90: return 'A'
    elif score >= 80: return 'B'
    elif score >= 70: return 'C'
    elif score >= 60: return 'D'
    elif score >= 0: return 'E'
    else: return 'wrong score.must >0'    

3.2.4 選擇結構的嵌套

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]

3.2.5 構建跳轉表實現多分支選擇結構

  • 使用列表、元組字典可以很容易構建跳轉表,在某些場合下可以更快速地實現類似於多分支選擇結構的功能。
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:') func = funcDict.get(x, None) if func: func() else: print('Wrong integer.')

3.3.1 for 循環與 while 循環

  Python提供了兩種基本的循環結構語句——while語句for語句

  • while 循環一般用於循環次數難以提前確定的情況,也可以用於循環次數確定的情況。
  • for 循環一般用於循環次數可以提前確定的情況,尤其是用於枚舉序列或迭代對象中的元素。

while 循環:

while 條件表達式:

  循環體

[else:

  else子句代碼塊]

for 循環:

for 取值 in 序列或迭代對象:

  循環體

[else:

  else子句代碼塊]

  •  在編寫循環語句時,應盡量減少循環內部不必要的計算,將與循環變量無關的代碼盡可能地提取到循環之外。

優化前的代碼:

digits = (1, 2, 3, 4)

for i in range(1000):
    result = []
    for i in digits:
        for j in digits:
            for k in digits:
                result.append(i*100+j*10+k)

優化后的代碼:

for i in range(1000):
    result = []
    for i in digits:
        i = i*100
        for j in digits:
            j = j*10
            for k in digits:
                result.append(i+j+k)

3.4 break 和 continue 語句

  • break 語句在 while 循環和 for 循環中都可以使用,一般放在 if 選擇結構中,一旦 break 語句被執行,將使得整個循環提前結束。
  • continue 語句的作用是終止當前循環,並忽略 continue 之后的語句,然后回到循環的頂端,提前進入下一次循環。
  • 除非 break 語句讓代碼更簡單或更清晰,否則不要輕易使用。

  下面的代碼用來計算小於100的最大素數,注意break語句和else子句的用法。

for n in range(96, 1, -1):
    for i in range(2, n):
        if n%i == 0:
            break
    else:
        print(n)
        break

97

  • 刪除上面代碼中最后一個 break 語句,則可以用來輸出 100 以內的所有素數。
for n in range(100, 1, -1):
    for i in range(2, n):
        if n%i == 0:
            break
    else:
        print(n)
  • 每次進入循環時的 i 已經不再是上一次的 i,所以修改其值並不會影響循環的執行。
>>> for i in range(7):    
      print(id(i),':',i)
10416692 : 0
10416680 : 1
10416668 : 2
10416656 : 3
10416644 : 4
10416632 : 5
10416620 : 6

例:輸出序列中的元素。

a_list=['a', 'b', 'mpilgrim', 'z', 'example']
for i,v in enumerate(a_list):
    print('列表的第', i+1, '個元素是:', v)

(0, 'a')
(1, 'b')
(2, 'mpilgrim')
(3, 'z')
(4, 'example')

例:判斷一個數是否為素數。

import math
n = input('Input an inter:')
n = int(n)
m = math.ceil(math.sqrt(n)+1)
for i in range(2, m):
    if n%i == 0 and i<n:
        print('No')
        break
else:
    print('Yes')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM