又是一个表达式解析求值的题.
又到了eval
魔法登场的时候了.
主要是一下几个方面要注意:
- 观察输入的表达式,发现需要在字母之间插入运算符,这里是
*
. - 定义一个
class
重载__mul__
方法,并实现乘法运算次数的计算逻辑. - 使用
exec
将对应的字母绑定到对应参数初始化的实例. - 最后
eval
一下就好了.
这样就免去了写解析的逻辑了.
class Mat:
def __init__(self,nr,nc):
self.n_mul=0
self.nr=nr
self.nc=nc
def __mul__(self,o):
ret=Mat (self.nr,o.nc)
ret.n_mul=self.nr*self.nc*o.nc+self.n_mul+o.n_mul
return ret
def __str__(self):
return str(self.n_mul)
n=int(input())
for i in range(n):
exec('%s=Mat(%d,%d)' %
((chr(i+ord('A')),)+tuple(map(int,input().strip().split())))
)
s=input()
es=[]
def isLeft(x:str):
return x.isalpha() or x==')'
def isRight(x:str):
return x.isalpha() or x=='('
for i in range(len(s)):
if i!=0 and isLeft(s[i-1]) and isRight(s[i]):
es.append('*')
es.append(s[i])
print(eval(''.join(es)))