Python筆記_第一篇_面向過程_第一部分_6.條件控制語句(if)

  Python正如其餘語言同樣存在兩種經常使用的邏輯判斷體(也叫結構化程序設計)。所謂邏輯判斷體是經過你想要完成的編程思路,經過在邏輯判斷體中的相互判斷和做用獲得你想要的結果。邏輯判斷體也叫控制語句,Python分爲兩種:第一種叫:條件控制語句;第二種叫:循環控制語句。另外,還會對這兩種判斷體之間的組合進行舉例,也就是所謂語句的嵌套。這裏要特別說明的,基本上來講,任何語言對於語句的執行過程都是從上而下,從左至右的這麼一個過程,這個邏輯必需要有!這部分的內容是最有意思,而且是Python語言的重中之重,他們之間的組合變幻無窮可讓你的思想或者想要實現的東西變爲現實!python

 

條件控制語句簡介express

  所謂條件控制語句時經過一條或者多條語句執行結果(True或者False)來決定執行的代碼塊。編程

  共分兩類三種:if條件控制語句和其餘條件控制語句(try語句,包括raise、assert)。後面這一種叫作異常處理和斷言判斷。所謂條件控制就是若是...是什麼,就會...怎麼樣。函數

  這裏要特別說明的是,Python和其餘語言最大的不同就是每句結尾是沒有分號的(;),並且語句體內也沒有{  }括號進行包含。這是由於Python是很是注重語句的對齊,若是語句對不齊的話就會形成語句沒法執行。也就是說Python是用語句對齊的方式來替代花括號,去表達那些是結構體內信息,那一句是屬於上面的條件判斷的,這就是Python語言的特色。學習

  不少教材吧try語句和raise放到後面來講,其實這應該算是條件控制語句裏面的,因此應該提到前面來。測試

 

第一部分:if條件控制語句編碼

1.   詳細解釋  spa

  存在形式形式以下:操作系統

  1. ifdebug

  2. if-elif-elif...

  3. if-elif-else

  4. if-else

  經過這四種形式能夠發現,if、elif、else這三個關鍵字組成了if條件控制語句的形式。不少教材這裏分別講解,有時候小白比較亂,這裏經過一個結構解析很是快速的掌握這方面的內容。

  表示一個最完整的if條件控制語句的結構:

  if 判斷語句0:

    執行語句0

  elif 判斷語句1:

    執行語句1

  elif 判斷語句2:

    執行語句2

  elif 判斷語句n:

    執行語句n

  else:

    執行語句q

  解釋以下:

  1. 基本的邏輯:所謂判斷語句,就是經過設定的條件,得出僅且只有的兩種結果真(True)或者假(False),若是條件爲真(True)就執行本身的執行語句;若是條件爲假(False)就不執行本身的執行語句。(這句話很好理解,就是判斷真(True)或者是這麼回事兒,就執行下面的執行語句,反之亦然。注意哦,這裏是執行本身的執行語句)。

  2. 短路原則:所謂的短路原則就是指全部的判斷語句(包括判斷語句0,判斷語句1,判斷語句2,判斷語句n),只要有一條判斷語句爲真(True),就跳出整個條件判斷結構體,執行完畢;固然若是所有爲假的話,判斷完畢後將沒有任何結果,向下順延執行if條件判斷結構體以外的信息。

  3. 有了基本的邏輯短路原則,後面對着四種存在的形式分別進行解釋:

    (1) 上面這個最完整的存在形式(也就是形式3. if - elif - else)

    流程以下:

  第一步:

  if 判斷語句0:# 若是這部分爲真

    執行語句0  # 將執行這個語句且跳出整個結構體 / 若是上面的判斷語句爲假將執行第二步

   第二步:

  elif 判斷語句1:

    執行語句1

  elif 判斷語句2:

    執行語句2

  elif 判斷語句n:

    執行語句n

  # 若是其中一條elif語句爲真將執行本身的執行語句且跳出整個結構體 / 若是沒有一條爲真將執行第三步

  第三步:

  else:

    執行語句q

  # 若是上面的所有爲假(換句話說考慮的判斷語句條件以外,可能還存在其餘的狀況話)將執行這條語句,執行完畢跳出整個條件判斷結構體。

  # 很簡單吧!

 

    (2) 從上面這個完整形式能夠看出else這個關鍵字在這裏起到了全部條件我都考慮了,可是還有可能其餘條件我尚未考慮在內的狀況,用一個else所有包含了,去執行語句。所以咱們這裏把第四種存在形式說一下(4. if - else)

    流程以下:

  第一步:

  if 判斷語句0:# 若是這部分爲真

    執行語句0 # 將執行這個語句且跳出整個結構體 / 若是上面的判斷語句爲假將執行第二步

  第二步:

  else:

    執行語句q

  # 若是if判斷條件爲假,其餘可能存在的狀況下,執行執行語句q這一句,而後跳出整個條件判斷結構體。

 

    (3) 另外,咱們再看一下存在的第二種形式(2.if - elif - elif ...),從這第二種形式來講elif能夠有n條。另外有人要問,都是去判斷爲何不都單獨用if這個最簡單存在形式1呢?這裏是處於一種計算機效率的考慮,有機會能夠作一個這樣的實驗:我判斷10種條件,第一種作法是if , if, if,...寫10個;第二種作法是,if,elif,elif,...寫9個,執行效率和所耗費語句的執行時間第二種作法確定是優於第一種作法,這是由於if - elif這種形式是在一個結構體當中取執行這些語句,若是單獨一個一個的用if去判斷,計算機會針對每個if都會開闢一起內存空間去執行這些語句,結果顯而易見,廢話少說,把這個流程也解釋一下。

    流程以下:

  第一步:

  if 判斷語句0:# 若是這部分爲真

    執行語句0 # 將執行這個語句且跳出整個結構體 / 若是上面的判斷語句爲假將執行第二步

  第二步:

  elif 判斷語句1:

    執行語句1

  elif 判斷語句2:

    執行語句2

  elif 判斷語句n:

    執行語句n 

  # 程序運行到第二步,其中若是有一條elif的判斷語句爲真,將執行本身的執行語句,固然若是都爲假將跳出整個條件判斷結構體,執行下面的代碼。

 

    (4) 爲了完整,把第一種存在形式也說一下(1. if ),這個顯而易見很是的簡單了。

    流程以下:

  第一步:

  if 判斷語句0:# 若是這部分爲真

    執行語句0 # 將執行這個語句且跳出整個結構體 / 若是上面的判斷語句爲假將跳出整個條件判斷結構體,執行下面的代碼。

 

2.   總結

  if條件控制語句結構體是最簡單並且最容易理解的結構體形式,可是要注意這麼幾點:

  (1) 語句的縮進必定要對齊,若是不對齊的話,語句將出現錯誤,由於正如開始說python的時候,python是很是注重語句規整的。

  (2) 每個判斷語句後面要加上 ":"號,這個表示判斷完畢後要說的話。

 

3.   舉例

 1 # (1) if形式  2 if 10 < 20:  3     print("你真聰明!")  4 # 輸出結果:你真聰明!  5 
 6 # (2) if-elif-elif...形式  7 num = 50
 8 if num < 30:  9     print("num < 30,結果正確") 10 elif num < 20: 11     print("num < 20,結果正確") 12 elif num > 10: 13     print("num > 10,結果正確") # 這條被執行 14 # 輸出結果:num > 10,結果正確 15 
16 num = 50
17 if num < 30: 18     print("num < 30,結果正確") 19 elif num < 20: 20     print("num < 20,結果正確") 21 elif num < 10: 22     print("num > 10,結果正確") 23 # 輸出結果:空 # 都沒有結果,跳出條件判斷結構體 24 
25 
26 # (3) if-elif-else形式 27 age = int(input("請輸入年齡: ")) 28 if age <= 0: 29     print("在孃胎裏") 30 elif age > 0 and age <= 6: 31     print("嬰兒") 32 elif age > 6 and age <=18: 33     print("青年") 34 else: 35     print("再議") 36 # 輸出結果: 37 # 請輸入年齡: 50
38 # 再議 39 
40 # (4) if-else形式 41 num = 30
42 if num < 10: # 結果爲假 43     print("你說對了") 44 else: # 一定執行這條語句 45     print("你就是個大傻帽") 46 # 輸出結果:你就是個大傻帽

 

第二部分:其餘條件控制語句(也叫異常處理和斷言語句)

   try語句在其餘語言中也叫try...catch語句,起做用也是同樣的。在python中try語句叫try...except/finally語句。

   python提供兩個很是重要的功能來處理python程序在運行中出現的異常和錯誤,可使用該功能來調試python程序。準確的來說對於這個部分分兩個篇章進行講解。

2.1 異常處理

  什麼叫異常?

  異常便是一個事件,該事件會在程序執行過程當中發生,影響了程序的正常執行。

  通常狀況下,在python沒法正常處理程序時就會發生一個異常。

  異常是python的對象(python是把啥都當作對象,汗!),表示一個錯誤。

  當python腳本發生異常時咱們須要撲捉它,不然程序會終止執行。

  經常使用的幾個關鍵字:try、except、finally、else、raise,咱們就用這幾個關鍵字來組合這些條件來看看python怎麼進行異常處理的(固然這幾個關鍵字在一個條件體內能夠疊加使用,這裏分開進行論述)

 

2.1.1   try...except ...else(完整形式)

  捕捉異常可使用try...except語句來檢測try語句塊中的錯誤,從而讓except語句鋪貨異常信息並處理。若是你不想在異常發生時結束你的程序,只需在try裏捕獲它。

  語法:

  try:

  <語句>  # 運行別的代碼

  except <名字>:  

  <語句>  # 若是在try部分引起了「名字」異常

  except<名字> as <數據>:

  <語句>  # 若是發生"名字"異常,得到附加數據

  else:

  <語句>  # 若是沒有異常發生,執行這條語句

  總體來講,try至except這個部分比如一個容器,用於存放你要執行的程序,若是這部分程序正常執行,什麼事兒也不會發生,若是有錯誤的話except就起到了做用。

  解釋:

  1. 上面這個屬於一個總體形式與前面的if語句同樣,若是所有的異常處理檢測經過將會執行else語句的內容,若是異常處理檢測出問題將會執行except檢測的內容,將會執行except下面的語句(通常都是print,還有保存到文件)。

  2. 固然else語句也能夠省略。

  3. except的表達格式有三種:

    (1) except <python標準異常檢測內容>: / except (<python標準異常檢測內容1, python標準異常檢測內容2,python標準異常檢測內容n>)

      若是隻檢測一個異常處理,只寫一個便可,若是後面要求檢測多個異常檢測內容,要用括號括起來;另外,後面有一個附錄python標準異常內容都有哪些。

        <語句>  # 這個語句時必需要有的

    (2) except:啥都不加,自動檢測

        <語句>  # 這個語句時必需要有的

    (3) except <python標準異常檢測內容> as 變量名:     ===>>後面的其餘條件控制語句會對as進行詳細講解

        <語句>  # 這個語句時必需要有的

  

  舉例說明

  (1)  去掉else:只保留except信息進行檢測,只檢測一個異常內容:

 1 # 除去else:只保留except信息進行檢測
 2 try:  3     s = input('輸入一個1000之內的數字:')  4     a = int(s)  5     if a < 10:  6         print("你輸入了一個一位數!")  7     elif a >= 10 and a < 100:  8         print("你輸入了一個兩位數!")  9     elif a >= 100 and a < 1000: 10         print("你輸入了一個三位數!") 11     else: 12         print("輸入一個1000之內的數字!") 13 except ValueError:    # 發生異常A時執行下面的語句
14     print("請輸入數字!") 15 # 輸出結果:
16 # 輸入一個1000之內的數字:大中國
17 # 請輸入數字! # 直接執行錯誤信息後的東西

 

  (2)  不去掉else:只保留except信息進行檢測,只檢測一個異常內容,咱們輸入一個正常的數字,執行完畢try中內容,直接跳到else去執行,而後輸入一個非數字,執行except的內容:

 1 try:  2     s = input('輸入一個1000之內的數字:')  3     a = int(s)  4     if a < 10:  5         print("你輸入了一個一位數!")  6     elif a >= 10 and a < 100:  7         print("你輸入了一個兩位數!")  8     elif a >= 100 and a < 1000:  9         print("你輸入了一個三位數!") 10     else: 11         print("輸入一個1000之內的數字!") 12 except ValueError:    # 發生異常A時執行下面的語句
13     print("請輸入數字!") 14 else: 15     print("沒有發生異常") 16 # 第一種輸入一個正常結果,跳過except執行else後的內容,其輸出結果以下:
17 # 輸入一個1000之內的數字:50
18 # 你輸入了一個兩位數!
19 # 沒有發生異常
20 
21 # 第二種輸入一個不正常結果,執行except檢測內容,不會執行else後的內容,其輸出結果以下:
22 # 輸入一個1000之內的數字:大中國
23 # 請輸入數字!

 

  (3)  輸入多個except表達式後的內容,用括號括起來:

 1 try:  2     s = input('輸入一個1000之內的數字:')  3     a = int(s)  4     if a < 10:  5         print("你輸入了一個一位數!")  6     elif a >= 10 and a < 100:  7         print("你輸入了一個兩位數!")  8     elif a >= 100 and a < 1000:  9         print("你輸入了一個三位數!") 10     else: 11         print("輸入一個1000之內的數字!") 12 except (Exception, TypeError, ValueError):  # 發生異常A和B時執行下面的語句
13     print("請輸入數字!") 14 else: 15     print("沒有發生異常") 16 # 輸出結果:
17 # 輸入一個1000之內的數字:大中國
18 # 請輸入數字!

 

  (4) except後啥都不加,自動檢測

 1 try:  2     s = input('輸入一個1000之內的數字:')  3     a = int(s)  4     if a < 10:  5         print("你輸入了一個一位數!")  6     elif a >= 10 and a < 100:  7         print("你輸入了一個兩位數!")  8     elif a >= 100 and a < 1000:  9         print("你輸入了一個三位數!") 10     else: 11         print("輸入一個1000之內的數字!") 12 except:   # 也能夠什麼都不加,本身識別錯誤。
13     print("請輸入數字!") 14 else: 15     print("沒有發生異常") 16 # 輸出結果:
17 # 輸入一個1000之內的數字:大中國
18 # 請輸入數字!

 

  (5) 把錯誤信息導出來的作法,添加as

 1 try:  2     s = input('輸入一個1000之內的數字:')  3     a = int(s)  4     if a < 10:  5         print("你輸入了一個一位數!")  6     elif a >= 10 and a < 100:  7         print("你輸入了一個兩位數!")  8     elif a >= 100 and a < 1000:  9         print("你輸入了一個三位數!") 10     else: 11         print("輸入一個1000之內的數字!") 12 except (Exception, TypeError, ValueError) as Msg:  # 添加as語句把錯誤信息打印出來
13 # except Exception as Msg: # 若是識別異常處理信息就一條能夠這樣添加
14     print(Msg) 15 else: 16     print("沒有發生異常") 17 # 輸出結果:
18 # invalid literal for int() with base 10: '大中國'(非法的字母對於10進制的整型數據而言)

 

2.2.2   try...except...finally(完整形式,異常處理語句的嵌套使用)

  try...except...finally也是另一種異常信息檢測的語句,其實和try...except差不了多少,惟一不一樣的是:若是try內的程序發生了異常,python就會回來執行finally的句子,而後把異常教給上層try,控制流不會經過整個try語句。finally都是放到最後的。前面記得有一個else語句,就是說若是執行經過將執行else語句,finally有一個特色:無論有沒有異常,都執行這塊兒代碼惟一不一樣就這點兒。通常try...finally做爲前套內使用比較多,後面2.2.3會將異常處理這類語句的嵌套。

  舉例說明

  (1) 經過添加finally和else來講明,若是執行異常檢測處理else不會被執行,而finally無論有沒有異常,都執行這塊兒代碼

 1 try:  2     s = input('輸入一個1000之內的數字:')  3     a = int(s)  4     if a < 10:  5         print("你輸入了一個一位數!")  6     elif a >= 10 and a < 100:  7         print("你輸入了一個兩位數!")  8     elif a >= 100 and a < 1000:  9         print("你輸入了一個三位數!") 10     else: 11         print("輸入一個1000之內的數字!") 12 except Exception:  # Exception基本上都是萬能的,全部異常都繼承了Exception
13     print("請輸入數字!") 14 else: 15     print("沒有發生異常")    # 這裏看到了沒有,加入finally後,雖然else再也不執行,可是finally後面的內容仍是會執行。
16 finally: 17     print("finally都會最終執行的!") 18 # 輸出結果:
19 # 輸入一個1000之內的數字:大中國
20 # 請輸入數字!
21 # finally都會最終執行的!

 

2.2.3 try...finally形式

    這種形式參照很容易解釋,這裏再也不說明了。

 

2.2.4  raise語句

  raise語句叫作:自定義錯誤信息

  格式:raise 異常處理種類/自定義異常處理種類 ("自定義錯誤輸出信息"),語句執行到這個位置,若是檢測出異常錯誤,直接顯示內容,後面的內容將被跳過。

  注意:(1) raise函數通常嵌入到try...except語句中用,若是檢測出異常會直接打印內容。

     (2) raise函數若是單獨使用的話,會提示哪一個位置出錯的紅色信息(這個過程相似於debug處理過程)

     (3) assert也是一種斷言處理方式,跟raise相似。

    這個函數能夠直接嵌入到要識別錯誤信息的位置,直接打印出來。其實raise函數等於except查找錯誤+print打印錯誤信息的一個組合。

  舉例1:try...except中使用:

 1 # 在try...except體中運用
 2 a = int(input("請輸入一個整數:"))  3 try:  4     if a < 10:  5        # print("!!!!")
 6         raise ValueError("您輸入的值小於10")  7         print("!!!!")   # 後面的信息再也不打印
 8     elif a >= 10:  9         print("您輸入的數字大於等於10") 10 except Exception as e: 11         print(e)
# 第一:若是一個小於10的數:8
# 請輸入一個整數:8
# 您輸入的值小於10 # raise信息檢測出異常將被執行

# 第二:若是輸入一個大於10的數:20
# 請輸入一個整數:20
# 您輸入的數字大於等於10

  舉例2:單獨使用raise:

 1 import math  2 plz = int(input("請輸入一個整數進行開平方處理"))  3 if plz < 0:  4     raise ValueError("cannot compute sqrt of % d" % plz)  5     # raise ValueError("cannot compute sqrt of")
 6 elif plz >= 0:  7     print(math.sqrt(plz))  8 # 第一:輸入一個大於零的整數:8
 9 # 輸出結果:
10 # 請輸入一個整數進行開平方處理8
11 # 2.8284271247461903
12 
13 # 第二:輸入一個小於0的整數:-6
14 # 輸出結果:
15 # Traceback (most recent call last):
16 # File "D:/PycharmProjects/untitled/demo12.py", line 25, in <module>
17 # raise ValueError("cannot compute sqrt of % d" % plz)
18 # ValueError: cannot compute sqrt of -6

  總結:

  (1) raise語句看起來其實在try..except當中就是等於一個print做用。

  (2) raise語句其實最重要的是自定義錯誤信息。好比咱們定義一種程序運行到這裏可能出現什麼樣的問題,就執行raise語句。

  舉例以下:

1 class Networkerror(RuntimeError): 2     def __init__(self, arg): 3         self.args = arg 4 
5 try: 6     raise Networkerror("Bad hostname") 7 except Networkerror as e: 8     print (e.args)

  這個raise做爲自定義的話,在函數、模塊和類裏面有應用,後面會詳細說明。

 

2.2.4   附錄:python標準異常內容(其中經常使用的在後面進行備註)

  異常名稱                     描述                                                                 
BaseException            全部異常的基類                                         
SystemExit                解釋器請求退出
KeyboardInterrupt              用戶中斷執行(一般是輸入^C)
Exception               常規錯誤的基類(這個基本上是萬能的!哈哈)
StopIteration                 迭代器沒有更多的值
GeneratorExit               生成器(generator)發生異常來通知退出
StandardError              全部的內建標準異常的基類
ArithmeticError               全部數值計算錯誤的基類
FloatingPointError            浮點計算錯誤
OverflowError              數值運算超出最大限制
ZeroDivisionError                  除(或取模)零 (全部數據類型)
AssertionError               斷言語句失敗
AttributeError              對象沒有這個屬性
EOFError               沒有內建輸入,到達EOF 標記
EnvironmentError             操做系統錯誤的基類
IOError                   輸入/輸出操做失敗
OSError                 操做系統錯誤
WindowsError                  系統調用失敗
ImportError                 導入模塊/對象失敗
LookupError               無效數據查詢的基類
IndexError                序列中沒有此索引(index)
KeyError                          映射中沒有這個鍵
MemoryError              內存溢出錯誤(對於Python 解釋器不是致命的)
NameError             未聲明/初始化對象 (沒有屬性)
UnboundLocalError         訪問未初始化的本地變量
ReferenceError             弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError            通常的運行時錯誤
NotImplementedError          還沒有實現的方法
SyntaxError Python          語法錯誤
IndentationError             縮進錯誤
TabError Tab            和空格混用
SystemError                通常的解釋器系統錯誤
TypeError             對類型無效的操做
ValueError              傳入無效的參數
UnicodeError Unicode        相關的錯誤
UnicodeDecodeError Unicode      解碼時的錯誤
UnicodeEncodeError Unicode    編碼時錯誤
UnicodeTranslateError Unicode    轉換時錯誤
Warning               警告的基類
DeprecationWarning           關於被棄用的特徵的警告
FutureWarning            關於構造未來語義會有改變的警告
OverflowWarning           舊的關於自動提高爲長整型(long)的警告
PendingDeprecationWarning     關於特性將會被廢棄的警告
RuntimeWarning            可疑的運行時行爲(runtime behavior)的警告
SyntaxWarning            可疑的語法的警告
UserWarning             用戶代碼生成的警告

 

2.2   斷言(assert)

   使用assert斷言是學習python一個很是好的習慣,python assert斷言語句格式和用法很簡單。在沒有完善一個程序以前,咱們不知道程序哪裏會出錯,與其讓它在崩潰運行,不如在出現錯誤條件時就崩潰,這是後就須要assert斷言的幫助。

  python assert斷言是聲明其布爾值必須爲真的判斷,若是發生異常就說明表達式爲假。能夠理解assert斷言語句爲raise -- if -- not,用來測試表示式,其返回值爲假,就會觸發議程。

  表達式:assert expression [, message]

  注意:assert後面跟隨的是表達式和將表達式判斷未假的狀況打印信息,後面能夠省略;所以不能加括號,跟if...的表達邏輯相似。

 1 # 形式1(不帶meg)
 2 assert 1 + 1 == 2   # 返回結果爲真
 3 assert isinstance('Hello', str)  # 返回結果爲真
 4 assert isinstance('Hello', int)  # 返回結果爲假
 5 
 6 # 形式2(帶meg)
 7 s = "nothin is impossible."
 8 key = "nothing"
 9 assert key in s, "Key: '{}' is not in Target: '{}'".format(key, s) 10 # 輸出結果:
11 # Traceback (most recent call last):
12 # File "C:/Users/Administrator/Desktop/Python-1704/day04/try語句.py", line 196, in <module>
13 # assert key in s, "Key: '{}' is not in Target: '{}'".format(key, s)
14 # AssertionError: Key: 'nothing' is not in Target: 'nothin is impossible.'

  注意事項

  assert與print是不一樣的。print能夠正常工做,但assert是錯誤的。這是由於print是python內建方法而assert不是。看以下的例子:

 1 assert (2 + 2 ==5, "Oops somethin went wrong.")  2 # 這種表達方式是錯誤的:
 3 # 輸出結果:
 4 # C:/Users/Administrator/Desktop/Python-1704/day04/try語句.py:174: SyntaxWarning: assertion is always true, perhaps remove parentheses?
 5 # assert (2 + 2 ==5, "Oops somethin went wrong.")
 6 
 7 # 因此要更改成表達式的方式:
 8 assert 2+2 == 5, "Oops somethin went wrong."  # 打印了輸出結果:AssertionError: Oops somethin went wrong.
 9 # 輸出結果:
10 # Traceback (most recent call last):
11 # File "C:/Users/Administrator/Desktop/Python-1704/day04/try語句.py", line 181, in <module>
12 # assert 2+2 == 5, "Oops somethin went wrong."
13 # AssertionError: Oops somethin went wrong.

  其中第一條代碼錯誤的緣由是:根據assert的意義,程序會檢測assert後面的表達式的值,也就是bol((2 +2 == 5, "Oops something went wrong."))。而python中的一個非空元組的布爾值是True。

  再好比assert(False)。當()出如今assert後面時,python編譯器會認爲assert後面的輸入的是一個元組,而一個非空元組的布爾值老是爲True。所以assert()不能正常的工做。

  另外,再詳細應用在相關篇章會詳細說明。

相關文章
相關標籤/搜索