最初の問題は、関数が を返すNone
だけで、2 つのリストを破棄するだけなので、正しいことを行っているかどうかを確認する方法さえないことです。
それを修正すれば、それが正しいことをしていることがわかります。
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)]
したがって、次の 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 と比較しようとすると、TypeError
常にを返す代わりに が発生しますTrue
が、他の Python 2 実装では、常にFalse
代わりにTrue
… を返す可能性があります。</p >