蒟蒻的第一篇文章
https://www.luogu.com.cn/problem/P1022
这是一道解方程的题目,但!是!输入的不是系数了!是完整的方程!有未知数和符号的!(不然这题怎么可能出现在NOIP里)
方程所包含的可以分为4份:
1.数字(可能为负);2.操作符(+-);3.未知数;4.等号。
只要先把等号左右两边劈开,再分类,再计算就行了。
但是事情有那么简单吗?这不是普通的代码能解决的:
Python中的re库可以进行正则表达式的操作,包括查找、替换、提取等操作,非常好用。——麦瑟尔夫
现在让我们听听Myself的建议,使用re库来解决这道题。
首先=号是没用的对不?用split把它拆开来,分成两半!
然后用findall提取变量,a-z,A-Z都是。
然后,将单项式都提取出来。然后,用抵消思想将左右两边取反,循环操作。然后,没了。
警钟1:要特判!!!想想看,在做除法时,万一是负数除以负数怎么办?返回负数怎么办?要把-0改成0!否则84!
警钟2:输出保留三位小数!
附上代码:
import re
def solve_equation(equation):
# 将方程拆分为方程左边和右边
left_side, right_side = equation.split('=')
# 提取变量,方程中的字母被认为是变量,例如x、y等
variable = re.findall('[a-zA-Z]+', equation)[0]
# 初始化总和和总系数变量
total_sum = 0
total_coef = 0
# 提取并处理所有的项
for side in (left_side, right_side):
# 将所有单项式提取出来
terms = re.findall(r'[+-]?[^+-]+', side)
for term in terms:
if variable in term:
# 提取系数
coef_str = term.replace(variable, '')
coef = int(coef_str) if coef_str not in ('+', '-', '') else int(coef_str + '1')
# 左边的系数保持不变,右边的系数取相反数
total_coef += coef if side == left_side else -coef
else:
# 提取常数并取反如果在等号的右边
total_sum += -int(term) if side == left_side else int(term)
# 求解方程并返回结果,精确到小数点后三位
solution = total_sum / total_coef
if solution==-0.0:
solution=0
return f'{variable}={solution:.3f}'s=input()
print(solve_equation(s))
求助:手机版CSDN怎么在博客里插入代码块?谢谢
感谢收看