2016-06-18 5 views
0

私は割り当てのためのブラックボックステスト用のコードを書いています。私の関数では、入力は2次元配列、xはint、yはint、ゾンビ強度はintです。要素の値がゾンビの強さよりも小さい場合、私の開始位置から、要素の値を-1に変更します。私はその要素の上下、左、右(斜めではない)に近づき、同じことをするよりも。私は、要素が存在していない場合は、それをリストに追加するよりも存在する場合を除いてtryを使用しています。私がtryを使用して理解していることから、リストに配列に存在しない要素を追加することを止めます。なぜ私はブラックボックスが私のコードをテストするときにインデックスエラーをなぜ得ているのかわかりません。私が追加した入力は、ブラックボックステストがどの入力を使用しているのかわかりません。あなたがifテストは前の状況をカバーして私のif文で何がインデックスエラーを引き起こしているのかわからない

Here is my code 
population = [[9, 3, 4, 5, 4], [1, 6, 5, 8, 9], [2, 3, 7, 3, 2], [4,5,1,4,3], [4, 5, 4, 3, 9]] 
x = 2 
y = 1 
zombie = 5 



def answer(population, x, y, zombie): 
    list = [] 
    list.append([x,y]) 
    while list: 
     print list 
     front_of_list = list.pop(0) 
     x = front_of_list[0] 
     y = front_of_list[1] 
     if population[front_of_list[0]][front_of_list[1]] <= zombie and population[front_of_list[0]][front_of_list[1]] >= 0: 
      population[front_of_list[0]][front_of_list[1]] = -1 
      if x-1 >=0: 
       try: 
        population[x-1][y] 
        list.append([x-1,y]) 
       except: 
        pass 
      if y-1 >= 0: 
       try: 
        population[x][y-1] 
        list.append([x,y-1]) 
       except: 
        pass 
      if x+1 < len(population): 
       try: 
        population[x+1][y] 
        list.append([x+1,y]) 
       except: 
        pass 
      if y+1 < len(population[0]): 
       try: 
        population[x][y+1] 
        list.append([x,y+1]) 
       except: 
        pass 



answer(population, x, y, zombie) 
print population 
+0

どのラインがエラーになっていますか? – Barmar

+0

あなたの質問に完全なトレースバックをコピーして貼り付けてください –

+0

私はPython 2.7でコードを実行しましたが、それは正常に実行されました –

答えて

0

あなたtry句は必要ありません。問題を解決するかどうかを確認するために、コードを単純化し、明確化してみましょう。なぜなら、コードを直接再現することができないからです。

xyの場合は、引き続きfront_of_listを使用します。テスト(Pythonの機能)を組み合わせてif節を単純化することができます。 (x, y)は当然のタプルですので、私はそれらを切り替えました。組み込みの名前listを再定義したので、arrayに切り替えました。最終的には、コピー&ペースト・エラーの可能性を減らすためにテストをループに縮小しました。これは、と私たちを残します:

def answer(population, x, y, zombie): 
    array = [(x, y)] 

    x_limit = len(population) 
    y_limit = len(population[0]) 

    while array: 
     print array 
     x, y = array.pop(0) 

     if 0 <= population[x][y] <= zombie: 

      population[x][y] = -1 

      for dx in (-1, 1): 
       if 0 <= x + dx < x_limit: 
        array.append((x + dx, y)) 

      for dy in (-1, 1): 
       if 0 <= y + dy < y_limit: 
        array.append((x, y + dy)) 

population = [ 
    [9, 3, 4, 5, 4], 
    [1, 6, 5, 8, 9], 
    [2, 3, 7, 3, 2], 
    [4, 5, 1, 4, 3], 
    [4, 5, 4, 3, 9] 
    ] 

x, y = 2, 1 

zombie = 5 

answer(population, x, y, zombie) 

print population 

は、テスト状況にこれを差し込み、それが失敗し続けた場合、正確なエラーメッセージに沿って渡します。

コードとこれは長方形の行列を想定しています.2次元配列が不揃いであると、インデックスエラーが発生します。 (何かがチェックを倍増する。)

UPDATE

xの伝統的な意味は、yはですが、あなたのコード(と私のリワーク)は、これが逆転しています。内部的には違いはありませんが、引数としてx & yが渡されているため、コードのプラグインの観点から、開始点が正しくないことが原因で結果が無効になる可能性があります。 (もう一度、何かをチェックしてください)

関連する問題