任意输入含加减乘除乘方开方的文本数学表达式,能检查语法错误,并计算结果
def str2float(s): def fn(x, y): return x * 10 + y def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] def fun(s): return {'+':add, '-':sub, '*':mul, '/':div}[s] def calc(s): num, funs, n = 0, [], 0 num = reduce(fn, map(char2num, s.replace('.', ''))) for c in s: if c in '+-*/': funs.append(fun(c)) n -= 1 return reduce(lambda x, y: y(x, nums[n]), funs, num) return calc(s)