Python 我需要对“进行更改”;cmp();方法,以便';ace";在等级中将大于;“国王”;

Python 我需要对“进行更改”;cmp();方法,以便';ace";在等级中将大于;“国王”;,python,python-3.x,class,Python,Python 3.x,Class,如何更改cmp方法,使等级中的ace大于king class Cards: suits = ["clubs", "diamonds", "hearts", "spades"] ranks = ["narf", "ace", "2", "3", "4", "5", "6&q

如何更改
cmp
方法,使等级中的
ace
大于
king

class Cards:
    suits = ["clubs", "diamonds", "hearts", "spades"]
    ranks = ["narf", "ace",  "2", "3", "4", "5", "6", "7", "8", "9", "jack", "queen", "king"]


    def __init__(self, suit= 0, ranks = 0):
        self.suit = suit
        self.rank = ranks

    def __str__(self):
        return (self.ranks[self.rank] + "of" + self.suits[self.suit])

    def cmp(self, other):

        if self.suit > other.suit: return 1
        if self.suit < other.suit: return -1

        # .. if suits are same then check for ranks
        if self.ranks[1] < other.ranks[:]: return 1
        if self.rank > other.rank:   return 1
        if self.rank < other.rank:   return-1

        return 0

    def __eq__(self, other):
        return self.cmp(other) == 0

    def __le__(self, other):
         return self.cmp(other) <= 0

    def __ge__(self, other):
        return self.cmp(other) >= 0
        
    def __gt__(self, other):
        return self.cmp(other) > 0

    def __lt__(self, other):
        return self.cmp(other) < 0

    def __ne__(self, other):
        return self.cmp(other) != 0

card1 = Cards(1, 1)
card2 = Cards(1, 13)

print(card1 < card2)

    
类卡:
套装=[“梅花”、“钻石”、“红心”、“黑桃”]
排名=[“全国民主联盟”、“王牌”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“杰克”、“女王”、“国王”]
定义初始(自我,套装=0,等级=0):
西服
self.rank=等级
定义(自我):
return(self.ranks[self.rank]+“+self.suits[self.suits]”中的“+”)
def cmp(自身、其他):
如果self.suit>other.suit:返回1
如果self.suitother.rank:返回1
如果self.rank0
定义(自身、其他):
返回自cmp(其他)<0
定义(自身、其他):
返回自我。cmp(其他)!=0
卡片1=卡片(1,1)
卡片2=卡片(1,13)
打印(卡片1<卡片2)

您可以在
cmp
方法中为
aces
分配一个较大的值,并比较这些值而不是索引

def cmp(self, other):

    if self.suit > other.suit: return 1
    if self.suit < other.suit: return -1

    s_val, o_val = self.ranks, other.ranks
    s_val = float('inf') if s_val == 1 else s_val
    o_val = float('inf') if o_val == 1 else o_val

    if s_val < o_val: return 1
    if s_val > o_val: return 1
    if s_val < o_val: return -1

    return 0
def cmp(自身、其他):
如果self.suit>other.suit:返回1
如果self.suito_val:返回1
如果s_val
您可以在
cmp
方法中为
aces
分配一个较大的值,并比较这些值而不是索引

def cmp(self, other):

    if self.suit > other.suit: return 1
    if self.suit < other.suit: return -1

    s_val, o_val = self.ranks, other.ranks
    s_val = float('inf') if s_val == 1 else s_val
    o_val = float('inf') if o_val == 1 else o_val

    if s_val < o_val: return 1
    if s_val > o_val: return 1
    if s_val < o_val: return -1

    return 0
def cmp(自身、其他):
如果self.suit>other.suit:返回1
如果self.suito_val:返回1
如果s_val
您具体遇到了哪些问题?从标题听起来你已经知道需要做什么了。
self.ranks[1]
没有意义。不能将字符串与列表进行比较。还有,为什么在比较之前要复制一份列表?为什么不把
ace
放在
king
后面的
ranks
列表中?你能补充一下你想要达到的目标和问题是什么吗?你可以用
functools来装饰你的类。总排序
;然后,您只需要定义
\uuuueq\uuuu
\uult\uuuu
\uuu le\uuuu
\uu gt\uuuuu
中的任何一个。装饰师将为您生成其余的。您具体遇到了什么问题?从标题听起来你已经知道需要做什么了。
self.ranks[1]
没有意义。不能将字符串与列表进行比较。还有,为什么在比较之前要复制一份列表?为什么不把
ace
放在
king
后面的
ranks
列表中?你能补充一下你想要达到的目标和问题是什么吗?你可以用
functools来装饰你的类。总排序
;然后,您只需要定义
\uuuueq\uuuu
\uult\uuuu
\uuu le\uuuu
\uu gt\uuuuu
中的任何一个。装饰师将为您生成其余部分。