Calculating the sum of a series?
<p>This is my assignment and for the life of me i cant seem to think of a way to do it. This is the code I have so far:</p>

<pre><code>sum = 0
k = 1
while k &lt;= 0.0001:
     if k % 2 == 1:
       sum = sum + 1.0/k
     else:
      sum = sum - 1.0/k
 k = k + 1
 print()
</code></pre>

<p>This is my assignment :</p>

<blockquote>
  <p>Create a python program named sumseries.py that does the following:
  Put comments at the top of your program with your name, date, and
  description of what the program does.</p>
  
  <p>Write a program to calculate and display the sum of the series:</p>
  
  <p>1 - 1/2 + 1/3 - 1/4 + ...</p>
  
  <p>until a term is reached that is less than 0.0001.</p>
</blockquote>

<p>The answer with 10,000 iterations appears to be 0.6930971830599583</p>

<p>I ran the program with 1,000,000,000 (billion) iterations and came up with a number of 0.6931471810606472. I need to create a loop to programmably create the series.</p>

<p>To make the teacher happy, you must follow the details of the problem, as well as the spirit of the problem. The problem clearly states to print the sum, not all the partial sums. You will anger the teacher by submitting a solution that spews 10000 lines of crap not requested.</p>

<p>Some have suggested pre-calculating a loop limit of 10000, but that was not the requested algorithm. Instead, one is to calculate successive terms (1, -1/2, 1/3, -1/4, ...) until reaching a term less than 0.0001.</p>

<p>The reason the problem was specified that way is that one ends up with a more generally useful program, applicable to a wide class of term formulas. Not a fragile one that gets the wrong answer if the term formula is changed from <code>(-1)**(k-1)/k</code>, to say <code>1/k</code> or <code>1/k^2</code>.</p>

<p>The teacher's wording "term less than 0.0001" is imprecise and assumed some math knowledge. They want the magnitude (absolute value) of the term to be less than 0.0001. Otherwise, iteration would stop at the second term -1/2, as someone pointed out.</p>

<p>So, this answer would not be complete without a pompous pedantic solution that skips ahead a chapter. ;) Note that previous some answers will not work in Python2.x without a conversion to float.</p>

<pre><code>def term(k):
    return (-1)**(k - 1) / float(k)

err = 0.0001

def terms():
    k = 1
    t = term(k)
    while abs(t) &gt;= err:
        yield t
        k += 1
        t = term(k)

print(sum(terms()))
</code></pre>

python python-3.x