Search code examples
pythonnested-loopspython-3.4

Python: (Count positive and negative numbers and compute the average of numbers)


Problem statement: Write a program that reads an unspecified number of integers, determines how many positive and negative values have been read, and computes the total and average of the input values (not counting zeros). Your program ends with the input 0. Display the average as a floating-point number.

Sample output (ignore bullets, didn't know how to format text into console output):

  • Enter an integer, the input ends if it is 0: 1
  • Enter an integer, the input ends if it is 0: 2
  • Enter an integer, the input ends if it is 0: -1
  • Enter an integer, the input ends if it is 0: 3
  • Enter an integer, the input ends if it is 0: 0
  • You didn't enter any number
  • The number of positives is 3
  • The number of negatives is 1
  • The total is 5
  • The average is 1.25

Attempted solution:

def main():
    i = int( input ("Enter an interger, the input ends if it is 0: "))
    count_pos = 0
    count_neg = 0
    total = 0
    if (i != 0):
        while (i != 0):
            if (i > 0):
                count_pos += 1
            elif (i < 0):
                count_neg += 1
            total += i
            i = int( input ("Enter an interger, the input ends if it is 0: "))
            count = count_pos + count_neg
            average = total / count

        print ("The number of positives is", count_pos)
        print ("The number of negatives is", count_neg)
        print ("The total is", total)
        print ("The average is", float(average))
    else:
        print ("You didn't enter any number.")

main()

Solution

  • You do not need this line (which is why your error is happening):

    main(i)
    

    To continuously get user input, use an infinite loop, and test for the condition to break the loop.

    while (true):
        i = input("Enter an integer (0 to stop): ")
        if(i == 0)
            break
        sum1 += i
        if (i > 0):
          count_pos += 1
        elif (i < 0):
          count_neg += 1
    

    Then calculate and return average.