操纵卡片以确定它们是否满足特定要求

时间:2019-05-15 04:33:30

标签: python python-3.6

有一个随机选择的扑克牌列表,该列表将包含多达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。

0 个答案:

没有答案