(Python)求解一个未知数的方程,用一个方程找到那个数字



我制作了一个代码(为了娱乐和练习(来平衡化学方程式。我想尝试平衡N + A这样= Z

N = 2
A = 2
Z = 6
if N + A != Z:
print('X')
balancer = ???

平衡器应该是 3,这样如果我做一个方程,例如(平衡器 x N(+ A = Z,它就是真的。我将如何在不直接输入的情况下使平衡器成为三个。

谢谢:)

你可以手动做基本的代数:

(balancer * N) + A = Z
(balancer * N) = Z - A # subtract A from both sides
balancer = (Z - A) / N # divide both sides by N

。然后把它变成代码是微不足道的——最后一行实际上是有效的 Python 代码,没有任何变化。


或者,如果您希望 Python 为您执行此操作,只需将(balancer * N) + A = Z指定为等式......Python没有内置任何东西来做到这一点,但是有像SymPy这样的代数库可以做。

您确实想完成整个教程,但简要介绍一下...

首先,你必须首先告诉它你的变量是变量:

>>> from sympy import symbols, solve, Eq
>>> A, N, Z, balancer = symbols('A N Z balancer')

然后,建立一个方程式。左侧可以只是(balancer * N) + aZ,但你不能只是在它们之间放一个===;您必须使用Eq

>>> equation = Eq((balancer * N) + A, Z)    

现在,您可以替换变量的值:

>>> equation.subs(dict(N=2, A=2, Z=6))
Eq(2*balancer + 2, 6)

最后,求解有效的解决方案:

>>> solve(equation.subs(dict(N=2, A=2, Z=6))
[2]

或者,如果你更愿意用代数方式解决它,然后代入,而不是相反:

>>> solve(equation, 'balancer')
[(-A + Z)/N]
>>> [s.subs(dict(N=2, A=2, Z=6)) for s in solve(equation, 'balancer')]
[2]

您需要一个条件来测试左侧N + A是否大于或小于右侧Z。你可以使用(N + A) - Z,产生-2,它告诉你你缺少两个原子。从那里你需要编写一些逻辑来确定你缺少哪些原子。

由于简单的变量指向整数,因此无法直观地预测需要添加哪些原子。 不过,大概您正在处理一个等式,所以我建议您研究一个正则表达式解决方案来解析它。像这样:

>>> import re
>>> m = re.findall('(d*)((?:[A-Z][a-z]?d*)+)', '2CH4 + O2')
>>> for n, molecule in m:
...     print(n or 1, molecule)
... 
2 CH4
1 O2

然后从那里以类似的方式解析原子。

最新更新