为了账号安全,请及时绑定邮箱和手机立即绑定

(Python)求解未知数的方程式,并用方程式找到该数字

(Python)求解未知数的方程式,并用方程式找到该数字

侃侃无极 2021-05-22 11:08:32
我编写了一个代码(用于娱乐和练习)以平衡化学方程式。我想尝试平衡N + A一下= ZN = 2A = 2Z = 6if N + A != Z:print('X')balancer = ???平衡器应为3,这样,如果我建立一个方程式,例如(平衡器x N)+ A = Z,那它将是正确的。我如何在没有直接输入的情况下将平衡器设为三。
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您可以手工制作基本的代数:


(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) + a和Z,但不能只在它们之间放置=或==。您必须使用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]


查看完整回答
反对 回复 2021-05-25
?
largeQ

TA贡献2039条经验 获得超7个赞

您需要一个条件来测试左侧N + A大于或小于右侧Z。您可以使用(N + A) - Z,yielding -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

然后从那里类似地解析原子。


查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信