【问题标题】:How could I add restrictions or rules to a list in Python?如何在 Python 列表中添加限制或规则?
【发布时间】:2012-03-29 08:42:04
【问题描述】:

我正在做一个纸牌程序,它的目的是在 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

谢谢。

【问题讨论】:

  • 你的代码有很多错误和反模式,你应该首先把它带到你所拥有的代码至少可以工作的地步。问题出在哪里,问题是什么?
  • @JochenRitzel;我只需要帮助将规则添加到列表中

标签: python list function


【解决方案1】:

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

另外我会创建一个Card 对象。以这种方式组织一切可能更容易。它可以跟踪它的颜色、套件、人的显示(如果它是一张人脸卡)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,让我看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2021-08-24
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多