示例方程:2x * 3x + 4x * 5x * 6x
for k in equ:
if k == '*':
if equ[equ.index(k)-1] == 'x':
extraEqu1.append('1x')
del(equ[equ.index(k)-1])
else:
x = equ[equ.index(k)-1]
if 'x' in x:
extraEqu1.append(equ[equ.index(k)-1]) #extraEqu1.append(x)
del(equ[equ.index(k)-1]) #del(x)
if equ[equ.index(k)+1] == 'x':
extraEqu1.append('1x')
del(equ[equ.index(k)+1])
else:
x = equ[equ.index(k)+1]
if 'x' in x:
extraEqu1.append(equ[equ.index(k)+1]) #extraEqu1.append(x)
del(equ[equ.index(k)+1]) #del(x)
del(equ[equ.index(k)])
检查是否有任何 x 变量正在相乘,将它们取出并将它们放入不同的列表中。我一直在尝试上述代码的变体,它总是忽略最后一项或包含运算符。我毫不怀疑这段代码有很多我没有看到(但应该)的错误,请指出。如有任何帮助,我们将不胜感激。
抱歉,我对输出不太清楚。我希望 equ 丢失任何被相乘的 x 变量(例如:2x * 3x 都被删除),但保留任何未相乘的变量(例如:如果 4x 两边都有一个 +)。我希望 extraEqu1 拥有 equ 会丢失的所有 x 变量。
输入是示例方程或类似的内容
我使用了 Jeff 的注释,并更改了两个 else 语句中的 extraEqu1.append 和 del() (但不是底部的 del())以采用 x 变量而不是它的值,现在它工作得完美。有什么理由吗?注释的代码显示了我更改的内容
*注意:请不要说“使用 SymPy”或任何其他内容,我正在将自己的版本构建为项目
最佳答案
我不清楚你的任务,但如果你需要更好地反汇编数学表达式来使用正则表达式 python re 这是查找所有 x 的示例
import re
txt='2x * 3x + 4x * 5x * 6x'
re1='(\\d+)' # Integer Number 1
re2='(x)' # Any Single Character 1
rg = re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
int1=m.group(1)
c1=m.group(2)
print "("+int1+")"+"("+c1+")"+"\n"
如果您不熟悉正则表达式,您可以尝试正则表达式生成器,例如 txt2re.com
关于python - 我的代数求解器哪里出了问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958829/