-2

ゼロで満たされた行列を作成するこのコードがあります。いくつかのゼロを、スネークオブジェクトを作成するときに指定される「記号」に置き換えたいと思います。次に、マトリックス内の要素の合計量を増やすことなく、マトリックス内のゼロを自分の符号に置き換えたいと思います。

snakeクラスの「growth」関数を使用して、ゼロのみが上書きされることを確認したいのですが、エラーが発生します。

ValueError: (1, 4) is not in list 

私がその位置が実際に存在すると確信しているとき!座標はランダムに生成されるため、プログラムを実行するたびにエラーコードが異なります。これが私のコードです:

class field:
 def __init__(self):

    self.table= [ [ "0" for i in range(10) ] for j in range(10) ]

  def printfield(self):
     for row in self.table:
            print (row)


Class snake:

  def __init__(self,sign):
    self.sign = sign
    self.x = random.randint(1,9) 
    self.y = random.randint(1,9)    

    field.table[self.x][self.y] = sign


  def growth(self, list, index, element):
    if list[index] != 0:
        return False
    else:
        field.table[self.x-v*b][self.y-v*c] = element


  def increase(self,p,b,c):                                               

        for v in range(p+1):
                self.growth(field.table,field.table.index((self.x-v*b,self.y-v*c)), self.sign) 
4

2 に答える 2

1

エラーは、成長方法ではなく、増加方法に起因します。を呼び出すと発生しますtable.index((self.x-v*b,self.y-v*c))。インデックステーブルを呼び出すときに何をしようとしているのかはわかりませんが、インデックスメソッドはリスト内の値の位置を返します。したがって、たとえば:

>>> A = [0, 1, 5, 10]
>>> A.index(5)
2

tableはintのリストのリストのようです。そのため、を呼び出すtable.index((1, 4))と、タプル(1, 4)がインデックスに見つかりません。多分あなたが欲しいtable[1][4]ですか?

アップデート:

私はこれがあなたが望むものだと思います:

self.growth(field.table, (self.x-v*b, self.y-v*c), self.sign)

field.table[self.x-v*b][self.y-v*c]と置き換えますfield.table[index[0]][index[1]]

(self.x-v*b, self.y-v*c)は必要なインデックスであり、growthに渡すと、引数名を使用して参照する必要があります。

于 2012-12-01T16:01:07.220 に答える
1

2次元リストのインデックスとリストの値を混同しています。ステートメント

field.table.index((self.x-v*b, self.y-v*c))

リスト内で(指定されたエラーの場合)のを探しますが、もちろんそこにはありません。おそらく必要なのはにアクセスすることです。タプルを変数として渡し、その要素をリストのインデックスとして使用するか、リストとして成長に渡し、インデックスとしてそのリストにアクセスすることができます。(1, 4)field.tablefield.table[1][4]growthfield.table[self.x-v*b]self.y-v*c

また、リストをsで埋めていますが、関数内"0"でチェックしています。0growth

于 2012-12-01T16:05:47.570 に答える