---
# System prepended metadata

title: 第四節社課

---

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