看过我专栏的朋友都知道,我写程序一般用Python,我们就直接言归正传了。
在了解一元一次方程求根软件制作之前,我们有必要了解一下一元一次方程的解法。一元一次方程指的是有一个未知数且未知数最高指数为1的方程,一般解法是先去分母,再去括号,然后移项、化简,变成ax+b=0(a≠0)的形式,得到x=-b/a。
我们写程序的算法如下:第一步,实现计算机自动去分母;第二步,实现自动去括号;第三步,实现移项和化简,变成ax+b=0(a≠0)的形式;第五步,运算成功后制作优质的GUI或者Web界面,提高实用性。
这几步当中最简单也是最重要的一步就是第四步。
我们可以看到,这里需要进行很多对字符串的运算,那么第一步,当然是让用户输入方程:
equation = input("请输入一元一次方程,目前支持ax+b=0(a≠0)形式的方程:")
接下来,我们需要一句输出,内容是告诉用户功能限制:
equation = input("请输入一元一次方程,目前支持ax+b=0(a≠0)形式的方程:")
print("备注:本工具暂时仅支持ax+b=0(a≠0)的形式,其他形式可能报错或者计算错误。")
然后,获取x和=的索引,因为方程的已知数a和b的值是不限定的,找起来很麻烦,我们可以通过确定的x和=的索引,获取a和b的索引。获取x和=的索引的代码如下:
x = int(equation.index('x'))
equat = int(equation.index('='))
这里需要注意,我们现在完全可以计算a和b的结果,但是提取a和b的结果之后,我们一般将未知数系数省略不写,计算机没有这个功能。也就是说,当我们想要求解x+3=0这类方程的时候,必须输入1x+3=0,如果直接输入x+3=0,会报错。
这也是有办法避免的。
如果x在开头,也就是x的索引值为0,那么默认x为1,其他情况根据x的索引值判断。
if equation.index('x') == 0:
a = 1
else:
a = float(equation[0 : x])
那么b呢?如果不输入b,给出形如5x=0的方程,计算机依旧会报错。然而b没有确定的索引值。其实这也很简单,如果=和x的索引之间的差值为1,也就是x紧挨着=,那么b默认为0。
if equat - x == 1:
b = 0
else:
b = float(equation[x + 1 : equat])
最后计算结果。
conclusion = -(b / a)
将结果末尾的小数点.0去掉,这部分代码详见我专栏的2.2。
if int(conclusion) == conclusion:
conclusion = int(conclusion)
print('x=' + str(conclusion))
来看一下完整代码:
equation = input("请输入一元一次方程,目前支持ax+b=0(a≠0)形式的方程:")
print("备注:本工具暂时仅支持ax+b=0(a≠0)的形式,其他形式可能报错或者计算错误。")
x = int(equation.index('x'))
equat = int(equation.index('='))
if equation.index('x') == 0:
a = 1
else:
a = float(equation[0 : x])
if equat - x == 1:
b = 0
else:
b = float(equation[x + 1 : equat])
conclusion = -(b / a)
if int(conclusion) == conclusion:
conclusion = int(conclusion)
print('x=' + str(conclusion))
但是,去分母、去括号、移项、化简都没有做到,我们计划在下一期推出化简的制作方法。
本文章制作不易,记得点赞关注。