# <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)
```