assign operator to variable in python?

34,201

Solution 1

You can use the operator module and a dictionary:

import operator
ops = {
    "+": operator.add,
    "-": operator.sub,
    "*": operator.mul,
    "/": operator.div
}   
op_char = input('enter a operand')
op_func = ops[op_char]
result = op_func(a, b)

Solution 2

The operator module http://docs.python.org/library/operator.html exposes functions corresponding to practically all Python operators. You can map operator symbols to those functions to retrieve the proper function, then assign it to your op variable and compute op(a, b).

Solution 3

You'll need to compare the user's inputted string to your list of operands by hand. There is no analogue of int() here, since operators are keywords in the language and not values.

Once you've compared that input string to your list of operands and determined the operator that it corresponds to, you can use the Python standard library's operator module to calculate the result of applying the operator to your two operands.

Solution 4

I know this is a really old thread, but I believe at the time people didn't know about the eval function (Maybe it came with Python 3). So here's an updated answer to the question

a = input('enter a value')
b = input('enter a value') 
op = input('enter an operand')
expression = a + op + b # simple string concatenation
result = eval(expression)

If the input is not expected to be valid all the time ast.literal_eval can be used instead. It raises an exception if the input isn't a valid Python datatype, so the code won't be executed if it's not. Eg. if a, b and op are respectively 5, 10, + then result is 15

Share:
34,201
Abhilash Muthuraj
Author by

Abhilash Muthuraj

Updated on July 09, 2022

Comments

  • Abhilash Muthuraj
    Abhilash Muthuraj over 1 year

    Usual method of applying mathematics to variables is

    a * b
    

    Is it able to calculate and manipulate two operands like this?

    a = input('enter a value')
    b = input('enter a value') 
    op = raw_input('enter a operand')
    

    Then how do i connect op and two variables a and b?
    I know I can compare op to +, -, %, $ and then assign and compute....

    But can i do something like a op b, how to tell compiler that op is an operator?

  • joni jones
    joni jones almost 7 years
    For python 3.x the operator.truediv or operator.floordiv should be used instead docs.python.org/3/library/operator.html
  • SilentGuy
    SilentGuy about 3 years
    It should be expression = a + c + b . btw, using eval for user input is a bad idea. ast.literal_eval is better.
  • Eeshaan
    Eeshaan about 3 years
    @SilentGuy you're very much right! I've updated my answer
  • khelwood
    khelwood over 2 years
    eval wasn't new to Python 3. The reason people aren't suggesting it is because it is not safe to use on user input. It can execute any Python expression (with any side effects) that someone types in. Also, literal_eval only evaluates literals. It cannot evaluate an arithmetic expression like '5+10'.
  • Robert Houghton
    Robert Houghton almost 2 years
    additionally, using op_func in this way doesn't work. As the edit queue on this answer is full I've fixed these errors in an answer below (assuming this answer remains ACCEPTED w/ 76 upvotes...)
  • rici
    rici almost 2 years
    @RobertHoughton: what do you claim "doesn't work" with this answer? (I don't know what you mean by "the edit queue" either, but that's maybe just something I don't see.)
  • Karl Knechtel
    Karl Knechtel over 1 year
    ast.literal_eval cannot do arithmetic in general, or deal with other operators. It can only handle + and - because of a quirk in the Python grammar.