我怎么能在Python中的列表中添加限制或规则

时间:2012-03-12 22:29:06

标签: python list function

我正在做一个纸牌程序,它意味着在Python shell而不是GUI中运行。但是,我不太确定如何对卡片进行编程,以便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 个答案:

答案 0 :(得分:3)

这是一种可能性。数据方面不是很干净,但可能会给你一个想法。但是,我想你在复制之前更好地理解这个例子。如上所述,这与您最初的想法完全不同;)

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"))

答案 1 :(得分:1)

子类列表并实现您想要的功能.http://www.cafepy.com/article/python_attributes_and_methods/ch03s02.html  如果你是Python List的子类,它带有免费的内置功能,非常适合solitare,appendpop你可以实现所需的卡片检查,然后调用原始的List方法。

另外我会创建一个Card对象。以这种方式保持一切有条理可能更容易。它可以跟踪它的颜色,套件,人体显示器(如果它是面部卡)