W01|第一次使用 JMJ:輸入、計算與輸出
今天完成後,我可以
- 使用 IDLE 建立、儲存及執行 Python 程式。
- 看懂 JMJ 題目的輸入格式、輸出格式與範例。
- 使用
input()、int()、變數、四則運算與print()。 - 在 JMJ 提交 Python 3 程式並判讀基本結果。
- 認識整數除法
//與取餘數%的意義。
今天的學習路線
跟著教師完成 b001
→ 在自己的電腦執行範例
→ 修改成 b004
→ 提交 b004(課中必做,70分)
→ 完成 b035(課中延伸,30分)
→ 自選課後公式挑戰
b001是教師示範題,不需要提交。本週有「課中練習」與「課後挑戰」兩個題組;下課後課中練習會關閉。
一、認識 IDLE 的兩個視窗
Python Shell
畫面會出現:
>>>
程式執行後,結果會顯示在這裡;遇到 input() 時,也是在這裡輸入資料。
Editor
依序選擇:
File → New File
完整程式應寫在 Editor,而不是把整份程式逐行寫在 >>> 後面。
完成後先儲存為 .py 檔,再按 F5 執行。
二、教師示範:b001 小學生的三角形面積計算
三角形面積公式:
底 × 高 ÷ 2
請跟著教師的廣播畫面,在IDLE中逐字輸入、儲存並執行示範程式。完整程式碼不放在講義中;若畫面已切換,請先根據剛才的操作自行回想,必要時再向教師確認。
三、準備第一次提交
教師示範的b001只需要在IDLE中執行,不必提交到JMJ。完成b004後,再依下列項目進行第一次提交。
- 程式已在 IDLE 中成功執行。
- 輸入資料時沒有把「輸入」兩個字一起輸入。
- 程式中沒有
print("請輸入...")等提示文字。 - 提交時選擇 Python 3。
- 提交內容不包含
>>>。
常見結果:
| 結果 | 意思 |
|---|---|
| Accepted | 程式通過目前測資 |
| Wrong Answer | 程式可以執行,但輸出結果不正確 |
| Runtime Error | 執行時發生錯誤 |
| Syntax Error | Python語法有錯誤 |
四、課堂必做:b004 小學生的梯形面積計算
梯形面積公式:
(上底 + 下底) × 高 ÷ 2
請從剛才的三角形程式開始修改:
- 梯形需要輸入幾個數字?
- 要增加哪一個變數?
- 哪一行公式需要修改?
- 為什麼上底與下底相加的部分需要括號?
本題可使用:
提示一
需要記錄哪些資料?
需要分別記錄上底、下底與高,共三個變數。
提示二
程式骨架
五、課中延伸:b035 發糖果囉(基本題,30分)
有17顆糖果平均分給5人:
每人得到 3 顆,剩下 2 顆
17 = 5 × 3 + 2
Python提供兩種不同的除法運算:
請注意,/、//與%的結果不同:
| 寫法 | 意義 | 17與5的結果 |
|---|---|---|
17 / 5 |
一般除法 | 3.4 |
17 // 5 |
整數除法 | 3 |
17 % 5 |
取餘數 | 2 |
b035會依序輸入糖果總數與人數,請輸出每人最多拿到的數量及剩下的數量,各占一行。
程式骨架
需要提示時再展開
六、課後挑戰:數學公式實作
課後題不列入本週課中最低完成要求。建議先完成b005,再挑戰b006。
b005 高中生的三角形面積與周長(40分)
輸入三角形的三邊長a、b、c。先計算半周長:
s = (a + b + c) / 2
再使用海龍公式:
面積 = √[s(s-a)(s-b)(s-c)]
周長 = a + b + c
數學課提過:「x次方根可以寫成1/x次方」。因此,有人可能會直覺把平方根寫成:
先不要急著修改,請依序完成:
- 預測這段程式應該輸出多少。
- 在IDLE實際執行,觀察結果。
- Python先計算
**還是/? - 要把
1 / 2當成完整的指數,括號應該放在哪裡?
完成實驗後,再查看運算順序
**的運算順序比/優先,所以原式會被當成:
(value ** 1) / 2
請用括號讓Python先算出1 / 2,再把它當作指數。修改後以value = 16測試,平方根應為4.0。
題目要求第一行輸出面積,第二行輸出周長。
b006 高中生的一元二次方程式的根(60分)
公式為:
x = (-b ± √(b²-4ac)) / (2a)
建議不要一次寫成很長的一行,先計算判別式:
輸入可能包含小數,因此應使用float(input())。題目保證a > 0且有兩個相異實根。
公式中的±代表兩個不同的數字,不是Python中的一個運算符號:
較大的根:分子使用 -b 加上根號部分
較小的根:分子使用 -b 減去根號部分
因此請分別建立兩個變數,再分成兩行輸出。不要只寫一個(-b+-d**0.5);Python會把其中的+-理解成「加上一個負數」,只會算出其中一種情況,並不會自動產生兩個答案。
兩個解的程式骨架
兩個空格應分別填入不同的加減運算符號。
七、完成後自我檢查
- 我在 IDLE 中測試過自己的程式。
- 我沒有在
input()中加入提示文字。 - 我的公式先計算上底與下底的和。
- 我已經在 JMJ 取得 Accepted,或知道目前錯誤發生在哪裡。
- 我能說明
//和%分別會得到什麼。
八、提早完成
若尚未完成b035,請先完成;若已完成,才進入課後挑戰。也可以自行設計三組梯形資料,先手算面積,再用程式驗證。接著嘗試回答:
- 如果拿掉公式中的括號,哪一組資料可以看出錯誤?
- 如果上底、下底或高有所改變,需要修改程式本身嗎?
- 能否只改變變數名稱,但維持程式正確?