男3次元配列を取得し、空のセルの数を確認する関数を作成しようとしています。 は、しかし、私はその私がここに で働いている大規模なモジュールからはそれTypeError: 'float'オブジェクトは3次元配列の添え字ではありません
と連携機能であるdef checkpoint(m, i, j):
c = 0
if m[i][j][0] == 0:
c += 1.0
if m[i][j][1] == 0:
c += 1.0
if m[i][j][2] == 0:
c += 1.0
if m[i][j][3] == 0:
c += 1.0
return c
以下のよう
in checkpoint
if m[i][j][0] == 0:
TypeError: 'float' object is not subscriptable
私の関数である、次のエラーを得ます
def check(m, size):
flag = 2
for i in range(size):
for j in range(size):
print(i, j, "/n")
c = checkpoint(m, i, j)
s = summ(m, i, j)
if c == 2:
if s == 2 or -2:
flag = 1.0
if m[i][j][0] == 0:
if m[i][j][1] == 0:
m[i][j][0] = m[i][j][1] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 1, size)
elif m[i][j][2] == 0:
m[i][j][0] = m[i][j][2] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 2, size)
else:
m[i][j][0] = m[i][j][3] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 3, size)
elif m[i][j][1] == 0:
if m[i][j][2] == 0:
m[i][j][1] = m[i][j][2] = (-s/2)
fix(m, i, j, 1, size)
fix(m, i, j, 2, size)
elif m[i][j][3] == 0:
m[i][j][1] = m[i][j][3] = (-s/2)
fix(m, i, j, 1, size)
fix(m, i, j, 3, size)
else:
m[i][j][2] = m[i][j][3] = (-s/2)
if c == 3:
flag = 1.0
if m[i][j][0] == 0:
m[i][j][0] = -s
elif m[i][j][1] == 0:
m[i][j][1] = -s
elif m[i][j][2] == 0:
m[i][j][2] = -s
else:
m[i][j][3] = -s
return m, flag
任意のコメントをいただければ幸いです。
update:
私は必然的にモジュールの中で関数を実行しています。チェック機能でiとjの最初の反復と2回目の繰り返しは問題ありません。それ以降はエラーに直面するでしょう。 the output of the code that I'm trying to run
あなたはそれがチェック機能で私の最初の繰り返しで問題ありませんでした見ることができるよう:
は、ここに私の出力です。
ここは私の修正機能です。それは、ちょうど変更されたセルの矢印に関して、他のいくつかのセルを変更します。ここ
def fix(m, i, j, k, size):
ip = i - 1
jp = j - 1
iz = i + 1
jz = j + 1
if ip < 0:
ip = size - 1
if jp < 0:
jp = size - 1
if iz > size - 1:
iz = 0
if jz > size - 1:
jz = 0
kp = (k+2) % 4
if k == 0:
m[i][jz][kp] = -1 * m[i][j][k]
if k == 1:
m[iz][j][kp] = -1 * m[i][j][k]
if k == 2:
m[i][jp][kp] = -1 * m[i][j][k]
if k == 3:
m[ip][j][kp] = -1 * m[i][j][k]
return m
あなたは、全体のパッケージを見つけることができますメートルを意味 my code
を説明するよう
「コンテナ」は、あなたが扱っているデータの有効なサンプルを提示してください「スクリプト可能」です。どのように正確にあなたの方法を呼びますか? – idjaw
私は質問を更新しました –
例外トレースバックは、例外が実際に表示されたコードの部分ではなく、 'checkpoint'関数で実際に起こっていることを示しています。いずれにしても、特定のエラーはおそらく、あなたの 'm'データ構造がどこかでうんざりしていることを意味しています(内側のリストを期待する浮動小数点があります)。有効な代入は表示されている 'check'関数内でしか見られないので、エラーは他のどこかにある必要があります(例えば、' fix'の中で、あるいは 'checkpoint'のある部分で多分呼び出されます)。もっとコードを投稿する必要があるかもしれません!また、スクリーンショットではなく、テキストとしてトレースバックを投稿してください。 – Blckknght