如何在Python中确定扑克手中的直线(序列)

时间:2018-05-24 18:21:46

标签: python sequence playing-cards

在python中,我有一个扑克手的得分跟踪器。

可能的卡牌排名:

A23456789TJQK

每张卡的3张或更多张牌的得分为1张。直接4张牌的例子给你4分。

所以我有一个分数:

score = 0

已排序 字符串列表(因此我不必担心列表末尾的卡片有一个直线的开头)代表卡片等级我特别的手:

L4
['6', '8', '8', '9', 'T']
# Note: 8, 9, T is a straight. So I want to add 3 to score

但我怎样才能确定我是否有直线?

到目前为止我尝试过:

我尝试将字符串转换为整数,但是我如何处理T,J,K,Q和A?他们不是数字。

使用字符串我收到错误:

for i in range(len(L4) - 1):
   if(L4[i] is L4[i + 1] + 1):
      sC = sC + 1
if(sC >= 3):
   score += sC


L4
['6', '8', '8', '9', 'T']
Traceback (most recent call last):
  File "myFile.py", line 66, in <module>
    if(L4[i] is L4[i + 1] + 1):
TypeError: must be str, not int

我应该将它们转换为整数还是我应该尝试其他方式?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:-4)

您可以找到当前手牌的所有子串,并过滤结果以查找以<footer className="page-footer" /> 增量排序的结果:

SELECT p.*
FROM price p
WHERE p.id_quote = 36 AND
      p.price = (SELECT MIN(p2.price) FROM price p2 WHERE p2.id_quote = p.id_quote);

输出:

1

编辑:要考虑多次运行,您可以使用def stringify_result(f): def wrapper(_d): cards = {10:'T', 11:'J', 12:'Q', 13:'K'} return list(map(lambda x:cards.get(x, str(x)), f(_d))) return wrapper @stringify_result def has_straight(d): cards = {'J': 11, 'K': 13, 'T': 10, 'Q': 12} subs = list(filter(None, [d[b:i] for i in range(len(d)+1) for b in range(len(d)+1)])) possibilities = list(filter(lambda x:all(x[i+1] - x[i] == 1 for i in range(len(x)-1)), [[int(cards.get(b, b)) for b in i] for i in subs])) return [] if not possibilities else max(possibilities, key=len) straight = has_straight(['6', '8', '8', '9', 'T']) score = len(straight)

['8', '9', 'T']
3

输出:

itertools.groupby