解决 TypeError:只能将元组(不是“str”)连接到元组

Posted

技术标签:

【中文标题】解决 TypeError:只能将元组(不是“str”)连接到元组【英文标题】:Resolving TypeError: can only concatenate tuple (not "str") to tuple 【发布时间】:2022-01-11 01:01:38 【问题描述】:

所以我试图在 python 中创建一个二十一点游戏,但我收到一个我不知道如何解决的类型错误。我为卡片创建了一个类,可以让我轻松打印出单张卡片的名称,但我也希望能够打印卡片组内卡片的名称。为此,我想我会使用我在 Card 类中使用的字符串方法。

import random

symbols = ('Spades','Diamonds','Hearts',"Clubs")
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace')
values = 'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 
            'Nine':9, 'Ten':10, 'Jack':11, 'Queen':12, 'King':13, 'Ace':14

playing = True

class Card:
    
    def __init__(self,symbol=0,rank=0):
        self.rank = ranks
        self.symbol = symbol
        value = values [rank]
    
    def __str__(self):
        return self.rank + "of" + self.symbol

class Deck:
    
    def __init__(self):
        self.deck = []  # start with an empty list
        for symbol in symbols:
            for rank in ranks:
                self.deck.append(Card(symbol,rank))  # build Card objects,add to list
    
    def __str__(self):
        deck_comp = ''  # start with an empty string
        for Card in self.deck:
            deck_comp += '\n'+ Card.__str__() # add each Card object's print string
        return 'The deck has:' + deck_comp

    def shuffle(self):
        random.shuffle(self.deck)
        
    def deal(self):
        single_card = self.deck.pop()
        return single_card

test_deck = Deck()
print(test_deck)

这是我收到的错误消息。我知道 Card.str() 可能保存为元组,但我该如何解决这个问题?

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-41-1bfc314b8e70> in <module>
      1 test_deck = Deck()
----> 2 print(test_deck)

<ipython-input-40-36ad41485748> in __str__(self)
     10         deck_comp = ''  # start with an empty string
     11         for Card in self.deck:
---> 12             deck_comp += '\n' + Card.__str__() # add each Card object's print string
     13         return 'The deck has:' + deck_comp
     14 

<ipython-input-31-543b708a921e> in __str__(self)
      7 
      8     def __str__(self):
----> 9         return self.rank + "of" + self.symbol

TypeError: can only concatenate tuple (not "str") to tuple

【问题讨论】:

【参考方案1】:

在变量 self.rank 中有元组,在变量 self.symbol 中有字符串

需要将元组转为字符串,可以使用python join方法:

return ', '.join(self.rank) + "of" + self.symbol

【讨论】:

【参考方案2】:

我认为您的卡片 __init__() 有错字。试试self.rank = rank 而不是self.rank = ranks

我想这不是您代码的唯一问题,但它应该是您的解决方法。

【讨论】:

是的,你是对的! self.rank=ranks 插入了整个元组,而不是只在元组中插入一个值,因此出现错误。现在一切正常。谢谢!

以上是关于解决 TypeError:只能将元组(不是“str”)连接到元组的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:元组索引必须是整数,而不是使用 pyspark 和 RDD 的 str

TypeError:在使用 Python 进行网络抓取时,只能将 str(而不是“列表”)连接到 str 错误

将当前url写入csv TypeError时:只能将列表(不是“元组”)连接到列表

将元组条目变量转换为数学问题的 int 的问题

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

Pandas TypeError:只能将str(不是“int”)连接到str