-2

In this particular code I have to find the sum of even and odd number given the by user in stream, as I can observe everything is ok in the code but still not able to run it and getting ValueError: invalid literal for int() with base 10:

sum_of_even_number=0
sum_of_odd_number=0

while True:  # We have created a infinite loop
    user_input=input()
    if user_input=="\n\n":
        break
    num=int(user_input)
    if num % 2==0:
        sum_of_even_number+=num
    else:
        sum_of_odd_number+=num

print("sum_of_even_number :  ",sum_of_even_number)
print("sum_of_odd_number :  ",sum_of_odd_number)
martineau
  • 119,623
  • 25
  • 170
  • 301
PRERNA
  • 7
  • 1
    I don't think `user_input=="\n\n"` can ever be true. If the user doesn't enter a number and just presses Enter, the input value will be a blank string, not two carriage returns. – John Gordon Jul 02 '22 at 17:41
  • What input is causing the error? If it was nothing, then that could cause the `ValueError`. i.e. `int("")`. Note that `input()` will never return newlines, so testing for that is a waste of time. – martineau Jul 02 '22 at 17:41
  • Welcome to StackOverflow. Notice the number next to your name and in your profile. That is reputation points. You build your reputation in many ways. Building your reputation and getting people to answer questions has a lot to do with how you interact with the community. Community members can click on your user name and review how you interact with the community. – Carl_M Jul 10 '22 at 22:47

3 Answers3

0

You're getting a Value Error because you are trying to parse an empty string. If the user presses the enter key, then it gets formatted as a string with no text. So instead of checking to see if your text contains \n, check to see if its an empty string or not, like this:

sum_of_even_number=0
sum_of_odd_number=0

while True:  # We have created a infinite loop
    user_input=input()
    if user_input == "":
        break
    num = int(user_input)
    if num % 2 == 0:
        sum_of_even_number += num
    else:
        sum_of_odd_number+=num
        
print("sum_of_even_number :  ",sum_of_even_number)
print("sum_of_odd_number :  ",sum_of_odd_number)

For more help: ValueError: invalid literal for int() with base 10: ''

miistyyy
  • 30
  • 5
0

the use of the "isdigit()" method is to prevent value error(if the user enters an alphanumeric value that can not be converted to an int or a float). Although this only works for positive whole numbers due to the "isdigit()" method. I also added a quit option to prevent the loop from being infinite.

sum_odd = 0
sum_even = 0
stat = True #looping condition
while stat:
    num = input("Enter a number or enter q to quit: ")
    if num.isdigit() == True: #to verify if the string is a positive int 
        if int(num)%2 ==0: #checking if the number is even
            sum_even+=int(num)
            print("sum of even number = "+str(sum_even))
        elif int(num)%2 ==1: #checking if the number is odd
            sum_odd+=int(num)
            print("sum of odd number = "+str(sum_odd))
    elif num.lower() == "q": #this breaks the loop 
        stat = False #change of looping condition
print("done") #indicating end of code

sample output:

Enter a number or enter q to quit: 10
sum of even number = 10
Enter a number or enter q to quit: 13
sum of odd number = 13
Enter a number or enter q to quit: 12
sum of even number = 22
Enter a number or enter q to quit: 15
sum of odd number = 28
Enter a number or enter q to quit: 16
sum of even number = 38
Enter a number or enter q to quit: 8
sum of even number = 46
Enter a number or enter q to quit: 9
sum of odd number = 37
Enter a number or enter q to quit: q
done
-1

Edit: Fixing indentation.

Without Walrus operator:

Before: Using same code as your. I put print inside if/else condition block Use the f-string format as well.

sum_of_even_number=0
sum_of_odd_number=0

while True:  # We have created a infinite loop
    user_input=input('Enter number:')
    if user_input=="\n\n":
        break
    num=int(user_input)
    if num % 2==0:
        sum_of_even_number+=num
        print(f"sum_of_even_number : {sum_of_even_number}")
    else:
        sum_of_odd_number+=num
        print(f"sum_of_odd_number :  {sum_of_odd_number}")


 

With Python 3.8 Walrus Operator:

sum_of_even_number=0
sum_of_odd_number=0

while (user_input := input('Enter number:')):  # We have created a infinite loop
     
    num = int(user_input)
    if num % 2 == 0:
        sum_of_even_number = num
        print(f"sum_of_even_number : {sum_of_even_number}")
    else:
        sum_of_odd_number = num
        print(f"sum_of_odd_number :  {sum_of_odd_number}")

Both output are same.

Enter number:6
sum_of_even_number : 6
Enter number:5
sum_of_odd_number :  5
Enter number:8
sum_of_even_number : 8
Enter number:100
sum_of_even_number : 100
Enter number:105
sum_of_odd_number :  105
Enter number:
toyota Supra
  • 3,181
  • 4
  • 15
  • 19