python3 解一元一次方程

Copyright © 2018 Joyce_BY
All rights reserved.
Contact by [email protected]


题目

输入一串字符串表示一个一元一次方程,计算结果。
eg:10x-2x-8=x+7+4x

思路

1、将等号右边的减到左边,即替换=为’-(’,最后表达式加上’)’;
2、此题给出的x和数字之间没有乘号,我们现在所有x前面加上*号;
3、考虑到系数为1、-1和左括号后的x前不应该有乘号,我们将这些地方的乘号去除;
4、用python的eval函数可以生成表达式,将变量=1j带入得到结果,此时会得到real+imag j这样的一个结果,可以发现如果把j替换为x,令这个式子为0就是我们想要的最简的方程,结果x=j=(-real)/imag。

CODE
def solve(eq,var='x'):
  eq1 = eq.replace("=","-(")+")"
  eq1 = eq1.replace("x","*x")
  eq1 = eq1.replace("+*x","+x")
  eq1 = eq1.replace("-*x","-x")
  eq1 = eq1.replace("(*x","(x")
  print(eq1)
  c = eval(eq1,{var:1j})
  return -c.real/c.imag

test = '10x-2x-8=x+7+4x'
print(solve(test))

你可能感兴趣的:(Algorithm)