グリッド内の1つの単位を左(x軸)に移動する機能を記述しようとしています。有効な座標が左側にある場合のみ機能し、そうでない場合(つまり、開始点がグリッドの端にある場合)、関数はNone
を返す必要があります。 Python - Matrix IndexError exception not working
def left_move(point):
try:
LEFT = grid[point[1]][point[0]-1]
except IndexError:
return None
if LEFT == '.':
change = [-1,0]
for idx, amount in enumerate(change):
point[idx]+=amount
return point
return None
は出発点が
[0,3]
であるため、グリッドの端に言うと、私は唯一のコードの先頭部分を実行します:予想通り
def left_move(point):
try:
LEFT = grid[point[1]][point[0]-1]
except IndexError:
return None
それはNone
を返すここに私の試みです。しかし、ブロック全体が実行された場合は、[-1,3]
がグリッド外にあり、try-except
によって許可されるべきではありません。どうしてこれなの?どのように修正することができますか?
コードは 'if'文が' try'ブロック内にあるかどうかにかかわらず同じ結果をもたらします。例外がある場合、関数は 'None None'を返し、残りのブロックは実行しません。 – ggordon
ahhはい今私はJokabの答えを参照する必要がありますが、-1はPythonの有効なインデックスだからです。私はtry/exceptを単純なif文で置き換えました。同じことをする必要があります。コードが問題なく終了し、return文が見つからないので、try/exceptのみがあったときにコードが動作した理由は、デフォルトではNoneを返すか、少なくとも私の推測であるからです。 @ggordon – dhdavvie
はい、 'try-except'を' if'に置き換えるのは良いアイデアです、ありがとう! – ggordon