python - 根据给定手牌确定所有合法牌手(Big 2)
问题描述
所以,我一直在尝试编写一个函数来对纸牌游戏Big 2中的所有纸牌组合进行排名。
在这个游戏中,花色顺序是:Diamonds --> Clubs --> Hearts --> Spades
一只手通常看起来像这样:
hand = ['3D', '4D', '4H', '7D', '8D', '8H', '0D', '0C', 'JH', 'QC', 'QS', 'KH', 'AS']
在做出所有可能的配对、三倍和单打之后,我使用这个函数对它们进行排名:
rank = {}
suits = {}
count = 3
suit = 0
for i in "34567890JQKA2":
rank[i] = count
count += 1
for i in "DCHS":
suits[i] = suit
suit += 2
def percentileCalc(card_input, pair):
n = 0
if pair:
for card in card_input:
if "S" in card:
n = 4
card = card_input[0]
else:
n = suits[card_input[1]]
card = card_input
percentile = math.floor(8 * (rank[card[0]] - 3) + n)
return percentile
def all_pairs(hand):
pairs = []
for i in itertools.combinations(hand, 2):
result = is_pair(i[0], i[1])
if result:
pairs.append(list(i))
return pairs
def all_triples(hand):
triples = []
for i in itertools.combinations(hand, 3):
result = is_triple(i[0], i[1], i[2])
if result:
triples.append(list(i))
return triples
def buildHand(hand):
tempList = []
pairs = ES.all_pairs(hand)
triples = ES.all_triples(hand)
final = []
for select in triples:
percentile = percentileCalc(select, True)
tempList.append([3, percentile, select])
for selection in pairs:
percentile = percentileCalc(selection, True)
tempList.append([2, percentile, selection])
for card in hand:
percentile = percentileCalc(card, False)
tempList.append([1, percentile, [card]])
tempList.sort(key=lambda x : x[1], reverse=True)
return tempList
如您所见, buildHand 返回我的手牌可能拥有的所有可能卡片组合的列表,并相应地对它们进行排名。
但是,当我尝试构建一个进一步的函数来构建所有可能的合法手牌(没有重复的牌/组合)并将它们的百分位数比较在一起时,我最终会得到一个无法返回正确数量的牌的合并,也没有任何合法的牌手。
我知道这个功能很糟糕,但我不知道该怎么做(假设它是可能的)。
目前的功能是:
def constructor(combinations):
allHands = []
for comb in itertools.combination(combinations, 13):
comb = list(comb)
for i in comb:
card = i[1]
for permutes in comb:
if card in permutes:
comb.delete(permutes)
allHands.append(comb)
return allHands
此功能的几个问题:
- 它不计算牌的数量(即手牌大小,可以表示为
hand_sizes
,),导致牌太多 它不会准确删除所有重复的卡片组合,例如:
[["AS", "AH"], ["AS", "AC"]]
任何帮助,将不胜感激!:)
解决方案
推荐阅读
- python - SGD 实现 Python
- python - 在 pyqt 中关闭窗口并出现错误退出代码 -1073740791
- javascript - 如何添加2个javascript文件
- python - ValueError:无法引用类型的参数值 []
Django 数组字段 - c# - Discord.NET 分配角色
- python - Stack columns in numpy 2-dim array to get 1-dim array
- vba - Turn String Into Hyperlink with Preset Name in Excel with VBA
- telegram - 如果使用 Telethon API 添加频道订阅者会被禁止,如何解禁?
- swift - 在后台将 HTML 转换为 NSAttributedString?
- java - 如何在 Google App Engine 中创建和托管 SOAP 网络服务?