0

我正在尝试用 Python 制作一个简单的纸牌游戏。

我必须能够将我手牌列表中的任何牌向左移动 1 或 3 个空格,如果已经在该位置的牌与数字或套件匹配,那么我需要更换它。

这是我迄今为止尝试过的:

假设 MN 是指定移动的空格数。假设 MC 是指定移动那么多空格的卡。假设手是我手中当前牌的列表。

if MN == '1':
    Hand.replace(Hand[Hand.index(MC) - int(1)], MC)
if MN == '3':
    Hand.replace(Hand[Hand.index(MC) - int(3)], MC)

所以基本上我必须找出如何在我的卡片列表(手)中移动指定的卡片(MC)正确数量的空格(MN)。

如果我的手看起来像这样:

[ JC,  4C,  7D,  KS,  3S]

然后我应该能够将 3S 1 空间向左移动并替换 KS,因为它们具有相同的套件。

[ JC,  4C,  7D,  3S]

在此先感谢您的帮助。

4

2 回答 2

3

移动列表中的项目通常意味着将其从原始位置弹出并将其插入到所需位置。不幸的是,您的问题没有提供有关您的 Hand 和 Card 类是什么样子的信息,但如果 Hand 是一个简单的列表,那么应该执行以下操作:

HI = Hand.index(MC)
if (MN == '1') or (MN == '3'):
    Hand[HI - int(MN)] = MC
    Hand.pop(HI)

请注意,由于信息不足,此处省略了数字和套件的比较。

于 2011-11-07T07:37:05.037 回答
0

我会使用列表的切片符号:http ://docs.python.org/tutorial/introduction.html#lists

例如,假设您有一个这样的列表:

l = [1, 2, 3, 4, 5, 6, 7, 8]

如果您想将元素移动41 个空间,您可以执行以下操作:

index = 3
value = 4
spaces = 1
target = index - spaces
length = len(l)

# don't replace the element
l[0:target] + [value] + l[target:index] + l[index+1:length]
# results in [1, 2, 4, 3, 5, 6, 7, 8]

# do replace the element
l[0:target] + [value] + l[target+1:index] + l[index+1:length]
# results in [1, 2, 4, 5, 6, 7, 8]

使用参数indexvalue和提取spacestarget这足以提取成一个很好的函数。尝试使用其他值(不仅仅是 1 或 3)。如果spaces太高,结果将是原始列表。

如果您想将元素向右而不是向左移动,则必须稍微更改表达式,但这是相同的想法。

于 2011-11-07T07:36:32.750 回答