在Python中编写一个计算数学表达式的程序,不使用内置函数

在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)的floor值
  • 返回term
  • 从主方法中执行以下操作:
  • ans:get_term()
  • 如果s不为空,则
    • op:s的最后一个元素,并从s中删除它
    • term:get_term()
    • 如果op与+相同,则
      • ans:ans+term
    • 否则,
      • ans:ans-term
  • 返回ans

让我们看以下实现以更好地理解-

更多Python相关文章,请阅读:Python 教程

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程