好的,这里有一些背景信息:
我的纸牌游戏中有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”)连接到列表
这里发生了什么,我该如何解决这个问题?
答案 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)