I'm trying to make a script which asks a maths equation, then the user has to type in what they think answer is and then python would output the answer
However, for some reason python doesn't like raw_input() in correlation with the eval statement.
For example, the code is:
print "What's 5+4"
a = raw_input()
print eval('5+4')
If I was to type in 10 into var 'a', I'd get this error message.
Traceback (most recent call last):
File "/tmp/W1SVH/Math.py", line 3, in <module>
print eval('5 +4')
File "<string>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
But if I were to replace raw_input with the number '5', the script looks like this.
print "What's 5+4"
a = 9
print eval('5+4')
Then it would return 9, hence 5+4=9.
Is there anyway to fix this, so that I can use raw_input() to prompt the user?
The object returned by
raw_input()
is a string. You need to convert it to an integer before performing arithmetic with it. You can do this with theint
built-in function.EDIT:
As ShadowRanger observes, using
eval
is redundant oncea
is an integer, so you can just let Python evaluate the result:This is not only easier to read, but safer. Using
eval
on input received from a user is dangerous and should be avoided. A malicious user could enter something that, when evaluated, could cause data loss, or use up your computer's resources.try this
Few recommendation: