0

現在、関数はリスト coeff 内の数値を数値として認識していません。2 つのリストの項目をペアにして、mul の値に基づいて別のリストに並べ替えようとしています。しかし、すべてがネガティブリストに入ります。mul が各 if ステートメントに入る数値と見なされていることを確認するにはどうすればよいですか。

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))

編集; この balance_equation(['H2O','A2'],['6','-4']) を最初に含めることをお勧めします

4

3 に答える 3

1

あなたの問題は、あなたがそれを呼び出す方法で(balance_equation(['H2O','A2'],['6','-4']))、mulintではなく文字列('6'または orでは'-4'なく)であることです。if ステートメントを次のように変更します。6-4

if int(mul)<0:
    negative.append((el,mul))
if int(mul)>0:
    positive.append((el,mul))

mulこれは、0 と比較する前に整数に変換されます。

于 2012-12-18T19:52:12.097 に答える
1

最初の問題は、関数が を返す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 つの可能性があります。

  1. 貼り付けたコードは実際に実行しているコードではないことは明らかなので、ここに投稿するために書き直しながらバグを修正した可能性があります。
  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 >

于 2012-12-18T19:44:30.710 に答える
0

I think you have your answer, but there's also a simpler way of doing this in Python:

for (mul, el) in data:
    append_to = negative.append if mul < 0 else positive.append
    append_to(el)

Not sure what "should happen" to 0 though

于 2012-12-18T19:50:18.733 に答える