嗯,第一个问题是你的函数只是返回None
,只是扔掉了两个列表,所以甚至没有办法看到它是否在做正确的事情。
如果你解决了这个问题,你会发现它正在做正确的事情。
def balance_equation(species,coeff):
data=zip(coeff,species)
positive=[]
negative=[]
for (mul,el) in data:
if mul<0:
negative.append((el,mul))
if mul>0:
positive.append((el,mul))
return negative, positive
>>> n, p = balance_equation(balance_equation('abcdef', range(-3,3))
>>> n
[('a', -3), ('b', -2), ('c', -1)]
>>> p
[('e', 1), ('f', 2)]
所以,有两种可能:
- 由于您粘贴的代码显然不是您正在运行的实际代码,因此您可能在重写该错误以将其发布到此处时修复了该错误。
- 你不是用合理的输入来调用它。例如,如果你向后传递参数,因为
species
可能是字符串的集合,它们最终都会是正数。或者,同样,如果您将系数作为整数的字符串表示形式传递。
如果这是最后一个问题——你正在传递,比如说,'abcdef', ['-3', '-2', '-1', '0', '1', '2', '3']
并且你想在 balance_equation 中而不是在调用代码中处理它,那很容易。只需在以下内容之前添加此行zip
:
coeff = [int(x) for x in coeff]
或更改zip
为:
data = zip((int(x) for x in coeff), species)
顺便说一句,我假设您使用的是 CPython 2。在 Python 3 中,尝试将字符串与 0 进行比较会引发 aTypeError
而不是总是返回True
,而在其他 Python 2 实现中它可能总是返回False
而不是True
......</p >