2009-10-28 10 views
0

Je sais qu'il est à cause de n, mais n est censé être une variable, et à gauche comme n, est ce que j'ai:Calcul de la moyenne dans une plage interchangeable?

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

comment puis-je résoudre ce problème?

+0

Je ne comprends pas ce que vous demandez. –

+0

comment réparer quoi? – kurosch

Répondre

0

Si votre gamme est toujours 1: n, pourquoi ne pas utiliser ceci:

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

Ou peut-être je ne comprends pas votre question ...

1

Je peux me tromper, mais plage (1: int (n)) ne ressemble pas à une syntaxe correcte et les parenthèses ne correspondent pas. Vous pouvez calculer la moyenne des nombres compris entre 0 et n. Dans ce cas, je remplacerais votre code comme ceci:

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

+1 pour vous! Totalement raté le décalage de parens. Agréable! –

+0

Il ne calcule pas la moyenne correcte, par ex. si j'utilise ce code et branchez 3 pour n la moyenne devrait toujours être 2 mais les sorties Python 1.0 –

+0

range (n) retourne un tableau d'entiers entre [0..n [; pour 3, ce serait [0, ¸1, 2]; sum() retournera 3, et le nombre d'éléments dans la liste est ... 3; par conséquent, 3/3 == 1.0 –

2

La somme de x de 1 à n est tout simplement (n + 1) * (n/2). Le nombre d'éléments additionnés est n. Faites un peu de simplification et de votre nouvelle fonction est

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

Vous devrez régler ce paramètre si vous voulez réellement le comportement de Python d'une limite supérieure exclusive pour la plage() (c.-à-ayant en moyenne (10) retour à la moyenne de la somme des valeurs 1 - 9 au lieu de 1 - 10).

+0

Merci, je sais comment le changer pour inclure la somme supplémentaire, je voulais savoir comment réparer mon essai original, mais je suppose que la version la plus simple est meilleure, merci encore. –

+1

Ensuite, vous êtes mordu par le comportement de range(). range (1, 10) renvoie [1, 2, 3, 4, 5, 6, 7, 8, 9]. Donc, vous voulez la gamme (1, n + 1). – jamessan