Я собираюсь сделать карточную игру и в данный момент работаю над ее началом. Что меня смущает, так это сортировка карт в руке по их рангу, затем по масти и в значительной степени по тому, как сократить количество повторений. На данный момент я, вероятно, мог бы сделать цикл for для организации карточек, а затем иметь 52 разных if для каждой возможности, но мне было интересно, проще ли это сделать, и много других повторяющихся задач. Спасибо :D Я поставлю код ниже:
from random import shuffle
class deckOfCards:
def __init__(self):
self.rank = ['2','3','4','5','6','7','8','9','T','J','Q','K','A']
self.suit = ['C', 'S', 'H', 'D']
self.deck = [r+s for r in self.rank for s in self.suit]
shuffle(self.deck)
def setValue(self, deck):
cnt = 1
self.value = {}
for i in self.deck:
self.value[i] = cnt
cnt += 1
class Deal:
def __init__(self, deck, position):
self.hand = deck[position::4] #divides the deck into 4 hands
hand = self.hand
def value(self, key): # Gives each card that the player has a value
newHand = {}
for i in self.hand:
if i in key:
newHand[i] = key[i]
return newHand
deck = deckOfCards()
player1 = Deal(deck.deck, 0) #######################################
player2 = Deal(deck.deck, 1) # Example of repetition that I wanted #
player3 = Deal(deck.deck, 2) # to get rid of if possible #
player4 = Deal(deck.deck, 3) #######################################
РЕДАКТИРОВАТЬ: я думаю, что это очень хорошо работает для сортировки карточек, но я все еще не понимаю, как устранить некоторые повторения. Спасибо за всю помощь :D
def sortHand(player):
hand = player.hand
for i in hand:
for i in hand:
index = player1.hand.index(i)
if index != 12:
if deck.value[i] > deck.value[hand[index+1]]:
hand.insert(index+1, hand.pop(index))
1 ответ
Я бы, наверное, немного упростил:
from random import shuffle
class Hand(list):
pass
class Deck(object):
rank = '23456789TJQKA'
suit = 'CSHD'
def deal(self, n):
deck = [r+s for r in Deck.rank for s in Deck.suit]
shuffle(deck)
return [Hand(sorted(deck[i::n], key=Deck.cmpkey)) for i in xrange(n)]
@staticmethod
def cmpkey(card):
return Deck.rank.index(card[0]), Deck.suit.index(card[1])
print Deck().deal(4)
При таком расположении результатом deal()
является список из четырех рук. Каждая рука сортируется по рангу, а затем по масти.
(Я не полностью понял логику «значения», поэтому исключил ее из своего примера.)
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.