文章目录
- 简介
- 目标分析
- 代码实现
- 列表在计算时候的作用
简介
统计是计算科学、管理学、社会学、数学等许多领域中的基本问题。相关的问题、方法以及技术组成的一门学科,即统计学。在本文将以一个计算多数据基本统计值的例子,来解决求解一组不定长数据的基本统计值的问题。在本例中,将利用列表数据结构获得数据的平均值、标准差、中位数。
这个问题的IPO如下描述:
输入:用户输入、文件、网络等途径获取一组数据。
处理:适当的数据结构与算法
输出:这组数据的算术平均值、标准差、中位数
目标分析
由于平均值、标准差、中位数是三个不同的计算目标,因此使用函数编写计算程序。定义getNum()函数获取用户输入的数据,mean()函数计算平均值,dev函数计算标准差,median()函数计算中位数。此处不考虑用户的最大输入数量,因此使用列表存储数据类型。
代码实现
完整代码如下所示:
from math import sqrt
def getNum():
nums = []
iNumStr = input("请输入数字(输入回车退出):")
while iNumStr !="":
nums.append(eval(iNumStr))
iNumStr = input("请输入数字(输入回车退出):")
return nums
def mean(numbers): #平均值
s = 0.0
for num in numbers:
s = s + num
return s /len(numbers)
def dev(numbers, mean): #标准差
sdev = 0.0
for num in numbers:
sdev = sdev + (num - mean)**2
return sqrt(sdev / (len(numbers)-1))
def median(numbers): #中位数
new = sorted(numbers)
size = len(numbers)
if size %2 == 0:
med = (new[size//2-1] + new[size//2])/2
else:
med = new[size//2]
return med
n = getNum()
m = mean(n)
print("平均值:{},标准差:{:.2},中位数:{}".format(m,dev(n,m),median(n)))
程序整体将从28行开始执行,按先后顺序分别调用了getNum(),mean(),dev()以及median()函数,利用模块化设计,能够充分复用代码,并且增加代码的可读性。函数内部的语句并不复杂。
getNum函数循环从控制台获取用户的输入,用户直接摁下回车键时退出循环。所有数据保存在num列表中,列表num初始化的时候定义为空,随后根据输入增加长度。
mean函数用浮点数s记录numbers中求和的结果,其中for语句表示列表中取出每一个元素。将其加到s变量中,直到列表的最后一个元素。最后通过return语句返回平均值,len用于计算长度。
因为计算标准差需要获取平均值,因此可以将mean函数中的均值作为参数输入到标准差函数中。
根据中位数的定义,首先使用python内置的sorted函数对列表进行排序,然后根据中位数定义进行计算。
列表在计算时候的作用
列表的作用体现在以下三个方面:
1.列表是一个动态长度的数据结构,可以根据需求增加或者减少元素。
2.列表的方法以及操作符提供了简单的元素计算手段。
3.列表中有着访问列表内元素以及遍历所有元素的方法。