2

Python でボード ゲームのモノポリーをプログラミングしています。モノポリーには、プレイヤーが購入できる 3 種類の土地があります: プロパティ (ボードウォークなど)、鉄道、ユーティリティです。プロパティには、6 つの条件 (0 ~ 4 軒の家、またはホテル) に対する可変の購入価格と賃貸料があります。鉄道と公益事業には、所有している他の鉄道または公益事業の数に基づいて固定価格と賃料があります。

私は 3 つのディクショナリ属性を含む Game() クラスを持っています。そのすべてのキーは、ボード上の土地区画の 0 ~ 39 の位置です。

  • 値は、スペースの名前、購入価格、カラー グループ、家賃 (タプル) を含むリストです。
  • スペース名のみで構成される .railroads。
  • .utilities にもスペース名のみが含まれます。

これを行ったのは、特定の時点で、適切なディクショナリを繰り返し処理して、そのディクショナリでプレーヤーが他の土地区画を所有しているかどうかを確認したいからです。また、値の数が異なるためです。

Game() には space_types というタプルもあり、各値は空間のタイプ (不動産、鉄道、ユーティリティ、贅沢税、GO など) を表す数値です。プレイヤーが座っている space_type の種類を調べるには:

space_type = space_types[boardposition]

また、buy_property() メソッドを持つ Player() クラスもあり、次のような print ステートメントが含まれています。

"You bought PropertyName for $400."

ここで、PropertyName はスペースの名前です。しかし、今は if/elif/else ブロックを使用する必要があります。これは醜いようです:

    space_type = Game(space_types[board_position])
    if space_type is "property":
         # pull PropertyName from Game.properties
    elif space_type is "railroad":
         # pull PropertyName from Game.railroads
    elif space_type is "utility":
         # pull PropertyName from Game.utilities
    else:
         # error, something weird has happened

私がやりたいことは次のようなものです:

    dictname = "dictionary to pull from"  # based on space_type
    PropertyName = Game.dictname  # except .dictname would be "dictionary to pull from"

Python で変数の値を参照する属性の名前として渡すことは可能ですか? また、私がこれに根本的に間違ったアプローチをしていると言ってくれたり、より良い方法を提案してくれたりすることにも感謝します。

4

3 に答える 3

2

getattr次の関数を使用できます。

property_name = getattr(Game, dictname)
于 2013-06-12T01:44:01.497 に答える
2

辞書の辞書はどうですか?

D= {"property": Game.properties, "railroad": Game.railroads, "utility": Game.utilities}
space_type = Game(space_types[board_position])
dictname = D[space_type]
于 2013-06-12T01:44:44.790 に答える