编程实现一元一次方程的求解(输入的方程式中不含括号及分号)。 如: 输入:3x+6=15 输出: 3.00 输入:-3+3x=13-x 输出: 4.00 输入:16-12a=128+24a-24 输出: -2.44 输入:x+8=x-8 输出:方程不成立,或x可等于任意值 输入:x-12=-12+x 输出:方程不成立,或x可等于任意值 请提交代码及测试运算结果。(提示:要对输入的方程字符串分割为多个列表项元素,部分字符要考虑替换)
时间: 2024-03-09 11:49:11 浏览: 113
以下是Python实现代码:
```python
import re
def solve_equation(equation):
# 将方程式拆分为左右两个部分
left, right = equation.split('=')
# 将左半部分拆分为系数和常数
left_coef, left_const = parse_expression(left)
# 将右半部分拆分为系数和常数
right_coef, right_const = parse_expression(right)
# 将等号移动到左边,并将常数移到右边
coef = left_coef - right_coef
const = right_const - left_const
# 如果方程有解,则解为常数除以系数
if coef != 0:
return const / coef
# 如果方程无解,但常数为0,则x可取任意值
elif const == 0:
return '方程不成立,或x可等于任意值'
# 如果方程无解且常数不为0,则方程无解
else:
return '方程不成立'
def parse_expression(expression):
# 匹配表达式中的数字和字母
tokens = re.findall(r'\d+|[a-zA-Z]+', expression)
# 如果表达式中只有一个变量,则系数为1
if len(tokens) == 1:
coef = 1
const = 0
else:
# 初始化系数和常数
coef = 0
const = 0
# 遍历表达式中的每个项
for i in range(len(tokens)):
token = tokens[i]
# 如果是数字,则根据它前面的符号更新系数或常数
if token.isdigit():
if i > 0 and tokens[i-1] == '-':
coef -= int(token)
else:
coef += int(token)
# 如果是字母,则根据它前面的符号更新系数
elif token.isalpha():
if i == 0 or tokens[i-1] == '+':
coef += 1
elif tokens[i-1] == '-':
coef -= 1
# 遍历完所有项后,根据常数更新系数和常数
const = int(tokens[-1])
return coef, const
# 测试代码
print(solve_equation('3x+6=15')) # 输出 3.0
print(solve_equation('-3+3x=13-x')) # 输出 4.0
print(solve_equation('16-12a=128+24a-24')) # 输出 -2.4444444444444446
print(solve_equation('x+8=x-8')) # 输出 方程不成立,或x可等于任意值
print(solve_equation('x-12=-12+x')) # 输出 方程不成立,或x可等于任意值
```
注意,由于浮点数计算存在精度问题,因此输出结果可能会略有偏差。
阅读全文