[英]Python : Evaluate an expression without using eval() function
I'm looking forward to make a calculator to calculate an input such as 2*((25+2)/2)*(3**5) using python, without using eval function.我期待制作一个计算器来计算输入,例如 2*((25+2)/2)*(3**5) 使用 python,而不使用 eval 函数。 is there any way?有什么办法吗?
You can tokenize and then evaluate the infix expression using stack.您可以标记化然后使用堆栈评估中缀表达式。 Here is how I would do it这是我会怎么做
def tokenize(text):
text= text.replace("**", "^")
text = '(' + text + ')'
token = []
for char in text:
if char in "0123456789":
token.append(char)
elif char in " +-*/()^":
if token:
yield int("".join(token))
token = []
if char != " ":
yield char
else:
raise ValueError(f"unknown character {char!r}")
if token:
yield int("".join(token))
def evaluate_infix(tokens):
stack = []
for token in tokens:
if token == ")":
lb, lhs, op, rhs = stack[-4:]
del stack[-4:]
if lb != "(":
raise ValueError("three tokens must be between parens")
if op == '-':
token = lhs - rhs
elif op == '+':
token = lhs + rhs
elif op == '*':
token = lhs * rhs
elif op == '/':
token = lhs / rhs
elif op == '^':
token = lhs ** rhs
stack.append(token)
return stack[-1]
exprs = # YOUR STRING GOES HERE
print(evaluate_infix(tokenize(exprs)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.