为什么这不会返回1-5的平均值?

时间:2013-09-15 00:28:03

标签: python function average

def avg(n):
    count=0
    sum=0
    for var in range(n):
        count+=1
        sum+=var
    return (sum/count)
print (avg(5))

这是尝试使用for循环来查找从1到n的整数的平均值。 我错过了什么?

2 个答案:

答案 0 :(得分:6)

有两个原因。首先,你将0..4(包括)中的数字相加。您可以通过执行range(1,n+1)或更改为sum += var + 1

来解决此问题

第二个原因是默认情况下使用整数除法,您可以通过添加到顶部来强制执行浮点除法:

from __future__ import division

或在本地return sum/float(count)

答案 1 :(得分:2)

引用文档:

  

范围(开始,停止[,步骤])

     

如果省略start参数,则默认为0.完整表单   返回普通整数列表[start,start + step,start + 2 *   步, ...]。如果step为正,则最后一个元素是最大的开始   + i *步骤小于停止;

换句话说,range()在Python中不具有包容性。这意味着你的代码中有一个错误,它应该是这样的:

def avg(n):
    count=0
    sum=0
    for var in range(1, n+1):
        count+=1
        sum+=var
    return (float(sum)/count)
print (avg(5))