看到这题就想起来python有一个内置函数eval()可以直接计算出字符串内运算得到的值,但是现在出现一个问题,就是eval的运算逻辑里是+-运算优先于^(异或)运算的,而我们显然可以想到一个解决方法,那就是在异或运算的外部打上一对括号,这样就能正常使用eval函数来得到程序结果。
第一反应是python里有一个内置的库re,是Python内置的正则表达式模块,提供字符串匹配、查找和替换功能,用re可以方便地帮我们把字符串按+-分隔开来,同时保留了+-的相对位置
我们用enumerate函数来给分隔后的每个部分加上一个访问的索引,如果^出现在这一部分,就在两边加上括号
最后把以上的内容用join得到一个新字符串,使用eval函数就可以得到结果了
python代码如下:
import re
s = input()
parts = re.split(r'([+-])', s)
for i, part in enumerate(parts):
if '^' in part:
parts[i] = '(' + part + ')'
new_s = ''.join(parts)
print(eval(new_s))
然后刚敲完题解就发现自己想复杂了,实际上甚至用不到正则库,毕竟我们的需求实际上只是给涉及^的运算加上括号而已,于是来更新一下题解 实际上我们只需要把整个运算式外面套上一层括号,然后把“+”替换成“)+(”,把“-”替换成“)-(”就可以直接用eval函数进行运算了
更新完的python代码如下:
s = input()
s = '(' + s + ')'
s = s.replace('+', ')+(')
s = s.replace('-', ')-(')
print(eval(s))

京公网安备 11010502036488号