所以问题是有N个人排成一行,玩石头布剪刀。除了我,每个人只能使用一种手,表示为
['P', 'R', 'S', 'P']
表示N只手。你知道吗
我可以使用任何类型,并且处于任意位置
我需要知道一旦名单到达我的对手是什么位置,所以N-A-1。这意味着我必须反复浏览列表,找出每一场比赛的赢家,并将结果与列表中的下一个位置进行比较,直到找到为止。你知道吗
我尝试的是创建一个winners
的空数组,然后在给定的列表中枚举。你知道吗
一旦有了赢家的值,就会将其与列表枚举中下一个索引的值进行比较。你知道吗
我目前还没有解决当我进入最后一个迭代时会发生什么的方法,但是目前我的问题是我得到一个空列表作为优胜者的输出。你知道吗
任何关于这种逻辑列表的最佳实践的帮助都是很棒的,我还没有找到任何合适的。你知道吗
代码:
def previous_and_next(n, a, formations):
positions = list(formations)
print(positions)
winners = []
print(winners)
for i, pos in enumerate(positions):
nex = pos[i + 1]
if not winners:
if pos == 'R' and nex == 'P':
winners.append(nex)
elif pos == 'R' and nex == 'S':
winners.append(pos)
elif pos == 'R' and nex == 'R':
continue
elif pos == 'P' and nex == 'S':
winners.append(nex)
elif pos == 'P' and nex == 'R':
winners.append(pos)
elif pos == 'P' and nex == 'P':
continue
elif pos == 'S' and nex == 'R':
winners.append(nex)
elif pos == 'S' and nex == 'P':
winners.append(pos)
elif pos == 'S' and nex == 'S':
continue
if nex < len(positions-1):
if winners[-1:] == 'P' and nex == 'R' or nex == 'P':
continue
elif winners[-1:] == 'R' and nex == 'R' or nex == 'S':
continue
elif winners[-1:] == 'S' and nex == 'P' or nex == 'S':
continue
elif winners[-1:] == 'P' and nex == 'S':
winners.append(pos)
elif winners[-1:] == 'R' and nex == 'P':
winners.append(pos)
elif winners[-1:] == 'S' and nex == 'R':
winners.append(pos)
def main():
previous_and_next(5,0,'PRSP')
main()
你没有回应我要求澄清的评论。我现在发布了一个答案,我将修改后,你再次解释提示。我试着把你最初的帖子解释成一系列的步骤(正如我所理解的)。请让我知道这是否是您的计划流程:
编辑-附加问题:假设我们有:
既然我们已经到了第一局,到底发生了什么?你说两把剪刀被淘汰了,但是比赛怎么继续?我们是跳转到索引5的岩石上,让他们在索引6和纸比赛,还是跳转到最后一个有效的赢家(在这个例子中是索引2的纸),让他们在索引5和岩石比赛?谢谢你的进一步信息。你知道吗
编辑-这是我想出的一个解决方案。要计算出您需要进行多少手牌更改,您需要将您之前击败获胜手牌所需的手牌更改数(0或1)与您之后击败所有手牌所需的手牌更改数相加。我相信有一种更可爱的方式:
我不是100%确定这个问题在问什么,但您的问题似乎是试图将字符串与int进行比较。请尝试
nex = positions[i + 1]
而不是nex = i + 1
。你知道吗相关问题 更多 >
编程相关推荐