[PYTHON] 문자열을 연산자로 변환합니다.
PYTHON문자열을 연산자로 변환합니다.
"+"와 같은 문자열을 연산자에 더하기로 변환하려면 어떻게해야합니까? 감사!
해결법
-
==============================
1.찾아보기 테이블 사용 :
찾아보기 테이블 사용 :
import operator ops = { "+": operator.add, "-": operator.sub } # etc. print ops["+"](1,1) # prints 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.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.모든 연산자에 해당하는 마법 방법이 있습니다.
모든 연산자에 해당하는 마법 방법이 있습니다.
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.Amnon이 제안한 대답은 내 의견으로는 올바른 것입니다.
Amnon이 제안한 대답은 내 의견으로는 올바른 것입니다.
그러나 수학 파서에 대한이 기사에서도 관심을 가질 수 있습니다. http://effbot.org/zone/simple-top-down-parsing.htm
-
==============================
6.다음과 같이 eval을 사용할 수 있습니다.
다음과 같이 eval을 사용할 수 있습니다.
eval("+")
from https://stackoverflow.com/questions/1740726/turn-string-into-operator by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 문자열 목록의 모든 요소 제거 (0) | 2018.10.14 |
---|---|
[PYTHON] 판다에서 인형으로 범주 형 변수 재구성 (0) | 2018.10.14 |
[PYTHON] numpy 배열을 위해 해시 할 수있는 가장 효율적인 속성 (0) | 2018.10.14 |
[PYTHON] 파이썬으로 셀렌 웹 드라이버로 텍스트를 얻는 법 (0) | 2018.10.14 |
[PYTHON] 파이썬에서 통화 문자열을 부동 소수점 숫자로 변환하려면 어떻게해야합니까? (0) | 2018.10.14 |