Python 我的代数解算器哪里出了问题?
示例公式:Python 我的代数解算器哪里出了问题?,python,linear-algebra,Python,Linear Algebra,示例公式: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]
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两边都有a+)。我希望ExtraEq1拥有equ将丢失的所有x变量
输入是示例方程或类似的东西
我使用了Jeff的注释,并更改了两个else语句中的extraeq1.append和del()(但不是底部的del())以接受x变量,而不是它的值,现在它工作正常。有什么原因吗?注释代码显示了我所更改的内容
*注意:请不要说“使用SymPy”或任何这些,我正在作为一个项目构建我自己的版本我不清楚您的任务,但是如果您需要反汇编数学表达式,最好使用regexps 这是查找所有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"
如果你不熟悉ReXEXP,你可以试试ReXEPS生成器,比如
问题是,你在列表中循环,并且在循环的中间改变这个列表,所以循环结束跳过一些元素,因为它们占据了已经通过的位置。 看看这个例子:>>> l = ['a','b','c','d']
>>> for e in l:
... print e,
... del(l[l.index(e)])
...
a c
一种可能的解决方案是在列表副本上循环:
for k in equ[:]:
另外请注意,代码中的del(x)
不会做任何事情,例如:
>>> l = ['a', 'b', 'c', 'd']
>>> a = l[0]
>>> del(a)
>>> l
['a', 'b', 'c', 'd']
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
l=['a',b',c',d']
>>>a=l[0]
>>>德尔(a)
>>>l
['a','b','c','d']
>>>a
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“a”
>>>
del
只删除一个变量,而不是该变量指向的对象(除非没有对该对象的其他引用,否则该对象也将被删除)
还要确保阅读Corey Ogburn评论中的内容
编辑:编辑了我以前的答案,因为我对代码有错误的理解。不是直接的解决方案,但一些可能会让您感兴趣的事情是和。我不了解您的算法。你想完成什么?你能举例说明你对输入和输出的期望(
eq
,extraeq1
)吗?期望的输出是什么?您的输入得到了什么?首先,如果您使用enumerate而不是重复查找索引(您可以将enumerate与任何ITerableal一起使用),您可以使代码更加清晰。因此,您应该在空格上拆分字符串,这样就不必管有多少空格了(然后您可以只检查i-1中的“x”)