Search code examples
pythonpython-3.xoperatorseval

eval() with a variable operator


I'm Using Python 3.4. I receive the error:

Traceback (most recent call last):
  File "H:/GCSE's/Computing/Assesment/1/School Grading Script.py", line 44, in <module>
    if answer== eval(num1<currentop>num2):
TypeError: unorderable types: int() < str()

when trying to execute this code

operator=["+","-","*"]
num1=random.randint(0,10)
num2=random.randint(0,10)
currentop=random.choice(operator)

answer = input("What is " + str(num1) + str(currentop) + str(num2) + "?\n")
if answer== eval(num1<currentop>num2):
    print("correct")
else:
    print(incorrect)

What I want to do is to check the answer against the randomly generated variables


Solution

  • Using eval is really bad practice, and should be avoided. For what you are trying to do, you should be making use of operator.

    Change your data structure to use a dictionary to make it easier on you to perform your operations. Something like this:

    import operator
    
    operators = {
        "+": operator.add
    } 
    
    num1 = 4
    num2 = 5
    
    res = operators.get("+")(num1, num2)
    

    Output of res:

    9
    

    To apply your random implementation in to this, you make use of the dictionaries keys() to do a random.choice on that:

    random.choice(list(operators.keys()))
    

    Simple example applying random:

    import operator
    import random
    
    operators = {
        "+": operator.add,
        "-": operator.sub,
        "*": operator.mul
    }
    
    num1 = 4
    num2 = 5
    
    res = operators.get(random.choice(list(operators.keys())))(num1, num2)