---
# System prepended metadata

title: 'wk10_1109 函式與模組,hackMd'
tags: [python]

---

{%hackmd @themes/orangeheart %}
## wk10_1109_Ch7函式與模組,hackMd
### 醫放三 B1003210 應雨岑

1. hackMd 使用教學
    - 封面、首頁、目錄
    - 筆記內頁
2. 函式與模組
    - 自訂函式
    - 數值函式
    - 字串函式
    - 亂數模組
    - 時間模組
## 今日課程內容
<pre>
1. hackMd 使用教學
    封面、首頁、目錄
    筆記內頁
2. 函式與模組
    自訂函式
    時間模組
</pre>
## NOTE
<pre>
下載code的md檔案--用於期末的hackMd筆記
自訂一個函式  def sayhello():
呼叫這個sayhello程式  sayhello()    
沒有設預設值  def sayhello2(name):                #不會出現東西，因為沒有寫預設是什麼
有設定預設值  def sayhello2(name= "my friend"):   #沒有特別寫name是什麼，就會使用預設值
如果有一個參數有設預設值另一個沒設，則有設預設值的函數就要放在靠後面
在函式def內設的參數var1=1都是區域變數，如果跳出這個函式後就不存在這個設定，因此如要變成全域函數要用 global var1 \n var1=1
    
</pre>
## [ INCLASS PRACTICE ]
* 單字和定義的字典
```python
word_dict = {
    "apple": "a round fruit with red or green skin and sweet flesh",
    "dog": "a domesticated mammal that is related to the wolves",
    "computer": "an electronic device for storing and processing data",
    "ocean": "a large body of saltwater that covers most of the Earth's surface",
    "book": "a written or printed work consisting of pages glued or sewn together along one side and bound in covers",
    "mountain": "a large natural elevation of the earth's surface rising abruptly from the surrounding level"
}

print("歡迎來到英文單字練習！")
score = 0
for word, definition in word_dict.items():
    print(f"定義: {definition}")
    user_input = input(f"請輸入單字的拼寫: ").strip().lower()   #.strip()可以把空白鍵刪掉
    if user_input == word:
        print("正確！")
        score += 1
    else:
        print(f"錯誤。正確答案是 '{word}'。")

print(f"練習結束。您的得分是 {score}/{len(word_dict)}。")
```

    歡迎來到英文單字練習！
    定義: a round fruit with red or green skin and sweet flesh
    請輸入單字的拼寫: apple
    正確！
    定義: a domesticated mammal that is related to the wolves
    請輸入單字的拼寫: dogs
    錯誤。正確答案是 'dog'。
    定義: an electronic device for storing and processing data
    請輸入單字的拼寫: computer
    正確！
    定義: a large body of saltwater that covers most of the Earth's surface
    請輸入單字的拼寫: sea
    錯誤。正確答案是 'ocean'。
    定義: a written or printed work consisting of pages glued or sewn together along one side and bound in covers
    請輸入單字的拼寫: book
    正確！
    定義: a large natural elevation of the earth's surface rising abruptly from the surrounding level
    請輸入單字的拼寫: mountains
    錯誤。正確答案是 'mountain'。
    練習結束。您的得分是 3/6。
    


```python
#以下是一個簡單的猜字遊戲，使用字典作為遊戲中的單詞庫。
#玩家需要猜測英文單詞的意思，並獲得積分。程式會隨機選取一個單詞，玩家需要輸入其意思。

import random

# 單詞庫，包含英文單詞和它們的中文意思
word_dict = {
    "apple": "蘋果",
    "banana": "香蕉",
    "cat": "貓",
    "dog": "狗",
    "elephant": "大象",
    "flower": "花朵",
    "guitar": "吉他",
    # 添加更多單詞...
}

score = 0

# 遊戲主迴圈
while True:
    # 從單詞庫中隨機選擇一個單詞
    word, meaning = random.choice(list(word_dict.items()))

    print(f"請問 '{word}' 的中文意思是？")
    player_guess = input("請輸入中文意思: ")

    # 檢查答案是否正確
    if player_guess == meaning:
        print("正確！加10分。\n")
        score += 10
    else:
        print(f"答錯了，正確答案是 '{meaning}'。\n")

    # 顯示分數
    print(f"你的分數: {score} 分\n")

    # 問用戶是否繼續遊戲
    play_again = input("是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): ")
    if play_again.lower() == 'quit':
        break

print("遊戲結束，你的最終分數是:", score)
```

    請問 'flower' 的中文意思是？
    請輸入中文意思: 花
    答錯了，正確答案是 '花朵'。
    
    你的分數: 0 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'banana' 的中文意思是？
    請輸入中文意思: 香蕉
    正確！加10分。
    
    你的分數: 10 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'cat' 的中文意思是？
    請輸入中文意思: 貓
    正確！加10分。
    
    你的分數: 20 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'dog' 的中文意思是？
    請輸入中文意思: 狗
    正確！加10分。
    
    你的分數: 30 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'banana' 的中文意思是？
    請輸入中文意思: 相
    答錯了，正確答案是 '香蕉'。
    
    你的分數: 30 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): quit
    遊戲結束，你的最終分數是: 30
    
* sayhello程式

```python
def sayhello():
    print("hello, world!!!")
    
sayhello()
```

    hello, world!!!
    


```python
sayhello()    #呼叫這個sayhello程式
```


```python
def GetArea(w,h):
    area=w*h
    return area
print(GetArea(5,10))
area1=GetArea(h=10,w=3)
print(area1)

```

    50
    30
    


```python
def sayhello2(name):
    print("Hello,",name)

sayhello2("Kelly")
#sayhello2()    #不會出現東西，因為沒有寫預設是什麼
```

    Hello, Kelly
    


```python
def sayhello2(name= "my friend"):
    print("Hello,",name)

sayhello2("Kelly")
sayhello2()    #沒有特別寫name是什麼，就會使用預設值
```

    Hello, Kelly
    Hello, my friend
    


```python
def Circle(radius):
    area= radius*radius*3.14
    length=2*rdius*3.14
    return area,length
    
```
* 攝氏溫度轉華氏溫度
```python
# 華=攝*1.8+32
def Temperature(C):
    F=C*1.8+32
    return F
    

Temperature(38)

C=float(input("請輸入攝氏溫度"))

print("攝氏溫度%.2f時華氏溫度為%.2f" %(C,Temperature(C)))

```

    請輸入攝氏溫度38
    攝氏溫度38.00時華氏溫度為100.40
    
* 匯入時間的函式模組

```python
import time #匯入時間的函式模組
time.time()
time.localtime()
```




    time.struct_time(tm_year=2023, tm_mon=11, tm_mday=9, tm_hour=12, tm_min=3, tm_sec=5, tm_wday=3, tm_yday=313, tm_isdst=0)



## 全部的note
<pre>

W1
計算符號之間可以加空白鍵 <br>
** : 幾次方<br>
sep="." : 分隔符號為.
end="/" : 結束用/結束

在print內寫入%d : 放入參數答案  (最後在答案要加%)
            %s : 放入的答案為字串
            %f : 放入的答案包含全部小數點
            %.1f :        包含 1位小數點
            %.3f :        包含 3位小數點
寫法如下- print("身高為%d cm，體重為%d kg，BMI為%.1f " % (height,weight,bmi))
                  
print("顯示的文字",參數名字)<br>
my_height = input("請輸入身高(cm)") : 可以輸入文字進去對話框
使用者輸入的文字要轉換成"int"  ()<br>

W2
print("姓名  成績")
print("%3s %3d"%(name1,score1))   #按照字元數進行規則排列出一格表格格式

W3
**次方
//整除的數
/除以
%餘數
and 放在兩個運算子中間，判斷True or False，當兩個都為True才會是True
or 放在兩個運算子中間，判斷True or False，當兩個都為False才會是False

W4
if,else,elif需使用冒號:還有縮排來寫code
.upper可以讓程式不用判斷大小寫

W5
串列list用中括弧括起來
for和其他語法一樣，他同樣也是需要用到:還有縮排來寫程式

W6
break會跳出這個迴圈
continue跳出執行這個code 繼續執行下一個i的程式
None 為一個什麼都沒有的數字，但是他可以做加減乘除的運算

W7
串列名稱=[1,2,3,...]  #可以放字串、數字等等的
另外也可以宣告空的串列list=[]
多為變數的宣告
    list=[["1"],["1,2"],["1,2,3"]]
    如果想要顯示第二個串列的第一個內容:print(list[1][0]))    
    # 0表示第一個資料，1表示第二個-意思是程式計算的方式是由0開始數
若想檢索特定的元素可以使用list[起始索引,終止索引,間隔]的方式進行
也可以索引-值，表示從最後一個開始數list[-1]
len(list)可以計算元素數量
max(list)可以找到元素內最大值
list.index(...)可以找...在清單中第幾個
    .count     可以數...出現幾次
    .append    插入一個元素在最後
    .insert(3,8)插入8某一個位置(第三個)
    .pop       移除最後一個元素

W8
divmod(7,3)   #答案為(2,1) 表示(商,餘數)
元組內的元素不能修改，但可以轉換成串列
字典是以大括號呈現{}
由小排到大 score.sort()
由大排到小 score.sort(reverse=True)
反轉是錯誤的則不用反轉，由小排到大 score.sort(reverse=False)

W9
字典語法 dict_血型個性={"A":"穩重","B":"樂觀","O":"堅強","AB":"自然"}
</pre>

## [ afterclass practice ]

>　1. 綜合演練 選擇題1-10  (需抄題在markdown cell ; 有程式碼的題目要有code cell )
> 2. 教學影音: 
> - 新手入門 #07 Function (函式)
> - 新手入門 #09 Module (模組)

* 綜合演練
### ( D ) 1. 函式的傳回值，下列何者正確？

(A)無傳回值 (B) 1 個傳回值 (C) 2 個傳回值 (D)以上皆可

#### 因為可以沒有return，也可以有1個2個3個...


```python
def test1():
    print("hi!!!")
def test2(length,width):
    area=length*width
    return area
def test3(radius):
    carea=radius*radius*3.14
    long=2*radius*3.14
    return carea,long

test1()
print(test2(3,4))
print(test3(5))

```

    hi!!!
    12
    (78.5, 31.400000000000002)
    

### ( C ) 2. print(max([4,8,3,9,2,6])) 顯示的結果為何？

(A)4 (B)6 (C)9 (D)2

#### 因為max是python內建的函式，為取得串列的最大值


```python
print(max([4,8,3,9,2,6]))
```

    9
    

### ( B ) 3.  print(pow(2,5,7))顯示的結果為何？

(A)2 (B)4 (C)5 (D)7

#### 因為意思是(2^5)/7的餘數，因此為32/7=4...4，餘數是4


```python
print(pow(2,5,7))
```

    4
    

### ( A ) 4. print("hospital".replace("s","t")) 顯示的結果為何？

(A)hotpital (B)hospisal (C)hospital (D)hotpisal

#### 因為replace是取代字裡面的特定字母，這題是要將S取代成T，因此就會變成hotpital


```python
print("hospital".replace("s","t"))
```

    hotpital
    

### ( A ) 5. print("hospital".startswith("ho")) 顯示的結果為何？

(A)True (B)False (C)hospital (D)ho

#### 因為startwith是用來查看字是不是以"ho"作為開頭


```python
print("hospital".startswith("ho")) 
```

    True
    

### ( C ) 6. print("hospital".find("p")) 顯示的結果為何？

(A)-1 (B)0 (C)3 (D)4

#### 因為是搜尋P在字裡的第幾個位置，從0開始算


```python
print("hospital".find("p"))
```

    3
    

### ( A ) 7. 下列何者不可能是 print(random.randint(1,10)) 的顯示結果？

(A)0 (B)5 (C)8 (D)10

#### 因為是從1-10中隨機取一個亂數，而0不在此範圍內


```python
import random
for i in range(50):
    print(random.randint(1,10),end=",")
```

    10,6,5,2,8,3,6,2,2,9,9,4,7,10,10,6,7,5,8,7,6,5,4,7,8,2,10,3,9,1,9,9,4,7,3,8,8,2,10,6,1,9,9,10,4,2,4,10,3,5,

### ( D ) 8. 下列何者不可能是 print(random.randrange(0,15,3)) 的顯示結果？

(A)0 (B)3 (C)12 (D)15

#### 因為是從0-15每隔3個位置當中隨機取一個整數，因此可能的值為0,3,,6,9,12，"但是"不包含15喔


```python
import random
for i in range(50):
    print(random.randrange(0,15,3),end=",") 
```

    6,0,0,6,6,3,9,12,3,6,3,0,12,0,3,3,3,6,0,12,9,12,9,9,3,3,12,9,9,6,0,0,12,12,0,12,3,12,12,6,0,12,6,0,3,6,3,3,9,9,

### ( B ) 9. 下列哪一個函式可讓程式停止執行一段時間？

(A)time (B)sleep (C) perf_counter (D)localtime

#### 因為sleep(n)是一個時間模組，它可以讓程式停止執行n秒


```python
#可以用在一個倒數計時的程式當中
import time
print("這是一個簡單的計時器程式")
# 設定計時時間
countdown_time = 5  # 單位：秒
# 進行計時
while countdown_time > 0:
    print(f"剩餘時間: {countdown_time} 秒")
    time.sleep(1)  # 暫停 1 秒
    countdown_time -= 1
print("時間到！")
```

    這是一個簡單的計時器程式
    剩餘時間: 5 秒
    剩餘時間: 4 秒
    剩餘時間: 3 秒
    剩餘時間: 2 秒
    剩餘時間: 1 秒
    時間到！
    

### ( C ) 10. localtime 傳回的 tm_min 資料範圍為何？

(A)1到60 (B)0到60 (C)0到59 (D)1到59

#### 因為時間就是00-59分

* ## 教學影音 
1. 新手入門 #07 Function (函式)
影片內容主要就是在教和課本相似的內容，包括如何建立一個函式或是宣告函式，另外也有講一些特殊的用法像區域變數、全域變數
而有些是課本沒有提到的
<pre>
def hi(name,year):
    print(f"{name}今年{year}歲了")
hi("小明",5)
</pre>

2. 新手入門 #09 Module (模組)
函式的設定只能用在原本用的那個區塊(檔案)中，如果要在其他地方使用這個函是即須宣告函式import area，也可以重新命名函式的名稱import my_module as a再輸入a.area()，另外也可以只匯入其中一個函式from my_module import area

## [ self practice ]

* 身高轉換

```python
#輸入"呎"讓程式轉換成"公分"
def height(feet):
    cm=30.48*feet
    return cm
feet=float(input("請輸入身高，以呎為單位"))
print("你的身高是",height(feet))
```

    請輸入身高，以呎為單位5.8
    你的身高是 176.784
    
* 分數系統
```python
grade1=int(input("請輸入第一位同學的分數"))
grade2=int(input("請輸入第二位同學的分數"))
grade3=int(input("請輸入第三位同學的分數"))
grade4=int(input("請輸入第四位同學的分數"))

print("最高分為",max([grade1,grade2,grade3,grade4]))
print("最低分為",min([grade1,grade2,grade3,grade4]))
print("總 分 為",sum([grade1,grade2,grade3,grade4]))
print("平 均 為",sum([grade1,grade2,grade3,grade4])/4)
```

    請輸入第一位同學的分數83
    請輸入第二位同學的分數68
    請輸入第三位同學的分數92
    請輸入第四位同學的分數91
    最高分為 92
    最低分為 68
    總 分 為 334
    平 均 為 83.5
    
