不管当前索引如何获取下两个索引

2024-09-28 23:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个模拟石头,布,剪刀游戏,每个名字有两个敌人,所以我必须能够抓住所有的名字,无论位置的值。你知道吗

假设给我这个清单:

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

谢谢你。你知道吗


Tags: selfreturnifnames名字statequeensstr
2条回答

正如评论所说,你可以使用模运算:

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

只需将偏移量添加到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。你知道吗

相关问题 更多 >