21点,BlackJack是很流行的一款扑克游戏。开局阶段,给玩家发两张牌(都是明牌),给庄家发两张牌(一张明牌,一张暗牌)。之后玩家可以选择要牌或停止。在玩家停止要牌后,庄家必须一直要牌大于16点。

如果玩家的牌大于22点,则玩家“爆牌”输。如果庄家的牌大于22点,则庄家“爆牌”输。如果大家都没有爆牌,那就开始比较大小,来判断庄家胜利还是玩家胜利。

比较特殊的地方在于,A可以是11或者1。以及JQK都是10点。如果开局直接发到【A,10】,【A,J】,【A,Q】,【A,K】则称为直接获得了BlackJack。如果是玩家获得了BlackJack则玩家直接胜利,如果是庄家获得了Black Jack则玩家直接输。

这个游戏玩家的核心是,根据玩家手上的牌,以及庄家露出来的牌,判断是否要牌。那么我这个程序就是计算何时计算。一般的21点游戏中,都是多副扑克牌。因此可以近似认为每一张牌抽到的概率都是一样大的(即假设从无穷多的牌里面抽牌)。

程序分两个部分,第一个部分是计算庄家露出来的牌,及其最后的概率。先贴结果。

第二个部分是根据目前玩家手中牌的和,计算玩家再【要一张牌】的情况下,【获胜或打平】的概率。注意这里是只要一张牌,所以这个概率可能定量是有问题的。结论是玩家手牌大于等于17后就别再要了。

计算21点的代码参考了
Python实现21点扑克牌游戏_索儿呀的博客-CSDN博客_21点扑克牌游戏python

这个程序就是套一个大循环遍历的

第一段代码


Cards = ['','A','2','3','4','5','6','7','8','9','10','J','Q','K']
values = {1:11,2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8,9:9, 10:10, 11:10, 12:10, 13:10}def compute_total(hand):"""计算并返回一手牌的点数和"""result = 0 #初始化点数和为0numAces = 0 #A的个数# 计算点数和A的个数for card in hand:#print(hand,card)result += values[card]if card == 1:numAces += 1#如果点数和>21,则尝试把A当做1来计算# (即减去10),多个A循环减去10,直到点数<=21while result > 21 and numAces > 0:result -= 10numAces -= 1return resultdef Home(house):home = []for i in house:home.append(i)return home#看看庄家明一张手牌的情况下,结果是17点,18点,19点,20点,21点和爆牌的概率
houseall = []for a1 in range(9,10):#这个地方可以设置第一张牌露出来的是哪张print(Cards[a1],'是第一张牌的情况下:')for a2 in range(1,14):house = [a1,a2]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a3 in range(1,14):house = [a1,a2,a3]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a4 in range(1,14):house = [a1,a2,a3,a4]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a5 in range(1,14):house = [a1,a2,a3,a4,a5]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a6 in range(1,14):house = [a1,a2,a3,a4,a5,a6]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a7 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a8 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7,a8]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a9 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7,a8,a9]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a10 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a11 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continuefor a12 in range(1,14):house = [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]if compute_total(house)>16:fine = compute_total(house)house.append(fine)houseall.append(Home(house))continueelse:print(house)#经过实验居然最多抽出12张Iseeall = {17:0,18:0,19:0,20:0,21:0,'large':0}# this is probability
for result in houseall:changdu = len(result)-2gailv = (1/13)**changduif result[-1]>21:Iseeall['large']+=gailvelse:Iseeall[result[-1]]+=gailvIsone = Iseeall[17]+Iseeall[18]+Iseeall[19]+Iseeall[20]+Iseeall[21]+Iseeall['large']
print(Iseeall)
print(Isone)

第二段代码

house = {'A': {17: 0.1889173, 18: 0.1889173, 19: 0.1889173, 20: 0.1889173, 21: 0.077806189, 'out': 0.166524613},'2': {17: 0.13980914, 18: 0.13490735, 19: 0.129655433, 20: 0.124026456, 21: 0.117993485, 'out': 0.353608136},'3': {17: 0.135033988, 18: 0.130482326, 19: 0.125580537, 20: 0.12032862, 21: 0.114699643, 'out': 0.373874885},'4': {17: 0.130489736, 18: 0.125938074, 19: 0.121386413, 20: 0.116484624, 21: 0.111232707, 'out': 0.394468446},'5': {17: 0.122251285, 18: 0.122251285, 19: 0.117699624, 20: 0.113147963, 21: 0.108246173, 'out': 0.41640367},'6': {17: 0.165438177, 18: 0.106266579, 19: 0.106266579, 20: 0.101714918, 21: 0.097163256, 'out': 0.423150492},'7': {17: 0.368566194, 18: 0.137796963, 19: 0.078625365, 20: 0.078625365, 21: 0.074073704, 'out': 0.262312408},'8': {17: 0.128566544, 18: 0.359335775, 19: 0.128566544, 20: 0.069394947, 21: 0.069394947, 'out': 0.244741242},'9': {17: 0.119995441, 18: 0.119995441, 19: 0.350764672, 20: 0.119995441, 21: 0.060823844, 'out': 0.228425159},'10': {17: 0.1207097, 18: 0.1207097, 19: 0.1207097, 20: 0.3707097, 21: 0.037376367, 'out': 0.229784833},'J': {17: 0.1207097, 18: 0.1207097, 19: 0.1207097, 20: 0.3707097, 21: 0.037376367, 'out': 0.229784833},'Q': {17: 0.1207097, 18: 0.1207097, 19: 0.1207097, 20: 0.3707097, 21: 0.037376367, 'out': 0.229784833},'K': {17: 0.1207097, 18: 0.1207097, 19: 0.1207097, 20: 0.3707097, 21: 0.037376367, 'out': 0.229784833}}Cards = ['','A','2','3','4','5','6','7','8','9','10','J','Q','K']
values = {1:1,2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8,9:9, 10:10, 11:10, 12:10, 13:10}def compute_total(hand):"""计算并返回一手牌的点数和"""result = 0 #初始化点数和为0numAces = 0 #A的个数# 计算点数和A的个数for card in hand:#print(hand,card)result += values[card]if card == 1:numAces += 1#如果点数和>21,则尝试把A当做1来计算# (即减去10),多个A循环减去10,直到点数<=21while result > 21 and numAces > 0:result -= 10numAces -= 1return result#我想算的是,如果我要牌之后赢的概率大于我要牌之前赢的概率,那就得要
def PlayerWin(mynum,houseCard):if mynum >21:return 0if mynum <17:return house[houseCard]['out']if mynum ==17:return house[houseCard]['out']+house[houseCard][17]if mynum ==18:return house[houseCard]['out']+house[houseCard][17]+house[houseCard][18]if mynum ==19:return house[houseCard]['out']+house[houseCard][17]+house[houseCard][18]+house[houseCard][19]if mynum ==20:return 1-house[houseCard][21]if mynum ==21:return 1for a1 in range(8,9):print('\n')print('手上的牌和是',a1,'的情况下:')for house1 in range(1,14):print('庄家手上的牌是',Cards[house1])print('不要牌赢的概率是',PlayerWin(a1,Cards[house1]))yaopaiyin = 0for nextcard in range(1,14):nextsum = a1 + values[nextcard]yaopaiyin +=PlayerWin(nextsum,Cards[house1])/13print('要牌赢的概率是',yaopaiyin)print()

Python计算21点扑克牌概率,判断是否要牌相关推荐

  1. 概率统计Python计算:条件概率和概率乘法公式

    1. 古典概型中条件概率的计算 条件概率 P ( B ∣ A ) P(B|A) P(B∣A)是将样本空间限制在 A A A上, A ∩ B A\cap B A∩B的概率.因此,我们可以利用博文< ...

  2. Python实现21点扑克牌游戏

    "21点扑克牌游戏"又名黑杰克(Blackjack),是一种流行的扑克游戏.该游戏由两到六个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大 ...

  3. python计算中奖问题的概率

    题目:抽奖中,宝箱中奖概率是20%,抽5个能不能保证100%中奖? 很显然,只要样本不是小于等于5个,那自然不能保证了 下面,我们用python来模拟一下这个抽奖的过程,这里用统计频率代替概率 imp ...

  4. Python计算骰子出现的概率

    大家肯定都摇过

  5. python概率游戏_Python计算斗牛游戏的概率

    Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...

  6. python计算输入的两个数字,try...except...判断是否输入的是数字,如果是则相加

    python计算输入的两个数字,try-except-判断是否输入的是数字,如果是则相加,如果不输入q或者n,则循环一直下去: print("Enter 'q' to quit\n" ...

  7. python判断矩阵是否对称_矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)...

     1. 前言 最近几天一直在学习矩阵的知识,恶补了特征分解和SVD算法,发现网上很多资料都是不全的,所以想记录一下这里面的特征分解推导过程. 2.矩阵的进阶知识 2.1 特征分解(谱分解)=> ...

  8. Python计算越南出线概率

    知乎上已经有人计算国足出线概率了:国足出线概率仅为0.01%你怎么看? - 量化调酒师的回答 - 知乎,那么我计算一下越南吧,目前权威机构给出的越南出线概率和国足一样都是0.00%. 请看右下角,这是 ...

  9. Python计算一组数据的PDF(概率密度函数)方法

    Python计算一组数据的PDF(概率密度函数)方法 公式如下: python实现: 第一种方法: import scipy.stats as stst.norm.pdf([一组数据]) 第二种方法: ...

最新文章

  1. 中国芯片将靠此超车!RISC-V架构神在哪全解构【附下载】
  2. 【前沿】何恺明大神ICCV2017最佳论文Mask R-CNN的Keras/TensorFlow/Pytorch 代码实现
  3. Nginx配置upstream实现负载均衡
  4. 数据分析词数统计和词的重要程度统计
  5. [单选题]$array = array('a','b','c','d'); $array_now = array_splice($array,2); print_r($array_now);...
  6. java 鲜为人知的知识点_鲜为人知的Java 8功能:广义目标类型推断
  7. java中无法推断类型参数_Java中的推断异常
  8. java学习(56):接口之间的继承续
  9. iOS中的UIScrollView(滑动视图)
  10. 检测高CPU线程定位shell脚本
  11. 显卡用什么软件作压力测试,推荐一个显卡的跑分跟压力测试的软件TimeSpy
  12. 用golang从企业微信里获取打卡记录的方法
  13. Android视频媒体播放器
  14. 奶爸日记21 - 探险乐园
  15. 深入理解计算机系统-cachelab
  16. 修改数据库单参数对应的值 前端+php
  17. 无穷小微积分理论的“根”扎的有多深?
  18. 实现点击选择按钮时候选中对应选中的行,当点击某一行单元格时候就清除其他选中行然后选中对应点击的那一行
  19. qq令牌码怎么提取_QQ空间怎么引流?
  20. 【GO富集分析】GO注释文件爬取

热门文章

  1. 计算机的这些基础知识,你未必全都知道,不信你看看?
  2. java -jar指定main方法
  3. 手把手教你如何给 Docker 开启 IPv6 网络支持
  4. IOS开发——仿网易新闻客户端
  5. solor快速_Solr快速入门
  6. 初识zabix --zabbix的数据采集方式,监控报警及proxy
  7. 工厂变电所运维云平台解决方案
  8. aws mysql 迁移_Amazon DMS 数据库迁移_数据迁移_云迁移-AWS云服务
  9. 随机森林分类算法python代码_独家 | 一文读懂随机森林的解释和实现(附python代码)...
  10. 【Rust技术公开课】港哥Elton自主开发的协程库解析-CSDN公开课-专题视频课程