2016-11-30 8 views
-1

この要点は、2つのソートされたリストを取る関数です。それは、負の数(お金を借りている人)と正の数のリスト(お金を借りている人)のリストを取ります。それから、負のリストからお金を借りている人々に報酬を与えます。ネストされたWhileループの問題

例:私のプロセスの最初のステップは陰性である

negatives = [-55.774, -45.884, -40.754, -35.694, -33.734, -29.024, -25.114, -16.144, -14.014, -5.874, -5.554] 
positives = [43.936, 42.276, 33.756, 31.116, 30.456, 27.616, 21.526, 18.276, 13.176, 12.376, 11.966, 8.566, 8.486, 4.036] 

[0]陽性を報われる[0]、43.936、それは部分的に陽性をオフ支払う[1]自体まで[0]ネガ0であれば、それはネガティブ[1]に移動し、ポジティブ[1]に払われているものを支払う。私はこのプロセスを反復しようとしています。ここで私が持っているものです。

def pay_balances(x, y): 
    i = 0 
    j = 0 
    while i < len(x) and j < len(y): 
     while abs(x[i]) > abs(y[j]) and abs(round(x[i],4)) != 0: 
      print y[j] 
      x[i] = x[i] + y[j] 
      y[j] = 0 
      j += 1 
      print i, j 
     while abs(x[i]) < abs(y[j]) and abs(round(x[i],4)) != 0: 
      print -x[i] 
      y[j] = y[j] + x[i] 
      x[i] = 0 
      i += 1 
      print i, j 

だから、あなたが実行した場合...

pay_balances(negatives, positives) 

これは、最終的に原因はIndexErrorに壊れる:リストインデックス範囲外

問題は、私たちがしているときでありますリストの終わり、そして私がすべてを止めることを望むときの私の価値= 14です。

while i < len(x) and j < len(y): 

は私が間違って何をやっている:私が、私はそれを殺すだろうと思った次の行を持っているにもかかわらずループに滞在するように見えますか?いつものように多くのおかげで!

答えて

1

あなたは内側のループ内のインデックスijをインクリメントするので、あなたが最初にインナーwhileループにも対応する条件を入れて、出口点にハーフウェイを追加する必要があります。

while i < len(x) and j < len(y): 
    while j < len(y) and abs(x[i]) > abs(y[j]) and abs(round(x[i],4)) != 0: 
     print y[j] 
     x[i] = x[i] + y[j] 
     y[j] = 0 
     j += 1 
     print i, j 
    if j >= len(y): 
     break 
    while i < len(x) and abs(x[i]) < abs(y[j]) and abs(round(x[i],4)) != 0: 
     print -x[i] 
     y[j] = y[j] + x[i] 
     x[i] = 0 
     i += 1 
     print i, j 
+0

ありがとうtrincot! – WhitneyChia

+0

歓迎します;-) – trincot

0

私は思いますこのコードでは、1つのループを使用して必要なものが生成されることを確認してください。

def pay_balances(x, y): 
i = 0 
j = 0 
while x[-1] != 0 and y[-1] !=0: 
    if abs(x[i]) > abs(y[j]): 
     x[i] = x[i] + y[j] 
     y[j] = 0 
     j += 1 
    elif abs(x[i]) < abs(y[j]): 
     y[j] = y[j] + x[i] 
     x[i] = 0 
     i += 1   
print x, y 
return sum(x) + sum(y) 
関連する問題