![](/img/trans.png)
[英]How to evaluate a user input of a string as a math expression without using eval()?
[英]Python : Evaluate an expression without using eval() function
我期待制作一個計算器來計算輸入,例如 2*((25+2)/2)*(3**5) 使用 python,而不使用 eval 函數。 有什么辦法嗎?
您可以標記化然后使用堆棧評估中綴表達式。 這是我會怎么做
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.