我试图写一个数学函数来计算获胜或失去球员的概率。
假设我们只玩一张牌(52张牌),第一个例子是这样的:
The player has `7 and 5`
Dealer has `6`这里我需要计算如果玩家stands,什么是经销商获胜的可能性?
如果信用卡总价值为17 <= x <= 21,经销商可以获胜。
我可以用这样的代码来计算这个,但是对于6个甲板来说,这是非常低效的。
def subset_sum(numbers, target, target2, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s >= target and s <= target2:
print partial
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum(remaining, target, target2, partial + [n])我正在寻找一个数学函数,它计算概率并返回它。
def get_prob(deck, small_number, big_number):
return prob在我们的例子中,经销商有6个,所以小数字将是17-6=11,大数字是21-6=15。
5,6,7是直接使用的,所以我的甲板现在是这样的:
dec = [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
有了这些数字,dealer has 6 so small number is 17-6 = 11 and 21-6 = 15
def get_prob(dec,11,15):
return prob问题:卡片之和在11到15之间的概率是多少?
发布于 2015-08-09 19:46:30
正如我在my last answer to one of your Blackjack questions上发布的,对于您的特定设置来说,这在算法上并不是必要的,正如我在前面的问题中所理解的那样。
这是排列的简单应用。然而,由于无法预测在下一笔交易之后还会继续存在的可能性,因此计算出未来的距离是没有意义的,因为在任何深度下,玩家都无法影响结果。一次只计算一个概率,计算起来更简单。
如果你有甲板:
deck = [1,1,1,1,2,2,2,3,3...]使用以下方法可以获得一个范围内的和的概率:
def get_prob(deck, minimum, maximum):
counts = [deck.count(i) for i in range(14)]
return sum(counts[minimum:maximum+1])/len(counts)简单地说,这个函数,给定一副牌和一组可接受的卡值,将返回在这些阈值内画出一张卡的概率。
另外,如果最小值为11,例如,不计算aces,则不必使用此函数,因为无论何时都需要进行抽签。
https://stackoverflow.com/questions/31907839
复制相似问题