2009-10-28 76 views
0

我知道这是由于n,但n的应该是任何变量,和左正,这是我有:计算可互换范围内的平均值?

def average(n): 
    if n >= 0: 
     avg = sum((range(1:int(n)))/float(len(range(1:int(n))))) 
    print avg 

如何解决呢?

+0

我不明白你在问什么。 – 2009-10-28 21:14:06

+0

你如何解决什么问题? – kurosch 2009-10-28 21:14:17

回答

0

如果你的范围始终是1:N,你为什么不只是使用:

avg = sum((range(1:int(n)))/float(n)) 

或者,也许我不理解你的问题......

1

我可能是错的,但范围(1:int(n))在句法上看起来不正确,而括号不匹配。您可能想要计算0到n范围内的数字的平均值。在这种情况下,我会取代你这样的代码:

def average(n): 
if n >= 0: 
    avg = sum((range(int(n))))/float(n) 
print avg 
+0

+1给你!完全错过了parens错配。太好了! – 2009-10-28 21:22:48

+0

它不会计算出适当的平均值,例如如果我使用该代码并将n插入3,那么平均值仍然应为2,但Python输出为1.0 – 2009-10-28 21:36:11

+0

范围(n)返回[0..n [; []之间的整数数组)。对于3,这将是[0,¸1,2]; sum()将返回3,列表中元素的数量是... 3;因此,3/3 == 1.0 – 2009-10-29 14:34:11

2

x的从1到n的总和仅仅是(n + 1) * (n/2)。总结的元素数量为n。做一个小的简化和新的功能是

def average(n): 
    return (n + 1)/2.0 

你必须调整这个,如果你真的想要一个独特的上限的范围()(即具有平均(10)返回的平均Python的行为值1 - 9而不是1 - 10的总和)。

+0

谢谢你,我知道如何改变它以包括额外的总和,我想知道如何解决我原来的尝试,但我想最简单的版本更好,再次感谢你。 – 2009-10-28 21:43:15

+1

然后你被范围()的行为咬住了。范围(1,10)返回[1,2,3,4,5,6,7,8,9]。所以你想要范围(1,n + 1)。 – jamessan 2009-10-28 21:48:17