0

カード base_card を消費する関数 higher_in_rank を作成し、base_card より高いランクを持つすべてのカードのリストを作成し、ランクの昇順で並べ替える必要があります。カードのランキングは以下の通りです。

  • スートで言えば、クラブはダイヤよりも低く、ハートよりも低く、スペードよりも低くなります。
  • 2 枚のカードが同じスートの場合、値が大きいカードのランクが高くなります。

例えば:

 higher_in_rank(card('spades', 8)) => [card('spades', 9), card('spades', 10)] 
 higher_in_rank(card('diamonds', 6)) =>
    [card('diamonds',7), card('diamonds', 8), ..., card('hearts',1),
    ..., card('hearts',10), card('spades', 1), ..., card('spades', 10)]

どこから始めればいいのかわからない。私は次のものを持っています:

class card:
    'Fields: suit, value'
    def __init__(self, suit, value):
        self.suit = suit
        self.value = value
    def __repr__(self):
        return '{suit} {value}'.format(suit=self.suit,value=self.value)
  # A card is an object card(suit, value) where
  # * suit is one of 'clubs', 'spades', 'diamonds', 'hearts', and
  # * value is an integer in the range 1..10

def higher_in_rank(base_card):
    if base_card.suit == 'clubs':
        return     #clubs, diamonds, hearts, spades
    if base_card.suit == 'diamonds':
        return     #diamonds, hearts, spades
    if base_card.suit == 'hearts':
        return     #hearts, spades
    if base_card.suit == 'spades':
        return     #spades

このコードの作成方法がわかりません。

4

2 に答える 2

0

すべてのカードのソートされたリストを設定すると、指定されたカードのインデックスを見つけて、リスト内のすべてを返すことで、指定されたカードよりも上位のすべてのカードをすばやく取得できます。例えば:

class card:
    'Fields: suit, value'
    def __init__(self, suit, value):
        self.suit = suit
        self.value = value
    def __repr__(self):
        return '{suit} {value}'.format(suit=self.suit,value=self.value)
    def __eq__(self, other):
        return (isinstance(other, self.__class__) and 
                self.suit == other.suit and self.value == other.value)

all_cards = [card(s, v) 
             for s in ('clubs', 'diamonds', 'hearts', 'spades')
                 for v in range(1, 11)]

def higher_in_rank(base_card):
    return all_cards[all_cards.index(base_card)+1:]

例:

>>> higher_in_rank(card('spades', 8))
[spades 9, spades 10]
>>> higher_in_rank(card('diamonds', 6))
[diamonds 7, diamonds 8, diamonds 9, diamonds 10, hearts 1, hearts 2, hearts 3, hearts 4, hearts 5, hearts 6, hearts 7, hearts 8, hearts 9, hearts 10, spades 1, spades 2, spades 3, spades 4, spades 5, spades 6, spades 7, spades 8, spades 9, spades 10]
于 2013-04-02T17:17:07.327 に答える