トラック
/
Python
Python
/
演習
/
クイーンの攻撃
クイーンの攻撃

クイーンの攻撃

初級

説明

チェス盤上の2つのクイーンの位置が与えられたとき、それらが互いを攻撃できる配置にあるかどうかを判定します。

チェスのゲームでは、クイーンは同じ行、列、または対角線上にある駒を攻撃できます。

チェス盤は8×8の配列で表すことができます。

では、白のクイーンがc5(0から数えて列2、行3)に、黒のクイーンがf2(0から数えて列5、行6)にあるとしましょう。すると、配置は次のようになっていることがわかります。

2つのクイーンが置かれたチェス盤。c5のクイーンから伸びる矢印は、縦・横・斜めの駒を取れる方向を示しています。

クイーン同士が互いを攻撃できるかどうかも答えられます。 この場合は「はい、攻撃できます」となります。なぜなら、2つの駒が同じ対角線上にいるからです。

クレジット

チェス盤の画像は、habere-et-dispertireが、Ulrike FischerによるchessboardパッケージとLaTeXを使って作成したものです。

例外メッセージ

ときに、例外を送出する必要があります。そのときは、エラーの原因が何であるかを示す意味のあるエラーメッセージを必ず含めましょう。そうするとコードが読みやすくなり、デバッグも格段に楽になります。エラーの原因が特定の型であるとわかっている場合は、組み込みのエラー型から選んで送出してもかまいませんが、その場合も意味のあるメッセージを含めましょう。

この演習では、raise文を使い、Queenのコンストラクターに負の数、または有効な行や列ではない数値が渡されたときにValueErrorsを「スロー」する必要があります。テストに合格するには、exceptionをraiseすると同時に、そこにメッセージを含める必要があります。また、can_attack()メソッドに渡された2つのクイーンが同じ位置にある場合も、ValueErrorをraiseする必要があります。

メッセージ付きのValueErrorを送出するには、メッセージをexception型の引数として書きます。

# if the row parameter is negative
raise ValueError("row not positive")

# if the row parameter is not on the defined board
raise ValueError("row not on board")

# if the column parameter is negative
raise ValueError("column not positive")

# if the column parameter is not on the defined board
raise ValueError("column not on board")

# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Python Exercism

クイーンの攻撃を始める準備はできましたか?

Exercismに登録すれば、17個のコンセプト146個の演習、そして本物の人間によるメンタリングとともに、Pythonを学んでマスターできます。すべて無料です。