2016-11-13 57 views
0

我試圖創建一個模擬石頭,剪子,布的遊戲,每個名字有兩個敵人,所以我必須能夠抓住所有的名值的位置無關。獲取接下來的兩個指標,無論當前指數

說我給這個名單:

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

,我試圖使用帶有索引是值的邏輯和會聚集索引的接下來的兩個值。每個索引都會返回這些值。

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

呃......'num','(NUM + 1)%LEN(地名)'和'(NUM + 2)%LEN(地名)'? – 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]) 
+0

老兄謝謝你,我沒有想到的第二個解決方案的選項。大家很奇怪,我最終使用:返回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]) 

爲了確保你不走離數組的結尾,你可能要添加一個if聲明將檢查self.state不會被設置得比較高len(names) - 2

+0

我不能這樣做,因爲我需要的士兵能夠得到「國王」和「皇后」的「敵人」 - 我需要找到一種方法,找到一種方法,實質上循環回到循環的開始 – Chance