2012-11-06 18 views
0

我正在創建一個計算器程序,我差不多完成了。我遇到的最後一個問題是處理第二個操作員。Python:處理計算器中的第二個操作符

該程序採用最多兩個運算符(例如2/3 * 4)的表達式。它將它分解爲2,/,3,*,4,並使用許多不同的函數來解決表達式。現在我下面介紹的特定部分是解決第一個表達式的功能,(我已經解決了它的其餘部分的話):

def firstOperationWithOneOperator(numEx1,numEx2,opEx1): 

    if opEx1=="*": 
     solution1=numEx1*numEx2 
     print(solution1) 
     return solution1 
    elif opEx1=="/": 
     solution1=numEx1/numEx2 
     print(solution1) 
     return solution1 
    elif opEx1=="+": 
     solution1=numEx1+numEx2 
     print(solution1) 
     return solution1 
    elif opEx1=="-": 
     solution1=numEx1-numEx2 
     print(solution1) 
     return solution1 

所以我現在有一個工作的功能,解決一些與一個運營商(例如.2/3),如上所見。我需要一些幫助,找出如何處理第二個操作員,同時保持操作順序。那麼如何解決2 + 3 * 5這樣的表達式呢?如果有的話,我將繼續更新我的OP,並提供限制。如果有什麼不清楚的地方,請詢問我將編輯OP。

編輯:

def fowoo(nums1,fowoo(nums2,nums3,ops2),ops1): 
    print(fOWOO(nums1, fOWOO(nums2, nums3, ops2), ops1)) 
+2

不要以爲你靠近。如果在代碼中有2個或更多的運算符,則需要考慮運算符優先級。嘗試查看反向波蘭符號來解決此任務(http://en.wikipedia.org/wiki/Reverse_Polish_notation) –

+0

如何在不實施RPN的情況下執行此操作? – SeesSound

+0

你是否必須自己完成所有這些工作(比如評估)還是隻能使用'eval()'讓python爲你完成工作? – Tim

回答

1
fOWOO = firstOperationWithOneOperator 

你需要之間做出選擇:基於對op1op2優先

fOWOO(num1, fOWOO(num2, num3, op2), op1) # num1 `op1` (num2 `op2` num3) 

fOWOO(fOWOO(num1, num2, op1), num3, op2) # (num1 `op1` num2) `op2` num3 

所以:

  • 2/3 + 4 - >fOWOO(fOWOO(2, 3, '/'), 4, '+')
  • 2 + 3/4 - >fOWOO(2, fOWOO(3, 4, '/'), '+')
+0

對不起,我應該提到我是編程新手。這兩種情況之間究竟發生了什麼?我從來沒有見過一個函數被分配到一個變量中。這是常見的,還是允許的,還是你想證明一個觀點? – SeesSound

+0

@ user1716168:你掙扎着哪一點?你明白這些評論意味着什麼嗎? – Eric

+0

例如:什麼是'3 * 0 + 1'? – katrielalex