Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Card类中获取TypeError_Python_Python 3.x_String_List_Class - Fatal编程技术网

Python 在Card类中获取TypeError

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

这是下面的输出。我得到了52张卡片的标准卡片,但后面是一个类型错误。我不知道从哪里得到错误信息,也不知道如何修复错误。我尝试了很多方法,但它要么不打印任何内容,要么会再次给我一个非字符串的类型错误(类型卡片)

我希望它能够在矩阵中显示我的52张牌,但如果我甚至不能让它正常显示,那就令人沮丧了。

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']]