目次

前のトピックへ

レッスンプラン

次のトピックへ

数独にPythonプログラムを書く

このページ

数独は、どのようにPythonでシミュレーション環境を作るには?

私たちは、これらのコースでは、我々はクラス、属性およびメソッドを設計する方法を詳細に説明することが準備されていませんので、我々は両方のカテゴリでこのライブラリで説明し、クラス定義、オブジェクト指向プログラミングの最も困難な部分であると考え数独のロックを解除する方法を学ぶために考えている学習者となるよう、属性やメソッド、私たちはこれらのクラスのデータ構造アナログができ、プロパティとメソッドは、数独を解決するためのシミュレーション環境を提起した。

まず、我々は美しい谷に想像することができ、家の間の9×9の正方形がある次のように、それらが配置されている。

_images/p4.png

イギリス虚

9カ国は、谷が9×9の合計を収容しながら、それぞれの国で、彼らはこの美しい谷に定住することを決め、一緒、9人を持って、あります。彼らは、(X-ウェイライン)各行を決め、各列(Y-ウェイライン)、およびすべての3x3のブロックは、すべての国の人が含まれていますので、彼らはこのグループには、本当のイギリスで、永続的に安心して一緒に暮らすことができますし、彼らがこの目標にそれを達成するのを助けることができると思います?

その後、我々はこの世界を良くするために、これらの人々を助けるために始めることができます...

カテゴリとは何ですか?オブジェクトとは何ですか?

OOPでは、カテゴリ(クラス)が主人公のように定義されている。 、ヒトJとしてそれを探る通信したり、記録を目的とするためには、同じ動作、特性と分類されている同じものの外観を持つことになります。我々は、クラスのような動物、象、動物のカテゴリのサブカテゴリであると思いますが、1象と象は、オブジェクトの2つのタイプのいずれかに属し動物である。

象に、自然、このオブジェクトはゾウや動物のクラスに属するが、ターゲットのニーズを見ながら、また、動物のカテゴリへの直接の対象とする象であってもよい。だから我々は、あなたがこのカテゴリー内の単一の独立したオブジェクトに接続されているだけで、人間の範疇かのように、私たちの本当のオブジェクト指向プログラミングは、世界のエンティティオブジェクト(オブジェクト)の中で述べていることを言うことができます。

我々は、範囲や必要性に基づいて設定され、我々は別のカテゴリをデザインし、それらが同時に同じオブジェクトに属してみましょうことができます。このような我々は都市の生態を勉強したいときなどは、頂きます、私たちは、動物のカテゴリなど何人かの人々、ペットを含むオブジェクトのこのカテゴリを設計するかもしれない...しかし、我々は、電話帳プログラムを作りたい人物カテゴリを設計、一部の人々は、このクラスのオブジェクトになりますが、彼らは携帯電話を持っていない限り、ペット、ペットが含まれていません。

このプロジェクトでは、主なカテゴリがありますように設計。

  • Numberクラス:

    私たちは、それぞれの番号が人である数独ゲームがかかる場合があります。全世界数独は、それぞれの国が9人を持って、9カ国があります。だから、ナンバークラスは、国家のカテゴリとみなすことができる。すべての国は、識別コード(ID)を持ってここに1-9で、それぞれの国が、この谷に住んでいるその人の位置を記録します。

  • Pointクラス:

    Pointオブジェクトは、家です。それが空である場合には、入学を申請するためにどの国の人々させることができ、それはあなたが生きていかなければならない場合、それはどの国の人であり、生きるために持っている場合、それぞれの家にマークされるのですか?

  • GroupBaseクラス:

    GroupBaseはつまり、そのオブジェクトは実体ではないが、グループクラスですが、実体の組み合わせのグループ。ここGroupBase3グループ、住宅建設のブロック群とグループXおよびY軸方向が含まれています。各オブジェクトには、多くの人々が住んでいたか、それが含まれている家の指摘だけでなく、ここに住んでいない国々の人々のだろうか?

  • ボックスクラス:

    これは、ブロックグループのためGroupBaseサブカテゴリです。 :左から、次のようにマークされたコードのブロックである右、上から下へ、合計9ブロックオブジェクト内の数独の世界

    _images/p5.png
  • LINEXクラス:

    GroupBaseこのサブクラス、家のためのグループX軸。次のように左から右に数独の世界では9のオブジェクトの合計は、1〜9のラベルが付いています。

    _images/p6.png
  • 線を引いたクラス:

    GroupBaseこのサブクラス、家のためのグループのY軸。以下のように上から下に数独の世界では9のオブジェクトの合計は、1〜9ラベル付けされます。

    _images/p7.png
  • Matrixクラス:

    Matrixクラスは、数独、全世界を定義しています。それはそれぞれの国が9人を持って、9カ国の人々を含む、美しい渓谷、ですが、谷の家は、英国を形成するために、いつまでも平和のうちに生存するこれらの人々に提供するために、9路盤を構築しました。

プロパティ(プロパティ)とは?

プロパティ(プロパティ)、クラス、文字とレコードの状態のメンバーを定義するために使用し、内部の定義のクラス(クラス)である。次の属性のいくつかを含むことができ、人のカテゴリー場合:この男は、彼はいくつかの子供がいたどのくらいのお金を所有、最初の子は、男性または女性で、それぞれの子それぞれが古い?

以下はこのプロジェクトのいくつかの主要なカテゴリに定義されている主な属性です。

  • Numberクラス:

    • V:国コード、1-9

    • P:人々が住んでいるこの国のすべての家をリスト

    • filled:どのように多くの人々は家に移動しました

  • Pointクラス:

    • X:家のx座標

    • Y:家のy座標

    • V:この家は、それが空である場合、その値は0であり、どの国の人が住んでいました

    • B:ブロックは添付の家

  • GroupBaseクラス:

    • IDX:このコードグループ

    • P:このグループの家の会員名簿

    • いっぱい:多くの人々のために生きてきたこのグループの

    • possilbe:このグループには住んでいなかった国々は、これらの国々のコードリストの値もある

  • ボックスクラス:

    • すべての属性が含まれていGroupBase

    • effects: すべてのネイバーは、このブロックをブロック

    • effectsX:このブロックは、x軸の等方性の隣人

    • effectsY:このブロックは、Y軸等方性の隣人

  • LINEXクラス:

    • GroupBaseは同じで属性

  • 線を引いたクラス:

    • GroupBaseは同じで属性

  • Matrixクラス:

    • P:二次配列の家のリスト、Pから[0][0] P〜[8] [8]、この谷にすべての住宅に代わって。

    • LINEX:X軸方向の家グループのリスト

    • 線を引いた:y軸は、グループの家をリストします

    • B:ブロックハウスグループリスト

    • N:すべての国のリスト

    • いっぱい:谷での滞在を持っているどのように多くの人々の記録を

メソッド(方法)とは何ですか?

方法(メソッド)は、クラスとそのオブジェクトの特定の動作の一部です。例えば我々はラジオのカテゴリを定義した場合、それは、ボタンのプロパティの一部を含むことになる、と私たちはボタンを押したときに、我々は、このアクションを実行するためにいくつかのメソッドを定義する必要があります。これらのアクションは、というようにCDにラジオ番組、または録画された番組の受信を開始することであってもよく、...

以下は、プロジェクトのクラスパスで使用される主な方法です。

  • Numberクラス:

    • setit(P1):誰かが自分の家を見つけたとき、彼らはこの方法を開始します

  • Pointクラス:

    • can_see(P1):ハウス****は別の家(P1)を参照してくださいかどうかをテスト?

    • can_see_those(POSLIST):ハウス**** POSLISTは家がリストされたかどうかをテストし、すべての家のリストが返さを見ることができます。

    ノート

    「見る」とは何ですか?

    その同じ行、同じ列、または1ブロック内の他の家との家、という点では、の家を見ることが可能である。

  • GroupBaseクラス:

    • グループをテストするには生きるために家のラベルVの人々を行うことができます。(V)を許可しますか?

    • get_num_pos(V):この家グループでは、国がまだ占有されていない場合人々は、カントリーハウス生活オブジェクトをV作っなし応答を配置します。

    • count_num_possible(カウント):自社グループ内では、それは家が生活の数を数えると等しくなるように利用できるようにすべきであることを意味し、カウントが取得されたパラメータがある場合は、国番号と国の人々のリストは、家に住んで利用できるように。

    • get_all_pos(method): get all houses in this group, if method=”a”; if method=”u”, get all empty houses, if method=”s”, get all not empty houses.
  • ボックスクラス:

    • すべてGroupBaseクラスメソッド

    • get_group_number(NUM):numは国家仮想****の形成をブロックすることができます家の中で国コードをテストする?

    ノート

    「仮想国民****」とは?

    ナショナルは、仮想の家のブロックグループ内に存在する。家のブロックでは、まだ占有されておらず、国が同じ方向に家に住んでされる可能性があり、すべての場合には、(XまたはY軸のいずれか)、その後、我々は**仮想を形成するこれらの家を呼び出すことができます国立**。私は、このブロックでは、最終的にはに住んでいるでしょう、この国の人々は知らないが、我々は、仮想国民から知っている、家は人々がこの国に住んでいることはできませんのと同じ方向に、他の地域とのけれどもA。

  • LINEXクラス:

    • GroupBase同じ方法

  • 線を引いたクラス:

    • GroupBase同じ方法

  • Matrixクラス:

    • get_all_pos(method): method=”a”、すべての住宅を取得する場合は、リストオブジェクト、method=”u” 使用可能なすべてのリストを取得する場合は、method=”s”、すべての生きて人間を取得する場合家のリスト。

    • sort_unassigned_pos_by_possibles(possibles):可用性のすべてのリストを取得し、これらを利用できるようにすることができなければならないだけpossibles== 0は、使用可能なすべてを取得する場合は、滞在するいくつかの国をpossibles。多くの国々が居住されるときに戻って応答、小型、大規模排出される。

    • can_see(p0, method=”u”, num=0): このような=0ナショナル·テンキーなどのハウス(P0)家のリストを見ることができ得る、唯一の家に住んでいる民のための国別コードを可能にするために利用できるようにことを示しています!。

    • setit(X、Y、V):ある家の安全な座標(x、y)に住んでいる人々のためのV国コードをしてみましょう。

    • (X、Y、V)を減少させる:ハウス(x、y)は、他の利用可能性をチェックするときは、この家を見ることができ、すでにこの国では(V)の可能性を生きる人々を失うため、このように利用できます。

    • 許可(X、Y、V):テストこの国(V)の人々は座標(x、y)の家に住むことができるかどうか?

    • (ファイル)をお読みください。定義ファイル(ファイル)からこの谷、人や居住の場所に最初の国を読み込みます。

数独定義ファイル

あなたは、数独の初期条件を定義することができます。テキストファイルの行に、以下に示すように、フォームXで、Y、V、、このプロジェクトは、[インストールディレクトリ]/独/ data /ディレクトリに置き、数独の数と定義されている、家の座標と乗員を定義内側。

例の定義は、初期の外観や外溶液の外観
m3.data

数独の外観を開始

数独は、溶液の外観でした

_images/m3.png _images/origin.png _images/result.png