无论当前索引如何,都要获取下两个索引

时间:2016-11-13 04:19:04

标签: python python-3.x

我正在尝试创建一个模拟摇滚,纸张,剪刀游戏,每个名字都有两个敌人,所以无论位置如何,我都必须能够获取所有名称的值。

说我得到这个清单:

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])

谢谢。

2 个答案:

答案 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])

答案 1 :(得分:0)

您只需将偏移量添加到answer = Console.ReadLine(); 即可。这不会改变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是否设置为高于{{1} }}