---
# System prepended metadata

title: 'wk11_1116_CH7函式模組,期末專題'
tags: [python]

---

{%hackmd @themes/orangeheart %}
## wk11_1116_CH7函式模組,期末專題
### 醫放三 B1003210 應雨岑

1. hackMd 使用教學
    - 封面、首頁、目錄
    - 筆記內頁
2. 函式與模組
    - 自訂函式
    - 數值函式
    - 字串函式
    - 亂數模組
    - 時間模組
## 今日課程內容
<pre>
1. 期末專題介紹
2. 函式與模組
    - time
    - random
3. 專案介紹
    - github
    - 套件的安裝
    - 以ping pong game之程式進行介紹
    
</pre>
## NOTE
<pre>
函式模組重點: def,return
只要模組裡面有程式區塊就需要使用return
把time的模組匯成t  --> import time as t 
匯入time裡面的其他模組，因此在使用時就不需要寫成time.sleep而可直接寫sleep  -->from time import sleep,ctime
在python中安裝程式的方法(安裝numpy)   --> ! pip install numpy
</pre>
## [ INCLASS PRACTICE ]
* 計算執行一百萬次整數運算的時間
```python
import time  #匯入一個time的模組
print("Hello......!")
time.sleep(3)  # 等待3秒
print("Kelly")

```

    Hello......!
    Kelly
    


```python
import time as t   #把time的模組匯成t
print("Hello......!")
t.sleep(3)  # 等待3秒
print("Kelly")
```


```python
from time import sleep,ctime,localtime,perf_counter
print("Hello......!")
sleep(3)  # 就不需要再說time.sleep了，直接用sleep就可以了
print("Kelly")
```


```python
from time import sleep,ctime,localtime,perf_counter
startTime= perf_counter()
for i in range(11):
    print(i)
endTime= perf_counter()

print(f"{startTime},{endTime},{endTime-startTime}")  #print(f"")的用法是""內可以放文字或是變數，只要用{}把變數包起來就可以了
```

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2378108.7082513,2378108.7085243,0.00027299998328089714
    


```python
#from time import sleep,ctime,localtime,perf_counter
startTime= perf_counter()
for i in range(4):
    print(i)
    sleep(0.86)
endTime= perf_counter()

print(f"總運算時間,{endTime-startTime}")
```

    0
    1
    2
    3
    總運算時間,3.4434956000186503
    


```python
time1=localtime()
time2=ctime()
print(time1,"\n",time2)
```

    time.struct_time(tm_year=2023, tm_mon=11, tm_mday=16, tm_hour=10, tm_min=51, tm_sec=8, tm_wday=3, tm_yday=320, tm_isdst=0) 
     Thu Nov 16 10:51:08 2023
    


```python
import random as r
inkey= input("按任意鍵再按enter為繼續執行,直接按enter則結束")
while inkey!="":
    print(r.randint(1,6))
    inkey= input("按任意鍵再按enter為繼續執行,直接按enter則結束")
print("遊戲結束")

#另解
print("-------------------------------------")
while True:
    inkey=input("按任意鍵再按enter為繼續執行,直接按enter則結束")
    if len(inkey)>0:
        print(r.randint(1,6))
    else:
        print("遊戲結束")
        break
        
        
```

    按任意鍵再按enter為繼續執行,直接按enter則結束
    遊戲結束
    -------------------------------------
    按任意鍵再按enter為繼續執行,直接按enter則結束1
    1
    按任意鍵再按enter為繼續執行,直接按enter則結束2
    1
    按任意鍵再按enter為繼續執行,直接按enter則結束3
    2
    按任意鍵再按enter為繼續執行,直接按enter則結束
    遊戲結束
    

* 安裝 numpy 的程式
```python
! pip install numpy
```

    Requirement already satisfied: numpy in c:\users\user\anaconda3\lib\site-packages (1.24.3)
    


```python
import turtle as t  # turtle可以在畫面上畫圖
import os   #可以讀取電腦上的資料(鍵盤...)

player_a_score = 0
player_b_score = 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":"自然"}

W10
下載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>

## [ afterclass practice ]

>　1. 教學影音: 
>- 新手入門 #07 Function (函式)
>- 新手入門 #09 Module (模組)
>2. 期末分組名單
>- B1003208 江翌榛、 B1003210 應雨岑 B1003204鄭玟琳

* ## 教學影音 
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 ]

* 以12小制顯示現在時刻
```python
from time import localtime,time
#print(localtime())   測試  
#list=localtime()     測試
#print(list)          測試
if list.tm_hour>12:
    hour=list.tm_hour-12
    print("現在時刻：下午",hour,"點",list.tm_min,"分",list.tm_sec,"秒")
else:
    print("現在時刻：下午",list.tm_hour,"點",list.tm_min,"分",list.tm_sec,"秒")

```

    現在時刻：下午 11 點 51 分 47 秒
    

* 買菜
```python
#媽媽去買菜，希望在找錢時能以最少硬幣數的方法拿到
def buy(money):
    a=b=c=d=0
    a=int(money)
    if a>=50:
        b=a%50
        a = a/50
        if b>10:
            c=b%10
            b=b/10
            if c>5:
                d=c%5
                c=c/5
            else:
                d=c
        else:
            if b>5:
                d=b%5
                c=b/5
            else:
                b=c    
    else:   #<50
        if a>10:
            c=a%10
            b=a/10
            a=0
            if c>5:
                d=c%5
                c=c/5
            else:
                d=c
                c=0
        else:  #a<10
            if a>5:
                d=a%5
                c=a/5
                a=b=0
            else:
                d=a
                a=b=c=0
        
    return a,b,c,d
a,b,c,d=buy(input("請輸入換幣金額"))
print("50元有%d個，10元有%d個，5元有%d個，1元有%d個"%(a,b,c,d))

```

    請輸入換幣金額127
    50元有2個，10元有2個，5元有1個，1元有2個
    
