需求:给出一组数,对他们有个概要理解。
总个数:len()
求和:for ---in
平均值:求和/总个数
方差:各数据与平均数差的平方的和的平均数
中位数:排序,然后如果奇数个的话找中间一个,偶数个的话找中间两个取平均。
函数:getnumber,作用为获得用户的每一个数据输入,直到用户输入一个空的回车即止。
代码示例如下:
def getNum(): nums=[] #创建一个空列表 iNumStr=input("请输入数字(回车退出):") #将所输入的数赋值给iNumStr函数 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 de(numbers,mean): #计算方差 sd=0.0 for num in numbers: sd=sd+(num-mean)**2 return sd/len(numbers) def dev(numbers,mean): #计算标准差 sdev=0.0 for num in numbers: sdev=sdev+(num-mean)**2 return pow(sdev/(len(numbers)-1),0.5) def median(numbers): sorted(numbers) size=len(numbers) if size%2==0: med=(numbers[size//2-1]+numbers[size//2])/2 else: med=numbers[size//2] return med n=getNum() m=mean(n) print("平均数:{},方差:{},标准差:{},中位数:{}".format(m,de(n,m),dev(n,m),median(n)))
运行界面如下所示:
通过以上程序可知,我们根据模块化设计思想,首先,我们确立函数的输入,即进行列表的输入,
在实现该模块设计的时候,我们先创建一个列表,即一个空列表,然后将输入值赋值给一个函数,利用while循环进行判断,如果输入不为空,则继续输入,同时利用append函数将输入值增加到列表后面,如果输入为空,则直接返回该列表。这就达到了输入的效果。具体的这一模块的代码如下:
def getNum(): nums=[] #创建一个空列表 iNumStr=input("请输入数字(回车退出):") #将所输入的数赋值给iNumStr函数 while iNumStr !="": nums.append(eval(iNumStr)) iNumStr=input("请输入数字(回车退出):") return nums
之后,在实现输入值模块的基础上,我们进行增加所实现的功能,其中首先增加求取平均值的模块功能。求取平均值需要先求他们的总体的和,然后再用和去除以元素的个数。我们采用for循环进行求取,我们用for循环进行遍历元素的每一个值,同时设立一个值,即和初始值为s=0.0,在我们遍历每一个元素的时候,我们将和加遍历的每一个元素,遍历结束后,和也相加完毕,即结果即为元素的和,然后我们采用len函数去判断列表的个数,将和与列表个数进行相除即为平均值。
功能实现如下:
def mean(numbers): #计算平均值 s=0.0 for num in numbers: s=s+num return s/len(numbers)
之后我们进行方差功能的实现,求取方差的时候,需要求取各数据与平均数差的平方的和的平均数,平均数的功能在上一模块里面我们已经实现了,所以我们需要进行调用mean函数,即作为我们方差函数的参数,而且也要调用输入函数,即该函数有两个参数,首先我们设立各数据与平均数差的平方的和的初始值sd为0,之后我们通过遍历将各值进行相加,结果即为他们的和,遍历完毕后,我们采用len函数确定元素的个数,进行求取各数据与平均数差的平方的和的平均数。
功能模块实现如下:
def de(numbers,mean): #计算方差 sd=0.0 for num in numbers: sd=sd+(num-mean)**2 return sd/len(numbers)
下面我们进行求取标准差的计算,求取标准差的时候,需要求取各数据与平均数差的平方的和的平均数,平均数的功能在上一模块里面我们已经实现了,所以我们需要进行调用mean函数,即作为我们标准差函数的参数,而且也要调用输入函数,即该函数有两个参数,首先我们设立各数据与平均数差的平方的和的初始值sdev为0,之后我们通过遍历将各值进行相加,结果即为他们的和,遍历完毕后,我们采用len函数确定元素的个数,进行求取各数据与平均数差的平方的和的平均数。求解出来后,我们还要进行将结果进行开方,即为标准差。这里我们需要增加一点,在数学中,求标准差确实有两个公式,一个是除以 n ,一个是除以 n-1 , 当数据个数n较多时,也就是 n 很大时,计算的结果差别不是很大,因此选择哪个公式都可以。 但当数据个数不多,n 不是很大时,结果的差异还有明显地。 数学上已经证明,除以 n-1 的公式可以更真实地反映总体的特征,因此一般较多采用。所以我们这里采用n-1求解标准差。
功能模块实现如下:
def dev(numbers,mean): #计算标准差 sdev=0.0 for num in numbers: sdev=sdev+(num-mean)**2 return pow(sdev/(len(numbers)-1),0.5)
下来我们进行中位数的计算,首先我们将数据进行排序,然后如果奇数个的话找中间一个,偶数个的话找中间两个然后求取这两个数的平均值。首先我们将数据进行排序,采用sorted方法,将数据从小到大进行排列,并且我们将长度赋值给size这个函数,之后我们采用if -else语句进行判断,如果长度为偶数个,我们通过对列表进行索引取中间两个数,将他们相加求取平均值,如果不为偶数,则取他们的中间值,这里需要注意的是,索引是从0开始索引,所以奇数个的中间值我们除以2,例如7//2,取整为3,索引从0开始,刚好为第4个值,即中间值。
def median(numbers): #计算中位数 sorted(numbers) #将数据进行升序排列,即从小到大。 size=len(numbers) if size%2==0: med=(numbers[size//2-1]+numbers[size//2])/2 else: med=numbers[size//2] return med
之后我们对这些值进行输出,将输入值赋值给n,平均值赋值给m,求取方差需要调用输入值和平均值,而中位数需要调用输入值,运行之后,输入数据,即可求取这些值。
n=getNum() m=mean(n) print("平均数:{},方差:{},中位数:{}".format(m,dev(n,m),median(n)))
技术能力扩展:
获取多个数据:从控制台获取多个不确定数据的方法
分割多个函数:模块化设计方法
充分利用函数:充分利用python提供的内容函数