我正在尝试创建一个模拟摇滚,纸张,剪刀游戏,每个名字都有两个敌人,所以无论位置如何,我都必须能够获取所有名称的值。
说我得到这个清单:
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])
谢谢。
答案 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} }}