如何定义将应用于Python中多个列表的函数?

时间:2017-01-11 02:28:54

标签: string list function python-3.x

我是Python的初学者。我正在尝试创建一个扑克游戏,其中发出5x5网格牌,然后玩家可以分别左/右或上/下移动任何行或列。

我决定用五个五个字符串列表代表这个。 (虽然,如果你有更好的主意,我会很高兴听到它)。所以起始板可能看起来像:

['Ks', '5h', 'Ts', '3s', '7h']
['As', '9d', '5c', 'Jd', '8c']
['9s', '6h', '6d', '3c', '2c']
['Qd', '8h', 'Jh', '2d', 'Td']
['4h', 'Kd', 'Qs', '5d', '9c']

玩家可能会选择将顶行向左移动一个空格,这样可以给出一个像这样的棋盘:

['5h', 'Ts', '3s', '7h', 'Tc']
['As', '9d', '5c', 'Jd', '8c']
['9s', '6h', '6d', '3c', '2c']
['Qd', '8h', 'Jh', '2d', 'Td']
['4h', 'Kd', 'Qs', '5d', '9c']

最左边的牌掉落了,右边的牌组添加了一张新牌。然后玩家可以对任何行或列重复此操作,直到卡片用完卡片为止。

我遇到的问题是定义适用于任何这些列表的函数,而不是必须为我想做的任何事情创建五个近似重复项。

所以我从所有扑克牌的列表(称为“牌组”)和五个空列表开始,名为row0到row4。为了生成起始板,我现在要去:

def drawRight0():
    card = random.randint(0,len(deck)-1)
    row0.append(deck[card])
    del deck[card]

def drawRight1():
    card = random.randint(0,len(deck)-1)
    row1.append(deck[card])
    del deck[card]

...

def firstBoard():
    for i in range (5):
        drawRight0(), drawRight1(), drawRight2(), drawRight3(), drawRight4()

当然,我应该能够将其简化为“rowx.append”,但我无法理解。

这是一个类似于游戏动作的故事。如果我想定义如何向左移动一行,我可以这样做:

def shiftLeft0():
    for i in range(4):
        row0[i] = row0[i+1]
    del row1[4]
    drawLeft1()

......对于每一行,但这似乎效率低下。

最后,上下移动卡片有点棘手。目前,我正在使用以下功能:

def shiftUp0():
    row0[0] = row1[0]
    row1[0] = row2[0]
    row2[0] = row3[0]
    row3[0] = row4[0]
    del row4[0]
    card = random.randint(0,len(deck)-1)
    row4.insert(0,deck[card])
    del deck[card]

我应该能够循环前四行(虽然这不是一个大问题)。但同样,主要问题是需要为每列定义不同的功能,比如我还需要这样做:

def shiftUp3():
        row0[3] = row1[3]
        row1[3] = row2[3]
        row2[3] = row3[3]
        row3[3] = row4[3]
        del row4[3]
        card = random.randint(0,len(deck)-1)
        row4.insert(0,deck[card])
        del deck[card]

我想也许我应该对列表列表做些什么,比如

rows = [row0, row1, row2, row3, row4]

...但我不知道如何以我想要的方式应用它。

感谢您的协助!

1 个答案:

答案 0 :(得分:0)

这似乎是使用5x5电路板的一种非常困难的方式。你可以通过一个包含5个列表的列表更容易地做到这一点,每个列表有5个值,而不是像你在帖子末尾提到的那样有5个单独的列表。这可以像这样创建:
board = [[0 for i in range(5)] for j in range(5)]
然后,您可以像您一样使用电路板,通常可以访问列表中的值:
board[0][0] = 1 board[1][1] = 2 board --> [[1,0,0,0,0],[0,2,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
我认为你可以很容易地找出如何轻松地解决这个问题,如果事情不清楚或者你被困住,可以随时寻求更多的帮助。