Я хочу запрограммировать покер-симулятор холдема на python для изучения языка (python 3.7). Я начал с создания карточного класса, который содержит ценность (например, 5 или K) и костюм (например, червы или пики). Колода карт создается путем сопоставления каждого значения с каждой мастью:
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 * +1010 *
Кто-нибудь знает почему? Любая помощь или отзывы приветствуются:)