Andrew Simpson
Andrew Simpson

Reputation: 37

For Loop not counting properly

The prompt for the exercise is as follows:

Uses a for loop to sum count values from start by increment. Use: total = sum_count(start, increment, count) Parameters: start - the range start value (int) increment - the range increment (int) count - the number of values in the range (int)

What i've come up with:

def sum_count(start, increment, count):
    total = start
    for i in range(start, count):
        i += increment
        total += i
    else:
        return total

When i call and print the function using values 2, 2, 5, the return should be 30, however I am only returning a value of 17. Which part of my code is wrong?

Upvotes: 0

Views: 882

Answers (4)

fsimonjetz
fsimonjetz

Reputation: 5802

If you want to repeat something x times, you can use a loop for _ in range(x) that doesn't do anything with the value _ itself.

Reading the task as

Use a for loop to sum count values from start by increment

means that count is not the upper boundary of the range - that's what you did - but the number of values to add up. So for count times, increase the start value by increment and take the sum of the values.

def sum_count(start, increment, count):
    total = 0
    
    for _ in range(count):
        total += start
        start += increment
   
    return total

Upvotes: 2

Rafa
Rafa

Reputation: 487

First you should note that the loop iterates 4 times not 5 times as you pass count as 5. Now if you want to have a loop to get 15 with 1,1,5 as parameters you can modify your code as:

def sum_count(start, increment, count):
    total = 1
    for i in range(start, count):

        i = start + increment
        total = total + i
        start = start + increment

    print("Total: ", total)
    return total

And if the total=0 then you get 14 instead of 15.

Upvotes: 0

John Gordon
John Gordon

Reputation: 33352

def sum_count(start, increment, count):
    total = 0
    for i in range(start, count):
        i = start + increment
        total += i
    else:
        return total

start and increment never change during the loop. They are always 1.

So you're adding (1 + 1) four times, for a total of eight.

I don't understand why you expected 15.

Upvotes: 0

Arpit Mittal
Arpit Mittal

Reputation: 95

You actually don't need a loop for that. It can be done in O(1) Time complexity with help of Math.

# Arithmetic Progression
def sum_count(start, increment, count):
    total = 2 * start + (count -1) * increment
    total = (n * total) // 2
    return total

Upvotes: 0

Related Questions