有一个随机选择的扑克牌列表,该列表将包含多达10张数字形式的扑克牌,后跟一个字母,表示套件(10 = 0,jack = 11,Queen = 12,King = 13)。
我想确定卡片列表是否满足特定特征。其特点是它们形成了“运行”。运行就像在单人纸牌游戏中一样,卡片如何逐渐增加,但每次都交替显示颜色。但是要注意的是,假设Ace出现在中间,则Ace可以用作任何数字值;如果Ace出现在开始或结尾,则表示卡片无效。 (王牌西装将是分配的任何名称,即“ AC”可以是任何数字,但必须是俱乐部。
给出一张卡片清单,例如['2C','5D','8H'] =无效
但是卡的初始顺序并不重要,即['2C','3D','4S']有效,但[['4S','2C','3D']也是如此。
['5C','AD','2S','3H']-将被视为有效。
['2C','3D','4H']无效,因为套件不能替代颜色
问题描述-详细信息。
如果该组是有效的奔跑(即一组3张或更多张纸牌,从价值最低的非Ace卡开始,到价值最高的非Ace卡结束,按照以下顺序形成连续的序列:值,并且颜色交替显示;请注意,就价值而言,A可以充当荒野(但不能将颜色作为奔跑的中间元素),得分是组成牌的价值之和,A得分为他们所持卡的价值。请注意,卡片的具体顺序在运行中并不重要,即['2C','3D','4S']和['4S','2C','3D']都构成相同的运行。>
# creates a dictionary which assigns the string card values as integers - to
# be references throughout code
deck_integers = dict([(str(i), i) for i in range(1,10)] + [("0", 10), ("J", 11),("Q", 12), ("K",13)])
# Function checks whether the cards are a valid run
def validate_run(cards):
last_value = None
colours = []
for i, (n, c) in enumerate(cards):
if c in colours:
return False
if n == 'A':
if not last_value or i == len(cards) - 1:
return False
current_value = last_value + 1
else:
current_value = deck_integers[n]
if last_value and last_value + 1 != current_value:
return False
last_value = current_value
return True
enter image description here 如果卡片有效运行,则返回True,否则返回False。