Skip to content
Advertisement

Python — Confusing result when combining for loop with while loop

Hi I’m new to programming. I tried to use for loop and a nested while loop to calculate the sum of an arithmetic sequence on condition that the sum is no bigger than 100. I wrote the code below, but the output was 100 instead of the correct sum of the elements of the sequence (which should be 92).

# Arithmetic sequence
ele = 1
diff = 3
arithmetic_sequence = []
while ele < 60:
    arithmetic_sequence.append(ele)
    ele += diff

print(arithmetic_sequence)

#[output: [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58]]

# Sum of the arithmetic sequence -- the output is 100, very weird
sum_arithmetic = 0
for ele_f in arithmetic_sequence:
    while sum_arithmetic < 100:
        sum_arithmetic += ele_f

print(sum_arithmetic)

#[output: 100]

Could anyone help me check what went wrong in my code? Thank you in advance!

Advertisement

Answer

Putting a nested while loop in the for loop is not doing that you think it is.

What you want to do is:

  • Loop over the elements of the sequence, adding the current element at each iteration
  • If the sum is greater than or equal to 100, stop there and keep the sum under 100

However what you are actually doing is:

  • Looping over all the elements of the sequence
  • At each iteration, adding the current element until the sum is 100

So all your code does is repeatedly add 1, and never add any of the other elements. (Because the sum is already 100, from all the 1s that you added.)

What you want is an if statement inside the for loop to check if it should continue:

sum_arithmetic = 0
for ele_f in arithmetic_sequence:
    if sum_arithmetic + ele_f >= 100:
        break
    sum_arithmetic += ele_f

In this code, the break will end the for loop early if the if statement ever runs.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement