Home > Software design >  Unsupported operand type(s) for 'X': 'NoneType' and 'NoneType'
Unsupported operand type(s) for 'X': 'NoneType' and 'NoneType'

Time:11-05

I'm currently working on a code and I'm getting this error. Please explain what am I doing wrong in a simple way...help!

s=int(input('input random seed:'))
a=print('The first number is',format(random(50,56)))
b=print('The second number is',format(random(50,56)))
if (a*b)==c:
    print('Your answer is correct.')

CodePudding user response:

Like the first comment says, on lines 4,5 and 6 of your code you're trying to assign the value of print to your variable, but the built-in print does not return a value. What you want is:

a = random.randint(1,9)

then:

print('The first number is',format(a))

so that your code will do what your trying to achieve. Note that after you get the input from command line for c, you'll have to convert it to int or whatever you want to use, because when you read raw input, it's read as string.

if (a*b)==int(c):

CodePudding user response:

The problem is with these lines.

a = print('The first number is',format(random.randint(1,9)))
b = print('The second number is',format(random.randint(1,9)))

print function is used to print the values to the stdout and it does not return any value. A function in python that has no return value will implicitly return None, which means during the runtime the values of a and b are

a = None
b = None

So your if will evaluate to

if (None * None) == <YOUR_C_VALUE>:

Hence the error,

TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'

CodePudding user response:

In python print statement returns none so you cannot assign values there. You also don't require to conver the numbers into strings.

Try this:

import random
s=int(input('input random seed:'))
random.seed(s)
a= random.randint(1,9)
b= random.randint(1,9)
print(f'The first number is {a}') # f-string
print(f'The second number is {b}') # f-string

c=input('What is the product of two numbers? ')
print('Your answer is correct.') if (a*b)==int(c) else print('Your answer is wrong.')

CodePudding user response:

Problem is you are assigning with print statement that will return None in python

a=print('The first number is',format(random.randint(1,9)))

try this:

import random
s=int(input('input random seed:'))
random.seed(s)
a=format(random.randint(1,9))
b=format(random.randint(1,9))
print('The first number is',a)
print('The second number is',b)
c=input('What is the product of two numbers?')
if (int(a)*int(b))==int(c):
    print('Your answer is correct.')
else:
    print('Your answer is wrong.')
  • Related