# 做決策:學生成績處理器 ## 學習目標 在此作業中,你將透過建立一個處理不同評分系統中學生成績的程式,來練習本課程的決策概念。你將使用 `if...else` 陳述式、比較運算子及邏輯運算子,判斷哪些學生通過課程。 ## 挑戰說明 你在一所剛與另一所學校合併的學校工作。現在你需要處理來自兩種完全不同評分系統的學生成績,並判斷哪些學生合格。這是練習條件邏輯的絕佳機會! ### 了解評分系統 #### 第一種評分系統(數字) - 成績以 1-5 的數字給分 - **及格成績**:3 及以上(3、4 或 5) - **不及格成績**:低於 3(1 或 2) #### 第二種評分系統(字母級分) - 成績以字母呈現:`A`、`A-`、`B`、`B-`、`C`、`C-` - **及格成績**:`A`、`A-`、`B`、`B-`、`C`、`C-`(所有列出的字母分數都及格) - **注意**:此系統沒有包含像 `D` 或 `F` 這樣的不及格字母 ### 你的任務 給定以下陣列 `allStudents`,代表所有學生及其成績,請建立一個新陣列 `studentsWhoPass`,包含依各自評分系統判定及格的學生。 ```javascript let allStudents = [ 'A', // 字母等級 - 通過 'B-', // 字母等級 - 通過 1, // 數字等級 - 不及格 4, // 數字等級 - 通過 5, // 數字等級 - 通過 2 // 數字等級 - 不及格 ]; let studentsWhoPass = []; ``` ### 分步驟方法 1. **設置迴圈**,遍歷 `allStudents` 陣列中的每個成績 2. **檢查成績類型**(是數字還是字串?) 3. **套用適用的評分規則**: - 對數字:判斷成績是否 >= 3 - 對字串:檢查是否為有效的及格字母級分 4. **將及格的成績** 加入 `studentsWhoPass` 陣列 ### 有用的程式技巧 使用本課程介紹的 JavaScript 概念: - **typeof 運算子**:`typeof grade === 'number'` 用來判斷是否為數字成績 - **比較運算子**:`>=` 用來比較數字成績 - **邏輯運算子**:`||` 用來檢查多個字母級分條件 - **if...else 陳述式**:用於處理不同的評分系統 - **陣列方法**:`.push()` 用來將及格成績加入新陣列 ### 預期輸出 當你執行程式後,`studentsWhoPass` 應該包含:`['A', 'B-', 4, 5]` **這些成績為何及格:** - `'A'` 和 `'B-'` 是有效的字母級分(此系統所有字母成績均為及格) - `4` 和 `5` 是數字成績且 >= 3 - `1` 與 `2` 因為小於 3 而不及格 ## 測試你的解決方案 使用不同場景測試你的程式: ```javascript // 使用不同的分数组合進行測試 let testGrades1 = ['A-', 3, 'C', 1, 'B']; let testGrades2 = [5, 'A', 2, 'C-', 4]; // 你的解法應該能適用於任何有效的分数组合 ``` ## 進階挑戰 完成基本作業後,嘗試以下擴展: 1. **增加驗證**:檢查不合法成績(像是負數或無效字母) 2. **計算統計**:計算有多少學生及格與不及格 3. **成績轉換**:將所有成績轉換為單一數字系統(A=5,B=4,C=3,等等) ## 評分規準 | 標準 | 優異 (4) | 熟練 (3) | 進展中 (2) | 初階 (1) | |----------|---------------|----------------|----------------|---------------| | **功能性** | 程式能正確分辨兩種系統的所有及格成績 | 程式運作正常,少數邊緣狀況問題 | 程式部分正常,但有邏輯錯誤 | 程式錯誤嚴重或無法執行 | | **程式架構** | 程式碼乾淨且組織良好,有適當的 if...else 邏輯 | 結構良好,使用適當的條件語句 | 架構尚可,有組織性問題 | 架構差,邏輯難以理解 | | **概念運用** | 有效使用比較運算子、邏輯運算子與條件陳述式 | 利用課程概念良好,少許缺漏 | 部分使用課程概念,缺少重要元素 | 使用課程概念有限 | | **問題解決能力** | 清楚理解問題並提出優雅解決方案 | 概念清楚,邏輯穩健 | 解題能力尚可,但部分混亂 | 方法不明確,無法展現理解 | ## 提交指引 1. **充分測試**你的程式,以提供的範例為主 2. **加入註解**說明邏輯,尤其是條件判斷部分 3. **確認輸出**與預期結果吻合:`['A', 'B-', 4, 5]` 4. **考慮邊緣狀況**,如空陣列或非預期資料型態 > 💡 **專業小提示**:先從簡單開始!先讓基本功能順利運作,再加入更複雜的特性。記得,目標是練習本課程的決策邏輯與工具。 --- **免責聲明**: 本文件係使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 所翻譯而成。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始語言文件應視為權威來源。對於重要資訊,建議採用專業人工翻譯。因使用本翻譯而產生之任何誤解或錯誤詮釋,我們概不負責。