Python程式:無需內建函式計算數學表示式


假設我們有一個字串,它表示一個包含 (+, -, *, /) 的數學表示式。這裡 / 表示整數除法,我們需要計算並返回結果,而無需使用任何內建函式。

例如,如果輸入為 s = "2+3*5/7",則輸出為 4,因為 2 + ((3 * 5) / 7) = 4

為了解決這個問題,我們將遵循以下步驟:

  • s := 反轉給定的字串
  • 定義一個函式 get_value()。
  • sign := 1
  • 如果 s 不為空且 s 的最後一個元素與 "-" 相同,則
    • 從 s 中刪除最後一個元素
    • sign := -1
  • value := 0
  • 當 s 不為空且 s 的最後一個元素是數字時,執行以下操作:
    • value := value * 10
    • value := value + s 中最後一個元素的數值,並刪除 s 的最後一個元素
  • 返回 sign * value
  • 定義一個函式 get_term()
  • term := get_value()
  • 當 s 不為空且 s 的最後一個元素是 * 或 / 時,執行以下操作:
    • op := s 的最後一個元素,並從 s 中刪除最後一個元素
    • value := get_value()
    • 如果 op 與 "*" 相同,則
      • term := term * value
    • 否則,
      • term := (1.0 * term / value) 的向下取整
  • 返回 term
  • 在主方法中執行以下操作:
  • ans := get_term()
  • 當 s 不為空時,執行以下操作:
    • op := s 的最後一個元素,並從 s 中刪除它
    • term := get_term()
    • 如果 op 與 "+" 相同,則
      • ans := ans + term
    • 否則,
      • ans := ans - term
  • 返回 ans

讓我們來看下面的實現,以更好地理解:

示例

線上演示

from math import floor, trunc
class Solution:
   def solve(self, s):
      s = list(s[::-1])

      def get_value():
         sign = 1
         if s and s[-1] == "-":
            s.pop()
            sign = -1
         value = 0
         while s and s[-1].isdigit():
            value *= 10
            value += int(s.pop())
         return sign * value

      def get_term():
         term = get_value()
         while s and s[-1] in "*/":
            op = s.pop()
            value = get_value()
            if op == "*":
               term *= value
            else:
               term = floor(1.0 * term / value)
         return term

      ans = get_term()
      while s:
         op, term = s.pop(), get_term()
         if op == "+":
            ans += term
         else:
            ans -= term
      return ans

ob = Solution()
s = "2+3*5/7"
print(ob.solve(s))

輸入

"2+3*5/7"

輸出

4

更新於: 2020-12-03

2K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.