[英]Evaluating strings without eval()
在 Python 中,我可以在不使用可怕的 eval() 的情況下評估字符串(例如“math.sin(3)+max(5,3)”),並且最好使用十進制精度嗎? 注意:不是簡單的數學表達式如“3*2”,很容易。 x = math.sin(3)+max(5,3) 也會給出答案,但 x = "math.sin(3)+max(5,3)" 只會給你一串字符,然后浮點數("math.sin(3)+max(5,3)") 將給出 ValueError,無法將字符串轉換為浮點數:
因為 math.sin(3) 和 math.sin(3) 都分別給你浮點數和整數,所以你不需要使用 eval 來計算它們。 此外,您可以指定用戶定義的 function 來評估表達式
在這里,我演示了這樣的 function 用於評估具有初級數學運算的表達式,用於較小的表達式,如"a + b"
def evaluate(expression):
expression = expression.replace(" ", "")
expression = [j for j in expression]
num1 = float(expression[0])
i = expression[1]
num2 = float(expression[2])
if i == "+":
return num1+num2
elif i == "-":
return num1-num2
elif i == "*":
return num1*num2
elif i == "/":
return num1/num2
else:
return "Error in Expression Format"
print(evaluate("5 + 4"))
要評估更復雜的表達式, python ast package 可能就是您要查找的內容。 但是您仍然必須解析對“數學”package 的調用(或您希望在表達式中使用的任何其他函數)。 這篇文章提供了一個有趣的答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.