功能中的鱼卡游戏错误

时间:2013-07-25 04:19:24

标签: python function python-2.7 typeerror

好的,这里有一些背景信息:

我的纸牌游戏中有4个玩家,每个玩家都有一手牌。 pHands是其他4个玩家手中的名单 (pHands中还有4个其他列表)

列表在pHands(玩家的手)中看起来像这样: ['as','2s','4h',.............,'ad']

列表中每个元素的第一个字符是卡片,列表中每个元素的第二个字符是套件。

我想在列表的每个元素中取出套装,所以我有以下功能:

def slicing(player):

    slicing_p1(player)
    slicing_p2(player)

def slicing_p1(player):

    pHandsSlice = pHands[player]
    pHandsString = ", ".join(pHands[player])
    x = len(pHands[player])
    for i in range(x):
        y = ''.join(pHandsSlice[i])
        y = y.replace(y[1], "")
        global myStrList
        global myStr
        myStrList = myStrList + y
        myStr = myStr + y + ","

def slicing_p2(player):

    x = len(myStr)
    global myStr
    global myStrList
    myStr = myStr[:-1]
    myStrList = list(myStrList)

然后我执行这些功能:

slicing(0)
slicing(1) <------- this is where the error occurs. 

ERROR:

 File "C:\Users\xxx\Downloads\UPDATE Assignment 2 (of 2)\GoFishPack\GoFishGameEngineSkeleton.py", line 63, in slicing
slicing_p1(player)
 File "C:\Users\xxx\Downloads\UPDATE Assignment 2 (of 2)\GoFishPack\GoFishGameEngineSkeleton.py", line 75, in slicing_p1
myStrList = myStrList + y

TypeError:只能将列表(不是“str”)连接到列表

这里发生了什么,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

问题是当你做类似+的事情时,python期望这是一个列表。这是一个例子。

>>> [1, 2, 30] + [1, 3]
[1, 2, 30, 1, 3]

此过程称为连接。由于您只能连接两个列表,因此当您尝试将列表与非列表列表连接时,会收到错误。在你的情况下y是一个str。您要做的是将y追加到您的列表myStrList。您可以通过在myStrList上调用“追加”方法来执行此操作。

>>> myStrList = [1, 2, 4]
>>> y = 'a'
>>> myStrList.append(y)
[1, 2, 4, 'a']

答案 1 :(得分:0)

如果您只想获得每张卡片的套装,那么就这样做:

for playerhand in pHands:
    for card in playerhand:
        print card[1]

如果你想在特定玩家的手中获得所有牌的套装,那么请执行以下操作:

def suits(player):
    for card in pHands[player]:
        print card[1]

然后你可以suits(1)来打印玩家1手中每张牌的套装。

如果你想删除每张卡片上的套装(即,每个玩家只留下一个数字列表),那么:

def remove_suits():
    newhands = [] # temporary variable that will replace pHands
    for playerhand in pHands: # for each hand
        newhand = [] # temporary variable for what their new hand will be
        for card in playerhand:
            newcard = card[0] # make the card equal to only the first character in the hand, in this case, the number
            newhand.append(newcard) # store this card to the temporary variable
        newhands.append(newhand) # push this hand to the temporary variable for the new set of hands
    global pHands # if you're working with globals
    pHands = newhands # now change pHands to be equal to your new list

答案 2 :(得分:0)

因为你试图连接一个列表和一个str

说你的玩家手牌是['as','2s','4d','4h'],这意味着for循环将输出

a
2
4
4

如果您执行type(y),则会显示为<type "str">,因此它们是字符串

然后你尝试在这一行上添加字符串列表:

myStrList = myStrList + y

您需要使用append()将字符串转换为列表的新项目

所以在for循环的每次迭代中都需要这样做:

myStrList.append(y)