Как я могу добавить ограничения или правила в список в Python? - PullRequest
2 голосов
/ 13 марта 2012

Я делаю пасьянс, и он предназначен для запуска в оболочке Python вместо графического интерфейса.Но я не совсем уверен, как запрограммировать карты так, чтобы Red Suit мог быть добавлен к Black Suit и наоборот.Кроме того, номер карты, которая должна быть добавлена, должен быть ниже, чем карта до нее.

Я полагаю, что программа, используемая для добавления ограничений в стеки строк, может быть аналогична программе, используемой для добавления ограничений в стеки костюмов.Если это не так, не могли бы вы также помочь мне?Потому что я почти закончил проект, но я просто должен добавить правила.

Я пытался выяснить, как я мог это сделать, но это кажется довольно сложным.

def check(card1,card2):
    valid = True
    cardSuit = Card1[1]
    cardVal  = card1[0]

    if cardSuit2 == cardSuit[1]:
        valid = False

    elif value(CardVal1) > value(cardVal2):
        valid = False

    elif valid == False:
       # print Error Message

    return valid

# Function to call above function
def call():
    ok = check(card1,card2)
    if ok = True:
        # proceed with code

def value(str):
              if val is (2,3,4,5,6,7,8,9,10):
              denon = int(val)
              elif val = 'J':
              denon = 11
              elif val = 'Q':
              denon = 12
              elif val = 'K':
              denon = 13

    return denon

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Вот одна из возможностей.Это не совсем чистые данные, но может дать вам представление.Тем не менее, я полагаю, вам лучше понять пример, прежде чем вы начнете копировать.Как уже упоминалось, это довольно сильно отличается от вашей первоначальной идеи;)

CARD_VALUES=["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
SUIT_COLOR={"clubs": "black", "spades":"black", "hearts":"red", "diamonds":"red"}


class Card:
    def __init__(self, value, suit):
        if value not in CARD_VALUES:
            raise Exception("Invalid card value {}".format(value))

        if suit not in SUIT_COLOR:
            raise Exception("Invalid suit {}".format(suit))

        self.value = value
        self.suit = suit

    def suit_color(self):
        return SUIT_COLOR[self.suit]

    def card_value(self):
        return CARD_VALUES.index(self.value)

    def __repr__(self):
        return "({} of {})".format(self.value, self.suit)


class Row:
    def __init__(self):
        self.cards=[]

    def valid_add_card(self, card):
        if not self.cards:
            return True # true for empty deck

        last_card=self.cards[-1]
        return last_card.card_value()==card.card_value()+1 and last_card.suit_color()!=card.suit_color()

    def add_card(self, card):
        if self.valid_add_card(card):
            self.cards.append(card)
        else:
            raise Exception("Cannot add card {} to {}".format(card, self.cards[-1]))

    def __repr__(self):
        return " - ".join(str(c) for c in self.cards)


r=Row()
r.add_card(Card("J", "spades"))
r.add_card(Card("10", "hearts"))
r.add_card(Card("9", "clubs"))
print(r)
print("Last card won't work:")
r.add_card(Card("8", "spades"))
2 голосов
/ 13 марта 2012

Перечислите подклассы и реализуйте желаемую функциональность. http://www.cafepy.com/article/python_attributes_and_methods/ch03s02.html Если вы создаете подкласс Python List, он имеет БЕСПЛАТНУЮ встроенную функциональность, которая идеально подойдет для Solitare, append и pop, тогда вы можете реализовать проверку нужной вам карты.вызовите оригинальный метод List.

Кроме того, я бы создал объект Card.Может быть, легче все организовать таким образом.Он может отслеживать его цвет, комплект, отображение человека (если это карта лица)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...