0

さて、ここに少し背景情報があります:

私のカードゲームには 4 人のプレイヤーがいて、各プレイヤーは手札を持っています。pHands は 4 人の他のプレイヤーのハンドのリストです (pHands 内には他に 4 つのリストがあります)

リストは pHands (プレイヤーの手) では次のようになります: [ 'as', '2s', '4h', ............. , 'ad']

リスト内の各要素の最初の文字はカードであり、リスト内の各要素の 2 番目の文字はスイートです。

リストのすべての要素でスーツを取り出したいので、次の関数があります。

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. 

エラー:

 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" ではない) のみをリストに連結できます

ここで何が起こっていますか?どうすれば修正できますか?

4

3 に答える 3

0

それは、リストと str を連結しようとしているからです

プレーヤーの手のリストは['as','2s','4d','4h']、for ループが出力することを意味します。

a
2
4
4

あなたがそうするならtype(y)<type "str">彼らは文字列です

次に、この行に文字列もリストに追加しようとします。

myStrList = myStrList + y

append()文字列をリストの新しい項目にするために使用する必要があります

したがって、 for ループの各反復で、次のことを行う必要があります。

myStrList.append(y)
于 2013-07-25T04:46:22.007 に答える
0

問題は、 + のようなことをすると、python はそれがリストであると想定することです。これがその例です。

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

このプロセスは連結と呼ばれます。2 つのリストしか連結できないため、リストをリスト以外のものと連結しようとすると、エラーが発生します。yあなたの場合はstrです。あなたがやろうとしているのはy、あなたのリストに追加することですmyStrList. で「append」メソッドを呼び出すことでそれを行いますmyStrList

>>> myStrList = [1, 2, 4]
>>> y = 'a'
>>> myStrList.append(y)
[1, 2, 4, 'a']
于 2013-07-25T04:38:53.077 に答える
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
于 2013-07-25T04:39:32.210 に答える