我正在做一个纸牌程序,它应该在Python shell而不是GUI中运行。但我不太确定如何编程卡,以便aRed Suit
可以附加到aBlack 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
谢谢。
最佳答案
这是一个可能性。这不是完全干净的数据,但可能会给你一个想法。不过,我想在你抄袭之前,你最好把这个例子理解得很好。如前所述,这与你最初的想法大不相同;)
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"))