2017-03-14 5 views
0

だから私は正方形に成功したに移動することができますチェスボード上の部分を確認することができます関数を記述しようとしている、例外処理が個別に

は、これまでのところ、私は、コードのあまり書かれたが、実現してきた私は意志私ははIndexErrorが発生した場合は、ブロックを無視するが、それが終了するまで、whileループでの残りのステートメントを続けていきたいと考えて出会いのIndexErrors

def legalMoves(piece,fen): 
    moveList=[] 
    attackList=[] 
    x,y=int(piece[1]),int(piece[2]) 
    i=0 
    if piece[0] in 'QqRr': 
     while (i<8): 
      if fen[x][y + i] == '-' : 
       moveList.append([x,y+i]) 
      if fen[x][y - i] == '-' : 
       moveList.append([x,y-i]) 
      if fen[x + i][y] == '-' : 
       moveList.append([x+i,y]) 
      if fen[x - i][y] == '-' : 
       moveList.append([x-i,y]) 
      i+=1 

。それ、どうやったら出来るの?

答えて

0

エラーを貼りつけ、これはどこ1ケースですLBYLはおそらく適切です。あなたは本当にそれをする必要はありませんが。あなたは女王とルーキーが一直線に(XかYのどちらかで)動くことができることを知っています。したがって、あなたはただ1つを安定して保持し、次に他のオプションを移動する必要があります:

for x in range(0, 8): 
    if fen[x][piece.y] == '-': 
     potential_moves.append((x, piece.y)) 

for y in range(0, 8): 
    if fen[piece.x][y] == '-': 
     potential_moves.append((piece.x, y)) 

あなたあなたが潜在的な動きがあった位置にたし、あなたがこのような何かを行うことができEAFPを試してみたかった場合

(つまり、実際にチェスのルールのいくつかを無視しているが):

from collections import namedtuple 

Point = namedtuple('Point', ('x', 'y')) 
potential_moves = [] 
for x in range(0, 8): 
    for y in range(0, 8): 
     potential_moves.append(Point(x, y)) 

for move in potential_moves: 
    try: 
     if fen[move.x][move.y] == '-': 
      move_list.append(move) 
    except IndexError: 
     pass 

これはおそらくapではありませんチェスにふさわしい:)

+0

詳細解答をいただきありがとうございましたが、最初はそれを試みましたが、後でこれらの四角形の1つの間に入るピースにヒットしたらループを終了する必要があると考えました(その後、もはや合法的な動きがあるので)、私はこの方法から始め、後でattackListを追加しなければならないので、句を追加すると思った。 –

+0

私がチェスのためにすることは、a)8歳か0歳か、またはb)私の動きを妨げる作品を見つけたときまで、有効な方向への移動です。 'x <8またはboard [x] [piece.y] == ' - ':'のようなもの、または他の方向の 'x> 0'のように見えます。しかし、これは技術的には異なる質問です –

0

tryブロックで実行してブロックを除くcontinue

try: 
    your if conditions 
except: 
    continue 

はあなたのコードでそれを試してみて、Pythonで、それは一般的にEAFPですが、あなたのget

+0

がONY 1がで試す追加を参照してくださいすべての内側であれば、それ –

+0

それは句自体を除く内部無限ループに向かっているように見えますで。 –

+1

OK節はexcept節の中にi + = 1を追加して修正しました。ありがとう! –