2009-10-28 68 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