How to only count valid inputs

Question:

I have a function that is supposed to take input, calculate the average and total as well as record count.

The bug in the code is that:

Even though I have added a try and except to catch errors, these errors are also being added to the count. How do I only count the integer inputs without making the "Invalid Input" part of the count?

Code snippet

count = 0
total = 0
avg = 0
#wrap entire function in while loop
while True:
    #prompt user for input
    line = input('Enter a number: ')
    try:
        if line == 'done':
            break
        print(line)
        #function formulars for total, count, avg
        count = int(count) + 1
        total = total + int(line)
        avg = total / count
    except:
        print('Invalid input')
        continue
#print function results
print(total, count, avg)

With the above code the output for print(total, count, avg) for input i.e 5,4,7, bla bla car, done :

  • will be 16, 4, 5.33333333

  • expected output 16, 3, 5.33333333

Asked By: sandramsc

||

Answers:

When this line: total = total + int(line) throws an error,

The previous line count = int(count) + 1 has already ben executed, which incremented the count.

Swapping these two line should solve the problem.

Answered By: Luuk

Add line = int(line) before count = int(count) + 1 so the exception will be catched before count evaluated, or swap it with total:

count = 0
total = 0
avg = 0
while (line := input('Enter a number: ')) != 'done':
    try:
        # line = int(line)
        total += int(line)
        count += 1
        avg = total / count
    except ValueError:
        print('Invalid input')

print(total, count, avg)

# Enter a number: 5
# Enter a number: 4
# Enter a number: r
# Invalid input
# Enter a number: 7
# Enter a number: done
# 16 3 5.333333333333333
Answered By: Arifa Chan

The reason why you have another count is because you added a count because you put ‘done’, which doesn’t raise an error, so you can just do (before the print statement):

... # code before

count -= 1

print(total, count, avg)
Answered By: Pythoneer
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.