按礼节排序对象列表不排序吗?

时间:2018-08-26 01:28:45

标签: python python-3.x sorting

我想用python编程一个Hold'em扑克模拟器来学习该语言(python 3.7)。我首先创建一个包含值(例如5或K)和一套西装(例如心形或黑桃色)的Card类。通过将每个值与每个花色匹配来创建一副纸牌:

suits = ["Hearts","Diamonds","Spades","Clubs"]
values = ["2","3","4","5","6","7","8","9","10","11","12","13","14"] 
#note that i replaced the values J by 10, Q by 11...to later easier compare them
class Card(object):   
    value = 0
    suit = ""

    def __init__(self, value, suit):
        self.value = value
        self.suit = suit

def create_card(value, suit):  
    card = Card(value, suit)
    return card

deck = []
for i in values: 
    for j in suits:
        deck.append(create_card(i,j))

random.shuffle(deck)

所以现在我有了一张随机排列的纸牌对象列表,拿了两张纸牌并将它们分配给玩家。然后我再抽5张普通卡:

player1 = []
for i in range(2):
   player1.append(deck.pop(0))

commoncards = []
for i in range(5):
   commoncards.append(deck.pop(0))

现在我有两个卡对象列表,一个用于我的玩家全卡,另一个用于普通卡。到目前为止,一切都很好。现在我要确定玩家的手牌(例如,一对,两对或三对,等等),我认为一种不错的方法是加入玩家列表和普通卡列表的副本,并按值对它进行排序以检查是否两个“邻居”元素具有相同的值:

commoncardscopy=commoncards.copy()   
player1.extend(commoncardscopy)

player1.sort(key=lambda Card : Card.value)

for i in range(len(player1)):
    print(player1[i].value)

这应该打印7个排序的卡值(例如2,2,4,5,8,8,12),对吗?好吧,事实并非如此。这是示例输出:10 13 13 14 7 7 9

有人知道为什么吗?任何帮助或反馈,表示赞赏:)

2 个答案:

答案 0 :(得分:1)

对于卡值使用整数可能是一个好主意,因为如果使用字符串,则卡将按字母顺序排序。如果要保留卡值字符串,则可能要使用int()函数进行转换。您有几种选择:

  • 用整数列表替换values
  • 将代码替换为lambda并使用key = lambda x: int(x.value)

答案 1 :(得分:0)

尝试使用:

...
print(sorted([int(i.value) for i in player1]))