복붙노트

[PYTHON] 문자열을 연산자로 변환합니다.

PYTHON

문자열을 연산자로 변환합니다.

"+"와 같은 문자열을 연산자에 더하기로 변환하려면 어떻게해야합니까? 감사!

해결법

  1. ==============================

    1.찾아보기 테이블 사용 :

    찾아보기 테이블 사용 :

    import operator
    ops = { "+": operator.add, "-": operator.sub } # etc.
    
    print ops["+"](1,1) # prints 2 
    
  2. ==============================

    2.

    import operator
    
    def get_operator_fn(op):
        return {
            '+' : operator.add,
            '-' : operator.sub,
            '*' : operator.mul,
            '/' : operator.div,
            '%' : operator.mod,
            '^' : operator.xor,
            }[op]
    
    def eval_binary_expr(op1, oper, op2):
        op1,op2 = int(op1), int(op2)
        return get_operator_fn(oper)(op1, op2)
    
    print eval_binary_expr(*("1 + 3".split()))
    print eval_binary_expr(*("1 * 3".split()))
    print eval_binary_expr(*("1 % 3".split()))
    print eval_binary_expr(*("1 ^ 3".split()))
    
  3. ==============================

    3.eval ()을 사용해 볼 수도 있지만, 문자열이 나오지 않으면 위험합니다. 아니면 사전을 만드는 것을 고려해보십시오.

    eval ()을 사용해 볼 수도 있지만, 문자열이 나오지 않으면 위험합니다. 아니면 사전을 만드는 것을 고려해보십시오.

    ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}

    등등 ... 그리고 나서 ops [ '+'] (1,2)를 호출하거나, 사용자 입력을 위해 :

    if ops.haskey(userop):
        val = ops[userop](userx,usery)
    else:
        pass #something about wrong operator
  4. ==============================

    4.모든 연산자에 해당하는 마법 방법이 있습니다.

    모든 연산자에 해당하는 마법 방법이 있습니다.

    OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}
    
    def apply_operator(a, op, b):
    
        method = '__%s__' % OPERATORS[op]
        return getattr(b, method)(a)
    
    apply_operator(1, '+', 2)
    
  5. ==============================

    5.Amnon이 제안한 대답은 내 의견으로는 올바른 것입니다.

    Amnon이 제안한 대답은 내 의견으로는 올바른 것입니다.

    그러나 수학 파서에 대한이 기사에서도 관심을 가질 수 있습니다. http://effbot.org/zone/simple-top-down-parsing.htm

  6. ==============================

    6.다음과 같이 eval을 사용할 수 있습니다.

    다음과 같이 eval을 사용할 수 있습니다.

    eval("+")
    
  7. from https://stackoverflow.com/questions/1740726/turn-string-into-operator by cc-by-sa and MIT license