2016-11-13 7 views
0

私はモックロック、ペーパー、ハサミのゲームを2つの敵を持つそれぞれの名前で作成しようとしているので、位置にかかわらずすべての名前の値を取得できる必要があります。現在のインデックスに関係なく次の2つのインデックスを取得する

names = ["Kings", "Queens", "Jacks", "Jokers", "Masons", "Warriors", "Soldiers"] 

そして、私はインデックスが値であることとロジックを使用しようとしていますとインデックスの次の2つの値を収集します:

は、私はこのリストを与えていたとします。各インデックスはこれらの値を返します。私の現在の実装であること以下は、兵士とキングス

0 - 1, 2 
1 - 2, 3 
2 - 3, 4 
3 - 4, 5 
4 - 5, 6 
5 - 6, 0 
6 - 0, 1 

だから、 '戦士' はの敵を持つことになります

def state_to_text(self): 
    names = ["Kings", "Queens", "Jacks", "Jokers", "Masons", "Warriors", "Soldiers"] 
    if self.state == 0: 
     return str(names[1], names[2]) 
    if self.state == 1: 
     return str(names[2], names[3]) 
    if self.state == 2: 
     return str(names[3], names[4]) 
    if self.state == 3: 
     return str(names[4], names[5]) 
    if self.state == 4: 
     return str(names[5], names[6]) 
    if self.state == 5: 
     return str(names[6], names[1]) 
    if self.state == 6: 
     return str(names[0], names[1]) 

ありがとうございました。

+4

https://en.wikipedia.org/wiki/Modular_arithmetic –

+0

Uh ...「num」、「(num + 1)%len(names)」、および「(num + 2)%len(names)」? – TigerhawkT3

+0

私は本当にその質問を理解していません。おそらく、あなたが好きではないハードコーディングされたソリューションを使って最小限の例を投稿したとします。 –

答えて

1

コメントあなたは剰余演算を使用することができます言ったように:

def state_to_text(self): 
    names = ["Kings", "Queens", "Jacks", "Jokers", "Masons", "Warriors", "Soldiers"] 
    names_length = len(names) 
    return str(names[(self.state + 1) % names_length], names[(self.state + 2) % names_length]) 

それとも基本的にあなたは、単に追加1または2

def state_to_text(self): 
    names = ["Kings", "Queens", "Jacks", "Jokers", "Masons", "Warriors", "Soldiers", "Kings", "Queens"] 
    return str(names[self.state + 1], names[self.state + 2]) 
ことによってそれらを得ることができるので、リストの最後に最初の2つの要素を繰り返しを
+0

ありがとう、私は2番目の解決策の選択肢について考えなかった。私が使用していたと思っていた人は、以下のようになりました:return str(self.state + 1)%len(self.names)+ str(self.state + 2)%len(self.names) – Chance

0

self.stateにオフセットを追加するだけです。これは単なる式なので、self.stateは変更されません。あなたは、配列の終わりをオフに歩いていないことを確認するために

def state_to_text(self): 
    names = ["Kings", "Queens", "Jacks", "Jokers", "Masons", "Warriors", "Soldiers"] 
    return str(names[self.state + 1], names[self.state + 2]) 

、あなたはself.statelen(names) - 2よりも高く設定されないことを確認ifステートメントを追加することもできます。

+0

私は兵士が「キング」と「クイーンズ」の「敵」を得るために兵士を必要とするため、私はそれを行うことができません - 私は本質的にループの始めにループバックする方法を見つける必要があります – Chance

関連する問題