Python 在Card类中获取TypeError
这是下面的输出。我得到了52张卡片的标准卡片,但后面是一个类型错误。我不知道从哪里得到错误信息,也不知道如何修复错误。我尝试了很多方法,但它要么不打印任何内容,要么会再次给我一个非字符串的类型错误(类型卡片) 我希望它能够在矩阵中显示我的52张牌,但如果我甚至不能让它正常显示,那就令人沮丧了。Python 在Card类中获取TypeError,python,python-3.x,string,list,class,Python,Python 3.x,String,List,Class,这是下面的输出。我得到了52张卡片的标准卡片,但后面是一个类型错误。我不知道从哪里得到错误信息,也不知道如何修复错误。我尝试了很多方法,但它要么不打印任何内容,要么会再次给我一个非字符串的类型错误(类型卡片) 我希望它能够在矩阵中显示我的52张牌,但如果我甚至不能让它正常显示,那就令人沮丧了。 import random class Card: def __init__(self, rank, suit): # initialize number variables here
import random
class Card:
def __init__(self, rank, suit): # initialize number variables here
self._rank = rank
self._suit = suit
def __str__(self): #overload this to get a readable string representation of our card object
return str(self._rank) + ' ' + str(self._suit)
def __eq__(self, other):
if self._rank == other._rank:
return True
def __ne__(self, other):
if self._rank != other._rank:
return True
class Deck:
def __init__(self):
# create a list of card objects only need to pass in self
#intialize a string or list of suits
#intialize a string or list of ranks
# building the list of cards
self._deck = []
self._dealt = []
suits = ['S', 'C', 'D', 'H']
ranks = ['2', '3' , '4', '5', '6', '7' , '8', '9','T', 'J' , 'Q', 'K', 'A']
for suit in suits:
for rank in ranks:
self._deck.append(Card(rank,suit))
def __str__(self):
for i in self._deck:
print(i)
所需输出:
2 C, 3 C, 4 C, 5 C, 6 C,
7 C, 8 C, 9 C, T C, J C,
Q C, K C, A C, 2 D, 3 D,
4 D, 5 D, 6 D, 7 D, 8 D,
9 D, T D, J D, Q D, K D,
A D, 2 H, 3 H, 4 H, 5 H,
6 H, 7 H, 8 H, 9 H, T H,
J H, Q H, K H, A H, 2 S,
3 S, 4 S, 5 S, 6 S, 7 S,
8 S, 9 S, T S, J S, Q S,
K S, A S
感谢您的帮助,我们非常感谢
\uuuu str\uuuu
不应打印任何内容。它应该返回要打印的字符串。那是你的问题
class Deck:
...
def __str__(self):
return '\n'.join( str(i) for i in self._deck )
打印(数据组)时,它使用数据组。str。首先,由于在str内部打印每张卡,它们会打印,然后str不会返回任何值,因此您会收到错误消息
换甲板。str:
def __str__(self):
return self._deck
要修复TypeError,您需要
\uuuu str\uuuu
中的返回值。虽然可以(但不推荐)打印内容,但要确保返回字符串
要以所需的矩阵形式打印,可以创建一个numpy数组并打印:
import numpy as np
class Deck:
def __init__(self):
# create a list of card objects only need to pass in self
#intialize a string or list of suits
#intialize a string or list of ranks
# building the list of cards
self._deck = []
self._dealt = []
suits = ['S', 'C', 'D', 'H']
ranks = ['2', '3' , '4', '5', '6', '7' , '8', '9','T', 'J' , 'Q', 'K', 'A']
for suit in suits:
for rank in ranks:
self._deck.append(str(Card(rank,suit)))
def __str__(self):
return str(np.array(self._deck).reshape(13,4))
deck = Deck()
print(str(deck))
>>>
[['2 S' '3 S' '4 S' '5 S']
['6 S' '7 S' '8 S' '9 S']
['T S' 'J S' 'Q S' 'K S']
['A S' '2 C' '3 C' '4 C']
['5 C' '6 C' '7 C' '8 C']
['9 C' 'T C' 'J C' 'Q C']
['K C' 'A C' '2 D' '3 D']
['4 D' '5 D' '6 D' '7 D']
['8 D' '9 D' 'T D' 'J D']
['Q D' 'K D' 'A D' '2 H']
['3 H' '4 H' '5 H' '6 H']
['7 H' '8 H' '9 H' 'T H']
['J H' 'Q H' 'K H' 'A H']]
所需矩阵的格式是什么?目前,您正在创建和打印1D列表。格式为{}、{}、{}、{}、{、{、}、\n{、{、{、{、{、}、{、{、}、{、{、}、\n@Lucasngi试图用卡片显示列表classfyi这似乎不起作用我输入答案时出错,我放了一副牌。我编辑了我的答案,仍然不对。你需要“self._deck”。谢谢你,大脑今天没有功能。谢谢蒂姆,它在水平显示我的数字方面发挥了作用。我将尝试找到一种方法,以我需要的格式打印!
import numpy as np
class Deck:
def __init__(self):
# create a list of card objects only need to pass in self
#intialize a string or list of suits
#intialize a string or list of ranks
# building the list of cards
self._deck = []
self._dealt = []
suits = ['S', 'C', 'D', 'H']
ranks = ['2', '3' , '4', '5', '6', '7' , '8', '9','T', 'J' , 'Q', 'K', 'A']
for suit in suits:
for rank in ranks:
self._deck.append(str(Card(rank,suit)))
def __str__(self):
return str(np.array(self._deck).reshape(13,4))
deck = Deck()
print(str(deck))
>>>
[['2 S' '3 S' '4 S' '5 S']
['6 S' '7 S' '8 S' '9 S']
['T S' 'J S' 'Q S' 'K S']
['A S' '2 C' '3 C' '4 C']
['5 C' '6 C' '7 C' '8 C']
['9 C' 'T C' 'J C' 'Q C']
['K C' 'A C' '2 D' '3 D']
['4 D' '5 D' '6 D' '7 D']
['8 D' '9 D' 'T D' 'J D']
['Q D' 'K D' 'A D' '2 H']
['3 H' '4 H' '5 H' '6 H']
['7 H' '8 H' '9 H' 'T H']
['J H' 'Q H' 'K H' 'A H']]