3

そこで、基本的な単語ゲームに取り組んでいます。このゲームでは、単語を作成してポイントを獲得するために使用する文字の「手」(辞書オブジェクト) が配られます。

この「手」は、多くの関数のパラメーターで使用されます。プレーヤーのスコアの計算、プレーヤーが 1 つまたは複数の文字を使用した後の手の文字数の更新、手の表示、プレーヤーの言葉の有効性のチェック、等

私が読んだすべてから、可能であればグローバル変数を避けるべきであることを知っています (理由はまだ完全にはわかりませんが)。

では、「手」をパラメーターとして使用する多くの関数に対して、他にどのような一般的なアプローチを使用できますか?

4

2 に答える 2

9

オブジェクトと呼びます。共有状態を持つクラスと、その状態を共有する関数を作成します。

これがグローバル変数よりも優れている理由は、同じ概念のより制限されたバージョンであるためです。どの関数がそれらの変数を操作しているかを明確に確認し、それらの変数に期待される不変条件を文書化 (および強制) できます。グローバル変数を使用すると、共有変数の状態について異なる期待を持つ関数を持つことが非常に簡単になります。

また、同じオブジェクトの複数のコピーを持つことができるため、変数をコレクションとしてキャストし、コレクションのメンバー間で相互に関連付ける代わりに、オブジェクトのコレクションを使用することで、コードが簡単になります。これらのオブジェクトは、定義した関数を介してのみ操作することができます

于 2012-09-18T17:45:16.963 に答える
8

クラスのカプセル化を使用します ... 以下を参照してください ... ゲームは両手を認識します

class Hand:
    def __init__(self):
       num_cards = 7
       self.cards = ["a" for i in range(num_cards)]

class Game:
    def __init__(self,num_hands=2):
        self.hands = [Hand() for i in range(num_hands)]
        self.current_turn = 0 
    def play(self):
        self.hands[self.current_turn].play()
        self.current_turn = (self.current_turn+1)%len(self.hands)

これは Python 3 コードです。Python 2 のクラスは から派生する必要がありますobject

...必須ではありませんが。そうしないと、一部の機能が失われます

于 2012-09-18T17:47:59.790 に答える