所以我試圖找出如何檢測操作數和操作數的數學表達式如何找到一個字符串操作數和操作
例:1+2*9/2
我試圖分開操作數和操作使用函數轉換成自己的形式,因爲我們必須檢查必須完成多少操作並且按照正確的順序(PEDMAS)。
我已經採取了方程式,並且已經取出了所有空間,現在我必須找到方程中操作數和操作的數量,然後使用返回來查找用戶給定數學表達式的答案。
任何提示?
所以我試圖找出如何檢測操作數和操作數的數學表達式如何找到一個字符串操作數和操作
例:1+2*9/2
我試圖分開操作數和操作使用函數轉換成自己的形式,因爲我們必須檢查必須完成多少操作並且按照正確的順序(PEDMAS)。
我已經採取了方程式,並且已經取出了所有空間,現在我必須找到方程中操作數和操作的數量,然後使用返回來查找用戶給定數學表達式的答案。
任何提示?
如果表達式可以爲您的樣品並非如此簡單,你可以使用RPN - reverse polish notation
如果你的表達是非常簡單(只有基地OPS和值小於10),你只需要數比你可以使用像這個我猜:
ops = '+-*/'
operationsCount= sum(expr.count(op) for op in ops)
operandsCount = len(expr) - operationsCount
或者您可以使用此:
def get_cnt(expr):
ops = '+-*/'
res = [expr]
for op in ops:
tmp = []
for x in expr:
tmp.extend(x.split(op))
res = tmp[:]
return len(res), sum(expr.count(op) for op in ops)
現在你有符和操作數的數量 - 這是相當Ë asily在ops/opd上正確地分割行並計算表達式。
import re
exp = 1+2*9/2
ops = re.findall(r'[\+\-*/]', exp)
print len(ops)
我不知道爲什麼你要找到操作數 的數量,我認爲
re.findall(r'[0-9]+|[\+\-*/()]', exp)
更好。
所以我認爲正則表達式可以幫助您
操作數的數量是這樣我可以區分它是否只有一個操作數(例如1 * 5)與一個更復雜的表達式(1 + 2 * 9/2) – Jen
好的,但是如果你想構建一個計算器,我認爲不需要區分1 * 5和1 + 2 * 9/2。你可以使用自己構建的兩個棧,或者圖書館的numpy可以幫助你 –
@Kaifeng Jin:仔細看看你的!這樣它不會工作! ;-) –
您必須將其解析爲抽象語法樹(AST)才能確定。 –
我建議你先從中綴到後綴轉換。然後,您可以使用堆棧和運算符優先級評估表達式。 顯然這不會給你類型安全(尺寸分析),但可以幫助你前進。 請參閱:http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm – Sarang
謝謝,這似乎有助於我更多地瞭解操作順序 – Jen