【洛谷1022】计算器的改良

cdcq

2018-02-24 21:54:20

Personal

python有毒……慎用 原题: ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。 你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。 神奇的python黑科技,三行解一元一次方程: ```python def solve(eq,var='x'): eq1 = eq.replace("=","-(")+")" c = eval(eq1,{var:1j}) return -c.real/c.imag ``` eval太强了 因为题目限制,还需要进行其他操作,记录python操作: 强制给a保留三位小数,格式化:"%.3f" % a (使用round函数会自动省略多余的0 python的str不可修改,使用replace函数 注意eval的时候要进行运算符处理(^换成\*\*,3a换成3\*a之类的 代码: ```python def solve(eq,var='x'): eq1 = eq.replace("=","-(")+")" c = eval(eq1,{var:1j}) return -c.real/c.imag if __name__ == "__main__": s = raw_input() b = 'x' for i in range(len(s)): if s[i] >= 'a' and s[i] <= 'z': b = s[i] break s = s.replace(b, 'x') for i in range(10): s = s.replace(str(i)+"x",str(i)+"*x") print b + '=' + str("%.3f" % round(solve(s), 3)) ```