作爲賦值的一部分,我創建了一個函數,它接受一個字符串,它是一個等式。這裏是一個例子:48 + 6x6/3 = 6x8-9x2。計算函數採用等號的一邊並對其進行評估。我不太關心分解方程式。我相信我可以將它與s[:s.find("=")]
分開。創建一個以字符串形式給出的方程並計算它的函數
我的主要問題是計算功能本身。我會發布到目前爲止我所在的位置。註釋掉的部分是我試圖處理兩位數的東西,但我無法找出合理的方法來做到這一點。我想要一些幫助來思考這個問題。
我被告知不使用eval因爲等式做EVAL「2 + 3 * 5-11/2 * 88 + 153」將不容易因操作者的優先級 - 或缺乏。我的程序不應遵守正常的運營商優先規則。相反,它應該純粹從左到右進行評估。
93590046編輯此工程的單個數字。也許我們可以這樣來使用eval
是非常危險的多個數字
def compute(s):
result = int(s[0])
op = 0
a = 1
while a < len(s):
if s[a] == '/':
result /= int(s[a + 1])
elif s[a] == '+':
result += int(s[a + 1])
elif s[a] == '*':
result *= int(s[a + 1])
elif s[a] == '-':
result -= int(s[a + 1])
a += 1
return int(result)
對我仍然不清楚。 'eval'將簡單地計算輸入中的方程。如果輸入不清楚,就像在你的例子中一樣,編寫算法根本無濟於事。 – Dunno 2014-09-30 21:09:24
在這個問題上,評估是嚴格的從左到右。由於我強制從左到右,因此需要刪除eval。所以像'eval(str(eval(「2 + 3」))+「* 5」)這樣的東西對於更長的方程將變得非常討厭。 – darksoulsfan 2014-09-30 21:17:46
只要你堅持'*'乘以乘法,使用'eval'實際上是微不足道的。這聽起來更像是你需要編寫正確處理運算符優先級的代碼,以便你正確評估'6 + 3 * 9'爲'6 +(3 * 9)'而不是簡單地從左到右處理它(錯誤地)作爲'(6 + 3)* 9' – chepner 2014-09-30 21:25:51