题目:基本计算器 II
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 :
输入: "3+2*2",输出: 7
输入: " 3/2 ",输出: 1
输入: " 3+5 / 2 ",输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
-------------------------------------------------------------------------------
解法1:先用 eval() 处理看下结果,当然题目不允许
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
eval() 方法的语法: eval(expression[, globals[, locals]])
参数:
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
# 题目要求除法只保留整数部分,所以将除号“/”调整为整除符“//”
return eval(s.replace("/", "//"))
解法2#:把所有加减乘除运算转化“加法”运算
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
# 遇到加减,先保存元素结果;遇到乘除,则直接计算出结果
stack = [] # 用于存储每一步的运算结果
opera = '+' # 设定初始运算为加法
num = 0
s += '+'
for str in s:
if str == ' ':
continue
# 遇到数字后,继续看后面是否还是如此
if str in '0123456789':
# 这里num*10操作的目的,是为了处理除个位数之外多位数,eg, 12, 437
num = num*10 + int(str)
continue
if opera == '+':
stack.append(num)
elif opera == '-':
stack.append(-num)
elif opera == '*':
# 遇到*,直接取出上一步运算的结果stack[-1]跟num相乘
stack[-1] *= num
elif opera == '/':
# 遇到/,直接取出上一步运算的结果stack[-1]跟num做整除处理
stack[-1] = stack[-1] // num
opera = str
num = 0
return sum(stack)
参考:
https://www.runoob.com/python/python-func-eval.html
https://blog.csdn.net/weixin_42077402/article/details/92637562
https://blog.csdn.net/weixin_40349531/article/details/96440734