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

我编写了一个代码(用于娱乐和练习)以平衡化学方程式。我想尝试平衡N + A一下= Z


N = 2

A = 2

Z = 6

if N + A != Z:

print('X')

balancer = ???

平衡器应为3,这样,如果我建立一个方程式,例如(平衡器x N)+ A = Z,那它将是正确的。我如何在没有直接输入的情况下将平衡器设为三。


侃侃无极
浏览 185回答 2
2回答

DIEA

您可以手工制作基本的代数:(balancer * N) + A = Z(balancer * N) = Z - A # subtract A from both sidesbalancer = (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]

largeQ

您需要一个条件来测试左侧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 CH41 O2然后从那里类似地解析原子。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python