这段代码有没有考虑评委打分为负分或浮点数的情况?
时间: 2024-10-05 07:04:42 浏览: 38
这段代码只适用于整数类型的评委打分。如果要考虑负分或浮点数的情况,我们需要对`calculateScore`函数做些调整。对于负分,你可以直接添加到总和中;对于浮点数,你需要确保计算结果也是浮点型。以下是修改后的代码片段:
```cpp
double calculateScore(const std::vector<float>& scores) {
if (scores.empty() || scores.size() == 1) {
std::cout << "Invalid input, cannot remove highest and lowest score." << std::endl;
return 0.0f; // 返回浮点数
}
std::sort(scores.begin(), scores.end());
float sum = 0.0f;
for (size_t i = 1; i < scores.size() - 1; i++) { // 使用范围for循环,避免迭代器
sum += scores[i];
}
float average = sum / (scores.size() - 2);
return average;
}
```
现在,该函数可以处理浮点数分数,无论是正数还是负数。不过,用户仍然需要提供`float`类型的输入。
相关问题
对用户输入的分数进行评级,其中90-100分优秀,80-89分良好,70-79分中等,60-69分及格,60分以下为不及格。输入分数要求必须是正整数或0。请编写这段代码的手工测试代码
你可以按照以下步骤编写手工测试代码来检查这个评分函数:
```python
# 定义评级函数
def score_rating(score):
if not isinstance(score, int) or score < 0:
raise ValueError("分数必须是正整数或0")
# 评级规则
if score >= 90:
return "优秀"
elif score >= 80 and score <= 89:
return "良好"
elif score >= 70 and score <= 79:
return "中等"
elif score >= 60 and score <= 69:
return "及格"
else:
return "不及格"
# 手动测试用例
test_cases = [
(0, "及格"), # 0分属于及格范围
(65, "及格"), # 正确评分
(85, "良好"), # 属于良好范围
(95, "优秀"), # 高分,应该被评为优秀
(-5, ValueError), # 负分错误
(105, ValueError), # 分数超过满分
("score", ValueError), # 字符串而非整数
]
for case, expected_result in test_cases:
try:
result = score_rating(case)
if isinstance(result, str): # 如果结果是字符串,比较评级是否匹配
assert result == expected_result
elif isinstance(result, Exception): # 如果结果是异常,检查是否为预期的异常类型
assert type(result) is expected_result
except AssertionError as assertion_error:
print(f"测试失败:对于{case},实际结果是{result},期望结果是{expected_result}")
else:
print(f"测试通过:对于{case},实际结果是{result}")
#
题目描述-计算比赛成绩(Python) 我校举办校园歌手比赛,邀请多位评委为每一位参赛选手的表现打分。试编写程 序,根据相关规则计算某位参赛选手的最终得分。 评分规矩:分别去掉一个最低分和一个最高分,剩余成绩按照
题目描述是关于如何利用Python编写一个程序来计算校园歌手比赛的选手成绩。在这个场景中,需要考虑以下几个步骤:
1. **输入数据**:收集每位评委对选手的原始分数,这通常是一个列表,包含各个评委的整数评分。
2. **处理异常**:检查输入是否合法,例如检查评分是否存在非数值或负分的情况。
3. **剔除极端值**:找出并删除最高分和最低分。这可以通过先排序列表,然后取中间两个数(如果人数是奇数)或者中间两个数的平均值(如果人数是偶数)来实现。
4. **计算平均分**:剩下的有效评分相加,然后除以评委的数量得到选手的最终得分。
5. **输出结果**:将计算出的最终得分返回给用户,或将其保存到文件或其他地方作为记录。
下面是一个简单的示例代码片段来实现这个功能:
```python
def calculate_score(grades):
if not all(isinstance(score, int) for score in grades):
raise ValueError("所有评分应为整数")
if len(grades) < 3:
raise ValueError("至少需要三位评委的评分")
sorted_grades = sorted(grades)
filtered_grades = sorted_grades[1:-1] if len(sorted_grades) % 2 == 0 else sorted_grades[1:-2]
final_score = sum(filtered_grades) / (len(filtered_grades))
return final_score
# 使用示例
scores = [85, 90, 78, 92, 88]
final = calculate_score(scores)
print(f"选手的最终得分为:{final}")
阅读全文