【洛谷1022】计算器的改良

2018-02-24 21:54:20


python有毒……慎用 原题: ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

神奇的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之类的

代码:

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))