在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