---
# System prepended metadata

title: wk10_1109
tags: [Python]

---

## 【wk10_1109】hackMd_函式與模組

## 【inclass practice】

## 【ch07_函式與模組】

7.1  自訂函式
- 自訂函式
- 參數預設值
- 變數有效範圍

7.5 時間模組
- 時間模組函式整理
- 取得時間訊息函式
- 執行程式相關時間函式

#### {範例}
1. 攝氏溫度轉華氏溫度  \<ctof>
2. 學生分蘋果  \<divmod>
3. 總和及排序  \<sorted>
4. 檢查網址格式 \<startswith>
5. 以字串排版函式列印成績單 \<just>
6. 轉換日期格式 \<replace>
7. 擲骰子遊戲  \<randint>
8. 大樂透中獎號碼 \<sample>
9. 列印時間函式所有資訊 \<localtime>
10. 計算執行一百萬次整數運算的時間 \<pcounter>


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

    請問 'elephant' 的中文意思是？
    請輸入中文意思: 大象
    正確！加10分。
    
    你的分數: 10 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'apple' 的中文意思是？
    請輸入中文意思: 蘋果
    正確！加10分。
    
    你的分數: 20 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): 
    請問 'banana' 的中文意思是？
    請輸入中文意思: 香蕉
    正確！加10分。
    
    你的分數: 30 分
    
    是否要繼續遊戲？(輸入 'quit' 退出遊戲，其他任意鍵繼續): quit
    遊戲結束，你的最終分數是: 30
    


```python
# 自訂函式

def sayHello() : 
    print("hello, welcome!!!")
    
sayHello()
```

    hello, welcome!!!
    


```python
# 自訂函式

def getArea(w, h) : 
    area = w * h
    return area

print(getArea(5, 10))

area1 = getArea(10, 3)

print(area1)
```

    50
    30
    


```python
# 自訂函式
# 參數預設值

def sayHello2(name = "my friend") : 
    print("hello, ", name, name)
    print("I love ", name)
    
sayHello2("Chanel")
sayHello2()
```

    hello,  Chanel Chanel
    I love  Chanel
    hello,  my friend my friend
    I love  my friend
    


```python
# 自訂函式
# 參數預設值

def Circle(radius) : 
    area = radius * radius * 3.14
    length = 2 * 3.14 * radius
    return area, length

print(Circle(5))
print(Circle(10))
```

    (78.5, 31.400000000000002)
    (314.0, 62.800000000000004)
    


```python
# 攝氏溫度轉華氏溫度 <ctof>

def cToF(x) : 
    f = 1.8 * x + 32
    return f

c = float(input("請輸入攝氏溫度: "))
f = cToF(c)

print(f"攝氏度 {c}: 華氏{f} 度")
```

    請輸入攝氏溫度: -40
    攝氏度 -40.0: 華氏-40.0 度
    


```python
import time

print(time.time())
print(time.localtime())
```

    1699763694.0807357
    time.struct_time(tm_year=2023, tm_mon=11, tm_mday=12, tm_hour=4, tm_min=34, tm_sec=54, tm_wday=6, tm_yday=316, tm_isdst=0)
    

## 【afterclass practice】

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

### 【綜合演練】

#### 1. 函式的傳回值，下列何者正確？

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

答: ( D ) 以上皆可

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

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


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

    9
    

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

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


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

    4
    

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

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


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

    hotpital
    

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

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


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

    True
    

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

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


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

    3
    

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

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


```python
import random 
random.randint(1,10) # 生成指定範圍內的隨機整數
                     # 範圍是從 1 到 10（包含 1 和 10）

print(random.randint(1,10))
```

    10
    

答: (A) 0

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

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


```python
(random.randrange(0,15,3)) # 表示生成一個從 0 開始、不包含 15、以步進值為 3 的隨機整數
                           # 可能的輸出包括 0、3、6、9、12 等數字，但不包括 15

print(random.randrange(0,15,3))
```

    12
    

答: (D) 15

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

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

答: (B) sleep

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

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

答: (C) 0到59 

### 【新手入門 #07 Function (函式)】


```python
def 打招呼(姓名, 年紀):
    print(f"{姓名}今年是{年紀}歲")
    
打招呼("小名", 20)
打招呼(年紀 = 20, 姓名 = "小名")
```

    小名今年是20歲
    小名今年是20歲
    


```python
折扣 = 0.9

def 總金額 (售價, 運費):
    return int(售價 * 折扣 + 運費)

print(f"總金額為 {總金額(售價 = 1000, 運費 = 50)} 元")
```

    總金額為 950 元
    

### 【新手入門 #09 Module (模組) 】


```python
import random
數字 = [1, 2, 3, 4, 5, 6,]

random.shuffle(數字)
a = random.choice(數字)
b = random.randint(10, 50)

print(數字)
print(a)
print(b)
```

    [3, 2, 6, 4, 1, 5]
    4
    42
    


```python
import random
import string
數字 = string.digits
英文 = string.ascii_letters
字母表 = 數字 + 英文

print(字母表)
```

    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    


```python
import random
import string
數字 = string.digits
英文 = string.ascii_letters
字母表 = list(數字 + 英文)
random.shuffle(字母表)

print(字母表)
```

    ['W', 't', 'o', 'k', '3', 'K', 'N', 'n', 'r', '1', '2', '5', 'e', '9', 'H', 'p', '8', '7', 'Z', 'w', 'x', 'I', 'a', '6', 'M', 'X', 'P', 'm', 'F', 'C', 'f', 'L', '0', 's', 'U', 'V', 'R', 'g', 'y', 'B', 'i', 'd', 'l', 'z', 'Q', 'Y', 'O', 'G', 'S', 'v', 'T', 'A', '4', 'D', 'E', 'j', 'b', 'q', 'u', 'J', 'h', 'c']
    


```python
import random
import string
數字 = string.digits
英文 = string.ascii_letters
字母表 = list(數字 + 英文)
random.shuffle(字母表)

長度 = int(input("你的密碼要幾位數? "))
密碼 = "".join(字母表[:長度])

print(f"你的密碼是: {密碼}")
```

    你的密碼要幾位數?  8
    

    你的密碼是: 2lbiGau7
    

## 【self practice】


```python
# pow():計算指數
# pow(2, 5, 7) 表示計算 2 的 5 次方除以 7 的餘數   

pow(2,5,7)
```




    4




```python
# find():用於在字串中尋找指定子字串的第一次出現位置

print("hospital".find("p"))
print("hospital".find("b")) #如果找不到 "b"，find()方法會返回 -1
```

    3
    -1
    

#### localtime()
- 年（year）：包含完整的年份，例如 2023。
- 月（month）：範圍從 1 到 12。
- 日（day）：範圍從 1 到 31。
- 時（hour）：範圍從 0 到 23。
- 分（minute）：範圍從 0 到 59。
- 秒（second）：範圍從 0 到 61，允許有閏秒。


```python
import time

local_time = time.localtime()

print("年：", local_time.tm_year)
print("月：", local_time.tm_mon)
print("日：", local_time.tm_mday)
print("時：", local_time.tm_hour)
print("分：", local_time.tm_min)
print("秒：", local_time.tm_sec)
```

    年： 2023
    月： 11
    日： 12
    時： 5
    分： 4
    秒： 45
    


```python
import time # 獲取當地時間的 struct_time 對象
local_time = time.localtime() # 顯示星期幾

print("今天是星期", local_time.tm_wday) # 表示星期幾（範圍是 0 到 6，其中 0 是星期一）
print("今天是一年中的第", local_time.tm_yday, "天") # 顯示一年中的第幾天（範圍是 1 到 366）
```

    今天是星期 6
    今天是一年中的第 316 天
    
