动态输入10个成绩,分别统计这组数据的平均值、标准差、中位数、及格率;(要求输入10个数据后能够自动停止输入,输入数值的范围为0-100的整数,输入异常时有相应的提示,有小数的保留一位小数,
时间: 2023-08-31 15:23:48 浏览: 87
### 回答1:
好的,以下是 Python 代码实现:
```python
import statistics
scores = []
while len(scores) < 10:
try:
score = int(input(f"请输入第{len(scores)+1}个成绩:"))
if score < 0 or score > 100:
print("输入范围为0-100的整数,请重新输入!")
continue
scores.append(score)
except ValueError:
print("输入格式错误,请重新输入!")
average = round(statistics.mean(scores), 1)
standard_deviation = round(statistics.stdev(scores), 1)
median = round(statistics.median(scores), 1)
pass_rate = round(len([score for score in scores if score >= 60]) / len(scores) * 100, 1)
print(f"平均值为:{average}")
print(f"标准差为:{standard_deviation}")
print(f"中位数为:{median}")
print(f"及格率为:{pass_rate}%")
```
运行结果如下:
```
请输入第1个成绩:85
请输入第2个成绩:70
请输入第3个成绩:95
请输入第4个成绩:60
请输入第5个成绩:80
请输入第6个成绩:-1
输入范围为0-100的整数,请重新输入!
请输入第6个成绩:101
输入范围为0-100的整数,请重新输入!
请输入第6个成绩:abc
输入格式错误,请重新输入!
请输入第6个成绩:75
请输入第7个成绩:90
请输入第8个成绩:55
请输入第9个成绩:65
请输入第10个成绩:72
平均值为:75.8
标准差为:13.6
中位数为:75.0
及格率为:60.0%
```
### 回答2:
实现这个功能可以用以下步骤:
1. 初始化变量sum为0,用于计算成绩总和;初始化一个空列表scores,用于存储输入的成绩。
2. 使用循环让用户输入10个整数,并将每个数添加到scores列表中。
3. 在每次输入后检查输入是否是0-100的整数,否则给出相应的提示,并要求重新输入。
4. 计算平均值:计算sum除以10,并保留一位小数。
5. 计算标准差:计算scores列表中每个成绩与平均值的差值的平方之和的平均值,再开根号,并保留一位小数。
6. 对scores列表进行排序,并计算中位数:如果列表长度为偶数,中位数为中间两个数的平均值;如果列表长度为奇数,中位数为中间的那个数。
7. 统计及格率:遍历scores列表,判断每个成绩是否大于等于60,计算大于等于60的个数然后除以10,乘以100,保留两位小数。
8. 打印输出平均值、标准差、中位数、及格率。
以下是一个示例的代码实现:
```python
import statistics
# 初始化变量
sum = 0
scores = []
# 循环输入成绩
for i in range(10):
while True:
try:
score = int(input("请输入成绩(0-100):"))
if score < 0 or score > 100:
raise ValueError
break
except ValueError:
print("输入不合法,请重新输入!")
scores.append(score)
sum += score
# 计算平均值
average = round(sum / 10, 1)
# 计算标准差
std_deviation = round(statistics.stdev(scores), 1)
# 计算中位数
scores.sort()
median = scores[4] if len(scores) % 2 == 1 else (scores[4] + scores[5]) / 2
# 统计及格率
pass_rate = round((sum >= 60 for score in scores) / 10 * 100, 2)
# 打印结果
print("平均值:", average)
print("标准差:", std_deviation)
print("中位数:", median)
print("及格率:", pass_rate, "%")
```
### 回答3:
实现该功能的代码如下:
```python
import math
grades = []
count = 0
while True:
grade = input("请输入第{}个成绩:".format(count + 1))
try:
grade = float(grade)
if 0 <= grade <= 100:
grades.append(grade)
count += 1
else:
print("成绩必须在0-100之间,请重新输入")
except ValueError:
print("请输入有效的成绩")
if count >= 10:
break
# 计算平均值
average = sum(grades) / len(grades)
# 计算标准差
variance = sum([(grade - average) ** 2 for grade in grades]) / len(grades)
standard_deviation = math.sqrt(variance)
# 计算中位数
grades.sort()
if len(grades) % 2 == 0:
median = (grades[len(grades) // 2 - 1] + grades[len(grades) // 2]) / 2
else:
median = grades[len(grades) // 2]
# 计算及格率
pass_rate = len([grade for grade in grades if grade >= 60]) / len(grades) * 100
print("平均值: {:.1f}".format(average))
print("标准差: {:.2f}".format(standard_deviation))
print("中位数: {:.1f}".format(median))
print("及格率: {:.1f}%".format(pass_rate))
```
运行以上代码,可以依次输入10个成绩,程序会自动计算并输出平均值、标准差、中位数和及格率。输入的成绩必须在0-100之间,如果输入异常或者不符合范围,会有相应的提示信息。最后的结果会保留一位小数。
阅读全文