# <center>交叉比對 ```py= a , b = map(int , input().split()) list1 = [False]*1001 lista = list(map(int , input().split()) ) for i in lista: list1[i] = True ans = 0 listb = list(map(int , input().split())) for i in listb: if(list1[i] == True): ans = ans+1 list1[i] = False print(ans) ``` # <center>多維List 串列中有串列,就構成了「多維串列」,讀取元素時如果有第二層,就多一個中括號加上 offset,就能讀取第二層的元素。 ```py= a = ['apple','banana','orange',['dog','cat']] print(a[3][0]) # dog print(a[3][1]) # cat a = [ ["YOASOBI",["A!" , "b!"] ],["fdcsc"],["fdcs"] ] print(a[0][1][1]) # b! ``` # <center>函式 ## 定義 在 $Python$ 裡,使用「$def$」定義一個函式,函式的命名規則和變數相同 ( 只能以字母或底線開頭,內容只能使用字母、數字或底線 ),下方程式碼是一個名為 $hello$ 函式的基本架構: ```py= def hello(): #定義一個名為hello的函式 print('hello') hello() # 執行函式,印出 hello def 哈囉(): print("哈囉") 哈囉() # 可以使用中文命名 ``` 函式跟變數一樣需要先"定義"才能使用。 ## 參數 函式可以加入「參數」,執行函式時給予這些參數指定的數值 ( 引數 ),就能讓函式根據不同參數的內容,計算出不同的結果。 下方的 $hello$ 函式有一個 $fdcsc$ 參數,執行函式時如果給予的內容不同,就會呈現不同的結果。 ```py= def 哈囉(fdcsc): print(fdcsc) 哈囉([1 , 2 , 3 , 4]) # [1 , 2 , 3 , 4] ``` 此$fdcsc$參數取決於被"哈囉"括號內放的是什麼就是什麼,**然後這哈囉讀ㄏㄚ ㄌㄨㄛ我有夠驚訝。** ### 延伸 一個函式可以放入「多個」參數,下方的 $hello$ 函式具有 $x$ 和 $y$ 兩個參數,根據不同的參數數值進行計算,最後呈現不同數值的加總結果。 ```py= def hello(x,y): z = x + y print(z) hello(1,2) # 3 hello(5,6) # 11 ``` 注意,執行函式時,會按照「順序」處理多個參數,例如函式參數順序如果是 ($x$,$y$),執行時填入 (1,2),$x$ 就會是 1,$y$ 就會是 2。 ### 參數預設值 函式的參數可以「指定預設值」,如果執行函式時沒有提供參數數值,參數就會自動帶入預設值執行,下方的程式設定參數 $y$ 的預設值為 10,如果執行時沒有提供參數 $y$ 數值,$y$ 就會使用 10 帶入計算。 ```py= def hello(x,y=10): z = x + y print(z) hello(1,2) # 3 hello(5) # 15 hello(y = 5 , x = 10) #也可以直接指定,稱為"關鍵字引數" ``` ### 函式回傳值 函式除了可以傳入參數,也可以使用「return」回傳程式運算後的結果,回傳的結果不限型態,可以是數字、字串、串列、~~tuple...~~ 等,下方的程式碼,執行函式 a 之後,函式會計算並回傳 x + y x 2 的結果,最後將結果賦值給變數 b 和 c。 ```python= def a(x, y): result = x + y*2 return result b = a(1,2) c = a(2,3) print(b) # 5 print(c) # 8 ``` **注意,要有"回傳值"才可以拿他回傳的東西附值!!** 當函式執行的過程中遇到 return 時,就會「中止函式」並將結果回傳,以下方的程式為例,當 x=1 ( 每次 result 增加 1 ) 的時候,會觸發 result等於5 的邏輯判斷,就會中止函式 ( 函式內的 while 迴圈也就跟著停止 ),並回傳 5 的結果,當 x=2 ( 每次 result 增加 2 ) 的時候,不會處發 result==5 的邏輯判斷,就會執行完 while 迴圈,最後回傳 10 的結果。 ```py= def a(x): result = 0 while result < 10: result = result + x if result==5: return result return result b = a(1) c = a(2) print(b) # 5 print(c) # 10 ``` 函式也可以回傳多個結果,如果回傳多個結果,可以賦值給「同樣數量」的變數 ( 不同數量會發生錯誤 )。例外是只附值給一個變數的情況,會變成一個~~tuple~~ ```python= def test(x, y, z): return x+1, y+1, z+1 a, b, c = test(1, 2, 3) # 賦值給「同樣數量」的變數 print(a) # 2 print(b) # 3 print(c) # 4 ``` ### 補充 函式內也可以定義變數、執行操作和判斷,甚至在函式裡面再定義一個函式。但是需要注意的是函式內定義的東西只能在函式內使用! ## pass 如果想定義一個什麼事都不做的空函式,可以使用 pass 語句: ```py= def test(): pass ``` 也可以加在判斷裡面,作為一個佔位符使用 ( 不會執行任何事情,但必須出現的程式碼 )。 ```py= a = int(input()) if a>10: pass # 如果輸入的數字大於 10,不做任何事情 else: print(a) ```