|
|
# 做決策:學生成績處理器
|
|
|
|
|
|
## 學習目標
|
|
|
|
|
|
在此作業中,你將透過建立一個處理不同評分系統中學生成績的程式,來練習本課程的決策概念。你將使用 `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. **考慮邊緣狀況**,如空陣列或非預期資料型態
|
|
|
|
|
|
> 💡 **專業小提示**:先從簡單開始!先讓基本功能順利運作,再加入更複雜的特性。記得,目標是練習本課程的決策邏輯與工具。
|
|
|
|
|
|
---
|
|
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
|
**免責聲明**:
|
|
|
本文件係使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 所翻譯而成。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始語言文件應視為權威來源。對於重要資訊,建議採用專業人工翻譯。因使用本翻譯而產生之任何誤解或錯誤詮釋,我們概不負責。
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |