作为赋值的一部分,我创建了一个函数,它接受一个字符串,它是一个等式。这里是一个例子:48 + 6x6/3 = 6x8-9x2。计算函数采用等号的一边并对其进行评估。我不太关心分解方程式。我相信我可以将它与s[:s.find("=")]
分开。创建一个以字符串形式给出的方程并计算它的函数
我的主要问题是计算功能本身。我会发布到目前为止我所在的位置。注释掉的部分是我试图处理两位数的东西,但我无法找出合理的方法来做到这一点。我想要一些帮助来思考这个问题。
我被告知不使用eval因为等式做EVAL“2 + 3 * 5-11/2 * 88 + 153”将不容易因操作者的优先级 - 或缺乏。我的程序不应遵守正常的运营商优先规则。相反,它应该纯粹从左到右进行评估。
93590046编辑此工程的单个数字。也许我们可以这样来使用eval
是非常危险的多个数字
def compute(s):
result = int(s[0])
op = 0
a = 1
while a < len(s):
if s[a] == '/':
result /= int(s[a + 1])
elif s[a] == '+':
result += int(s[a + 1])
elif s[a] == '*':
result *= int(s[a + 1])
elif s[a] == '-':
result -= int(s[a + 1])
a += 1
return int(result)
对我仍然不清楚。 'eval'将简单地计算输入中的方程。如果输入不清楚,就像在你的例子中一样,编写算法根本无济于事。 – Dunno 2014-09-30 21:09:24
在这个问题上,评估是严格的从左到右。由于我强制从左到右,因此需要删除eval。所以像'eval(str(eval(“2 + 3”))+“* 5”)这样的东西对于更长的方程将变得非常讨厌。 – darksoulsfan 2014-09-30 21:17:46
只要你坚持'*'乘以乘法,使用'eval'实际上是微不足道的。这听起来更像是你需要编写正确处理运算符优先级的代码,以便你正确评估'6 + 3 * 9'为'6 +(3 * 9)'而不是简单地从左到右处理它(错误地)作为'(6 + 3)* 9' – chepner 2014-09-30 21:25:51