# 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. 成績指標 ![](https://i.imgur.com/5A3TCE3.png) ![](https://i.imgur.com/3BXkF6E.png) ![](https://i.imgur.com/rXodML1.png) :::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 元 ```