高级编程通关练习题 #2:解析数学表达式

以字符串形式给定一条有效的数学表达式,使用字符串解析的方式计算该表达式的结果。注意不能使用 eval 方法来得出结果。 表达式的规则如下: 表达式里可能出现的数学操作符为:加(+)、减(-)、乘(*)、除(/)可能的数值包括正负数和小数需要分析可能出现的多重小括号,譬如:(15 * (9.5 + 6)- -10)/ 4 输入样例: "(-7 * -(16 / 4)) * (9.5 - 4.5)" 输出样例: 140.0 算法思路: 方法一:可以采用数据结构stack来逐一处理每个字符如果字符是数字或小数点,则添加到到临时字符串变量A中。如果字符不是数字或者小数点,则把临时变量A中的字符串转换成数字,然后压栈。如果是字符是数学操作符加减乘除或左小括号,就把该字符压栈。如果字符是右小括号,那么需要从栈顶弹出数值和操作符保存到临时变量B,直到遇到左小括号为止,然后将字符串B做数学计算。数学计算的顺序如下:先计算除法,然后计算乘法,接下来计算减法,最后计算加法。字符串循环读取完毕后,检查stack栈内是否为空,如果不为空则需要将栈内内容重复上面第三项操作。方法二:使用正则表达式来解析字符串以左右小括号为标志先后解析需要计算的表达式提取数学操作符和数值后做相应处理

高级编程通关练习题 #1:匿名函数计算两圆相交面积

给定两个有相同半径R的圆中心点的位置A、B,计算这两个圆相交部分的面积。Python编码要求:使用匿名函数单行完成全部计算,总代码的字符长度不能超过128位。 譬如上面两个圆的半径都是 5,圆心的位置分别是(0,0)和(6,0),相交的绿色部分面积为22.365。计算绿色面积的思路:用圆心到两圆相交两点的扇形面积减去圆心到两圆相交两点三角形面积。如下图所示,黄色加绿色的扇形面积减去黄色三角形面积,就是两圆相交面积的1/2。 首先计算两圆中心之间的距离和相交点位置坐标的公式如下: 上面的 d 为两圆中心点之间的距离,x,y 为两圆相交点的平面坐标位置,算式中的 Ax、Ay为圆A的中心坐标,Bx、By为圆B的中心坐标,Ar为圆A的半径,Br为圆B的半径。然后我们需要计算两个扇形面积,以及两个三角形的面积: 注意上面的两个圆的半径 Ar 和Br 在这里是相等的,所以两个扇形面积 areas,1 和 areas,2是一样的,两个三角形面积 areat,1 和 areat,2 也是相等的。 上面的算式转换后就可以得到两圆相交面积(上图绿色部分)的计算公式如下: 根据上面的计算公式,在两圆半径相等,也就是 Ar 等于 Br 时,相应的Python代码如下: 上面的代码样例中,函数 intersected_area 的参数 a、b分别为两个圆的圆心坐标,r…