我正在尝试创建一个用于求解方程式的python程序:
from sympy import symbols, Eq, solve
list1 = ['x', 'y'] #<--- Letters of the user input
list1[0] = symbols(list1[0]) #<--- Assignment of the unknown x
list1[1] = symbols(list1[1]) #<--- Assignment of the unknown y
eq1 = Eq(x*2 - 5*x + 6 + y, 0) #<--- Equation
res = solve(eq1, dict=True) #<--- Solving
print(res)
我想为'list1'的第一个和第二个对象分配一个值,在这种情况下为'x = symbols('x')'和'y = symbols('y')'。因此,我尝试将'x'替换为list1 [0],将'y'替换为list1 [1],因为它可以是基于用户输入的任何字母。但是脚本在第六行仍然说“ x未定义”。因此,有没有一种方法可以将值分配给数组的项?
问题是您正在列表的上下文中创建符号。
执行等式时,Python找不到变量'x'或'y',因为它们不在列表的外部。
您可以尝试:
eq1 = Eq(list1[0]*2 - 5*list1[0] + 6 + list1[1], 0)
要获得结果,但不是很漂亮
或以下应该起作用:
x = Symbol('a') y = Symbol('y') eq1 = Eq(x*2 - 5*x + 6 + y, 0)
但是如果您确实希望在模块中公开这些符号,则可以执行以下操作:
def symbol_references(in_list):
for e in in_list:
globals()[e] = Symbol(e)
symbol_references(['x', 'y'])
print(type(x))
print(type(y))
当您开始使用SymPy时,要花一点时间来保持SymPy对象和Python变量之间的区别。请记住,每个变量都是Python变量,您可以根据自己的意愿分配给它。