# Python程式設計 綜合練習
:::warning
1. 程式碼請多寫註解!
2. 請用函式模組化程式碼
3. 請多思考例外處理
:::
## 1. 身分證字號驗證器
我國的身分證字號有底下這樣的規則,因此對於任意輸入的身分證字號可以有一些基本的判斷原則:
(1) 英文代號以下表轉換成數字
```
A=10 台北市 J=18 新竹縣 S=26 高雄縣
B=11 台中市 K=19 苗栗縣 T=27 屏東縣
C=12 基隆市 L=20 台中縣 U=28 花蓮縣
D=13 台南市 M=21 南投縣 V=29 台東縣
E=14 高雄市 N=22 彰化縣 W=32 金門縣
F=15 台北縣 O=35 新竹市 X=30 澎湖縣
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山
H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣
I=34 嘉義市 R=25 台南縣
```
(2) 英文轉成的數字, 個位數乘9再加上十位數的數字
(3) 各數字從右到左依次乘1, 2, 3, 4,...,8,並且相加
(4) 求出(2),(3) 及最後一碼的和
(5) 如果求出的和可以被10整除,則為合法身分證字號,否則為非法身分證字號
例如: T112663836
2 + 7x9 + 1x8 + 1x7 + 2x6 + 6x5 + 6x4 + 3x3 + 8x2 + 3x1 + 6 = 180
因為180可以被10 整除,此身分證字號為合法身分證字號
請你寫一個Python程式:
- 請使用者輸入身分證字號
- 如果通過公式驗證,則顯示為合法身分證字號;否則,顯示非法身分證字號
```
請輸入要驗證的身分證字號(輸入-1 關閉程式)> A123456789
這個身分證字號是合法的
請輸入要驗證的身分證字號(輸入-1 關閉程式)> A100200300
這個身分證字號是非法的
請輸入要驗證的身分證字號(輸入-1 關閉程式)> -1
程式已關閉
```
## 2. 列印圖形
請設計一個程式
- 讓使用者輸入選項(1: 畫矩形, 2: 畫三角形, 3: 畫金字塔)
- 如果使用者輸入1
- 請使用者輸入寬度跟長度,按下Enter後畫出矩形
- 參考執行範例如下:
```
讓選擇要畫的圖形(1: 畫矩形, 2: 畫三角形, 3: 畫金字塔)> 1
請輸入矩形的長度與寬度(以空格隔開)> 5 4
*****
*****
*****
*****
```
- 如果使用者輸入2
- 請使用者輸入高度,按下Enter後畫出矩形
- 參考執行範例如下:
```
讓選擇要畫的圖形(1: 畫矩形, 2: 畫三角形, 3: 畫金字塔)> 2
請輸入三角形的高度> 4
*
***
*****
*******
```
- 如果使用者輸入3
- 請使用者輸入高度,按下Enter後畫出金字塔
- 參考執行範例如下:
```
讓選擇要畫的圖形(1: 畫矩形, 2: 畫三角形, 3: 畫金字塔)> 1
請輸入金字塔的高度> 4
*
* *
* *
*******
```
## 3. 終極密碼
請設計一個程式:
1. 讓電腦當莊家,隨機選定一個介於 1~100 之間的整數
2. 使用者要輸入數字去猜那個數字,直到猜中為止
- 沒猜中時電腦會限縮範圍當作提示,讓使用者再次嘗試
- 當使用者猜中時,告知使用者答案,以及花費的答題次數
執行範例如下:
```
請輸入一個1~100的整數> 54
你的答案比正確答案還大!再猜猜看吧
請輸入一個1~54的整數> 36
你的答案比正確答案還小!再猜猜看吧
請輸入一個36~54的整數> 45
正確答案就是45! 你花了3個回合就猜出來,真厲害
```
## 4. 成績指標



:::info
**本題演算法設計參考:**
1. 請使用者輸入學生人數,定義`成績list`的長度
2. 請使用者輸入成績,以`成績list`儲存
3. 呼叫sort()進行`成績list`排序,並且依序將元素印出
4. 條件判斷:
- 檢查最低成績是否及格,如果是,表示全部都及格
- 輸出`best case`
- 印出`最低及格者成績`
- 結束迴圈
- 或者,檢查最高成績是否不及格,如果是,表示全部人都不及格
- 印出`最高不及格者成績`
- 印出`worst case`
- 結束迴圈
- 其他情況
- 掃描`成績list`,找出最高不及格者
- 掃描`成績list`,找出最低及格者
- 結束迴圈
:::
## 5. 收銀機
請設計一個收銀機程式,操作流程如下:
1. 店員輸入結帳金額
2. 店員輸入顧客支付金額
3. 收銀機程式計算並列出
- 找錢金額
- 建議找錢的面額與數量
- 1000元/500元/100元紙鈔
- 50/10/5/1元硬幣
```python
請輸入結帳金額> 416
請輸入顧客支付金額> 1000
共要找584元
1 個 500 元 1 個 50 元 3 個 10 元 4 個 1 元
```