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
中的任何一个。装饰师将为您生成其余部分。