我想用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
有人知道为什么吗?任何帮助或反馈,表示赞赏:)
答案 0 :(得分:1)
对于卡值使用整数可能是一个好主意,因为如果使用字符串,则卡将按字母顺序排序。如果要保留卡值字符串,则可能要使用int()
函数进行转换。您有几种选择:
values
key = lambda x: int(x.value)
答案 1 :(得分:0)
尝试使用:
...
print(sorted([int(i.value) for i in player1]))