2017-10-19 13 views
0

Je me demande d'ajouter les 100 premiers termes f la séquence (1 + 1/2 + 1/4 + 1/8 ... etc)Trouver la somme d'une progression géométrique

ce que je ve essayé est quelque chose Iike

for x in range(101): 
    n = ((1)/(2**x))   
    sum(n) 

me donne une erreur, deviner vous ne pouvez pas les plages mis à une puissance

print(n) 

me donnera une liste de toutes les valeurs, mais je dois les sommées

quelqu'un qui peut me donner un coup de main?

utilisant qtconsole si c'est de toute pertinence, je suis tout à fait nouveau pour cela si vous ne l'avez pas déjà deviné

+0

« me donne une erreur » - bien, ne nous fait pas alors deviner. Quelle est l'erreur? – Blorgbeard

+0

écrire 'n = 0' avant la boucle et mettre seulement' n + = ((1)/(2 ** x)) ' – percusse

+0

ne pas avoir l'erreur écrite, je ne peux utiliser Python au collège, je crois que le problème était Il était incapable de mettre une "gamme" à pow(), **. Je ne peux pas vraiment ajouter plus que ça –

Répondre

1

Il est important d'initialiser sum_n à zéro. A chaque itération, vous ajoutez (1/2 ** x) de votre séquence/série à sum_n jusqu'à atteindre n_range.

n_range = 101 
sum_n = 0 # initialize sum_n to zero 

for x in range(n_range): 
    sum_n += (1/(2**x)) 

print(sum_n) 
1

Vous ne garder qu'une seule valeur à la fois. Si vous voulez la somme, vous devez agréger les résultats, et que vous auriez besoin d'une valeur initiale , auquel vous pouvez ajouter chaque tour, le terme actuel:

n = 0 # initial value 
for x in range(100): 
    n += 1/2**x # add current term 
print(n) 
0

Vous êtes obtenir une erreur, car la somme prend un itérables et vous passez un float:

somme (itérables [, début])

pour résoudre votre problème, comme d'autres l'ont suggéré, vous devez initialiser un accumulateur et ajouter votre pouvoir sur tous les itération.

Si vous devez absolument utiliser la fonction somme:

>>> import math 
>>> sum(map(lambda x:math.pow(2,-x),range(100))) 
2.0