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
广告