-1

Hi I'm trying to create a program that asks for numbers to make an average at the end and gives the average when a blank space is entered. My code looks like this:

number_of_numbers = 0
sum_of_numbers = 0
zero_number = 0
while number_of_numbers > -1:
    decimal_number = input('Input a number: ')
    if decimal_number == (''):
        decimal_number = zero_number
    else:
        decimal_number = float(decimal_number)
    number_of_numbers = number_of_numbers + 1
    sum_of_numbers = sum_of_numbers + decimal_number
    if decimal_number == '':
        break
print((sum_of_numbers + zero_number) / number_of_numbers)

But it keeps saying that the empty space is a string. I tried to get around this by assigning a blank space a new variable that counts as zero but for some reason I keep getting the error. It also gives me a division by 0 for some reason as well.

Any help would be greatly appreciated Thanks

  • Is this your actual code? Because when I run it, I don't get `ValueError`, I get `NameError: name 'zero_number' is not defined`. – Kevin Jul 26 '18 at 13:00
  • Sorry yes I fixed that problem by changing the condition of the while loop and fixed that issue. The new code is in the question now. Thank you for your help though – Allegedbark7 Jul 26 '18 at 13:08
  • Possible duplicate of [How do I trim whitespace?](https://stackoverflow.com/questions/1185524/how-do-i-trim-whitespace) –  Jul 26 '18 at 13:13
  • 1
    Your code will never hit the `break` statement because you reassign `decimal_number`. – c2huc2hu Jul 26 '18 at 13:15

3 Answers3

1

Place the break statement within your first if and use if not decimal_number: instead of checking for '' since empty strings are falsy, so they are considered false in a Boolean context.

Also check if number_of_numbers is 0 before trying to divide.

number_of_numbers = 0
sum_of_numbers = 0
zero_number = 0
while number_of_numbers > -1:
    decimal_number = input('Input a number: ')
    if not decimal_number:
        decimal_number = zero_number
        ## number_of_numbers = 1
        break
    else:
        decimal_number = float(decimal_number)
    number_of_numbers = number_of_numbers + 1
    sum_of_numbers = sum_of_numbers + decimal_number
if number_of_numbers == 0:
    print('Cannot Divide by zero!')
else:
    print((sum_of_numbers + zero_number) / number_of_numbers)
Jimenemex
  • 3,104
  • 3
  • 24
  • 56
0

You're trying to stop when you hit an empty space. That's ' ', not ''. You're testing for '', which isn't an empty space, it's just a string of length 0.

The better solution would be to strip all whitespace from the input, and then check if it's an empty string afterwards (e.g. there was nothing there except whitespace). You'd replace the line

if decimal_number == (''):

with

if decimal_number.strip() == (''):

The .strip() method simply removes whitespace from both the front and the back of a string.

Green Cloak Guy
  • 23,793
  • 4
  • 33
  • 53
0

I'm not sure if you want to increment number_of_numbers when you got blank space '' as input (you do this in your code). That's why I provide two versions.

1) Increment number_of_numbers on blank space:

number_of_numbers = 0
sum_of_numbers = 0
while True:
    decimal_number = input('Input a number: ')
    if decimal_number == '':
        number_of_numbers += 1
        break            
    try:
        sum_of_numbers += float(decimal_number)        
        number_of_numbers += 1
    except ValueError:
        print('Wrong Input. Try Again')
        continue
print(sum_of_numbers / number_of_numbers)

2) Don't increment number_of_numbers on blank space (need to check for zero in sum_of_numbers):

number_of_numbers = 0
sum_of_numbers = 0
while True:
    decimal_number = input('Input a number: ')
    if decimal_number == '':
        break        
    try:
        sum_of_numbers += float(decimal_number)        
        number_of_numbers += 1
    except ValueError:
        print('Wrong Input. Try Again')
        continue
if number_of_numbers == 0:
    print('No values to compute Average')
else:
    print(sum_of_numbers / number_of_numbers)

Hope it helps.

Sergei
  • 470
  • 4
  • 21