Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 自定义类和排序()的问题_Python_Sorting - Fatal编程技术网

Python 自定义类和排序()的问题

Python 自定义类和排序()的问题,python,sorting,Python,Sorting,我做了一个自定义类作为练习,一副牌。我有一个函数可以用random.shuffle()函数洗牌,但我似乎无法让sort()工作,我知道我可以重建牌组,但如果我在排序之前从牌组中移除牌,则无法工作。排序() import random class Card: """ Represents a card using a suit and a rank suits are Clubs, Diamonds, Hearts, Spades represented by 0, 1, 2,

我做了一个自定义类作为练习,一副牌。我有一个函数可以用
random.shuffle()
函数洗牌,但我似乎无法让
sort()
工作,我知道我可以重建牌组,但如果我在排序之前从牌组中移除牌,则无法工作。
排序()

import random

class Card:
    """ Represents a card using a suit and a rank
    suits are Clubs, Diamonds, Hearts, Spades represented by 0, 1, 2, 3
    the ranks are 1 to 13 for Ace, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King"""

    def __init__(self, rank=2, suit=1):
        self.rank = rank
        self.suit = suit

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
    rank_names = [None, 'Ace', '1', '2', '3', '4', '5', '6',
                 '7', '8', '9', '10', 'Jack', 'Queen', 'King']

    def __str__(self):
        return '%s of %s' %(Card.rank_names[self.rank], 
                            Card.suit_names[self.suit])

    def __lt__(self, other):
        return self.suit, self.rank < other.suit, other.rank

class Deck:
    """ Representing a deck of cards, containing one of each card """

    def __init__(self):
        self.new_deck()

    def new_deck(self):
        self.cards = []
        for suit in range(4):
            for rank in range(1, 14):
                card = Card(rank, suit)
                self.cards.append(card)

    def __str__(self):
        res = []
        for card in self.cards:
            res.append(str(card))
        return '\n'.join(res)

    def pop_card(self):
        return self.cards.pop()

    def add_card(self, card):
        self.cards.append(card)

    def shuffle(self):
        random.shuffle(self.cards)

    def sort(self):
        self.cards.sort()


deck = Deck()
deck.shuffle()
deck.sort()
print(deck)
随机导入
班级卡:
“”“表示使用套装和等级的卡
西装是梅花、钻石、红桃、黑桃,代表0、1、2、3
王牌排名从1到13,1、2、3、4、5、6、7、8、9、10、杰克、女王、国王
定义初始(自我,等级=2,适合=1):
self.rank=等级
西服
西服名称=[‘梅花’、‘钻石’、‘红桃’、‘黑桃’]
排名名称=[无、'Ace','1','2','3','4','5','6',
“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”]
定义(自我):
返回“%s(共%s个)”(卡片.rank\u名称[self.rank],
卡片套装(姓名[自我套装])
定义(自身、其他):
返回self.suit,self.rank

Python将打印一个随机的,而
deck.sort()
就是不起作用

您的
方法没有返回
bool
,请尝试以下操作:

def __lt__(self, other):
    return (self.suit, self.rank) < (other.suit, other.rank)

您的
\uu lt\uu
方法没有返回
bool
,请尝试以下操作:

def __lt__(self, other):
    return (self.suit, self.rank) < (other.suit, other.rank)

\uu lt\uu
应返回一个
bool
,该
self.suit,self.rank
不起作用。。。你可能想要
self.rank
或类似的东西,这取决于你如何/如果你想定购西装……作为旁注,你在
rank\u names
列表中有15个元素:
None
用于索引0,另外还有14个元素。我认为你应该删除
1
\uuu lt\uuu
应该返回一个
bool
,它
self.suit,self.rank
不起作用。。。你可能想要
self.rank
或类似的东西,这取决于你如何/如果你想定购西装……作为旁注,你在
rank\u names
列表中有15个元素:
None
用于索引0,另外还有14个元素。我认为你应该删除
1