用百行Python代码写一个关于德州扑克的类
德州扑克是一款竞技类的扑克游戏,随着人类在各种竞技游戏被ai所碾压,我思考有着像棋类这种考验计算能力封闭式的游戏被电脑统治在所难免,德州扑克这种考验人性和心理的游戏在2017年也被ai攻克,本人是德州扑克的爱好者,虽然好奇ai源代码但也无从猜测,但是用python写一写德州扑克小游戏还是可以上手,以后学的多了可以考虑用py写一个简单策略进行游戏,话不多说看代码吧。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted bloc
import itertools
import random #又给忘了随机生成一个列表的函数式什么了
class poker():#注意因为要从牌库里移除已经出现过得底牌,所以这个类智能当做一局来打,要实现多局的从用循环函数def __init__(self):self.style = ["黑桃","红心","草花","方块"]self.value = ["2","3","4","5","6","7","8","9","10","J","Q","K","A"]value_f = {}for i in range(13):value_f[self.value[i]] = i+2self.value_f = value_fd = {}for i in self.value:for j in self.style:x = i+jd[x] = {"value":i,"style":j}self.paiku = list(d)self.poker = dself.value_f = value_f def dipai(self,n):d = {}for i in range(1,n+1): l =[]j = 0for j in range(2):b = {}a = random.randint(0,len(self.paiku)-1)p = self.paiku[a]self.paiku.remove(p)l.append(p)d["player"+str(i)] = lreturn ddef common_poker(self):l = []for i in range(5):a = random.randint(0,len(self.paiku)-1)p = self.paiku[a]self.paiku.remove(p)l.append(p)return ldef paixing(self,s):#将七张牌按照大小排列,依次算出counts#s = self.dipai()[player] + self.common_poker()#s = ['2草花', '10黑桃', '8方块', 'J红心', '6黑桃', 'J黑桃', '2黑桃']#冒泡排序法,手写呀别怂,写不了菜鸡#开始写大小类型,高牌1,对子2,两对3,三条4,顺子5,同花6,葫芦7,四条8,同花顺9#判断任意已经排好序列的五张牌是否为顺子def get_v_c(s):value = []style = []for i in s:value.append(self.poker[i]["value"])style.append(self.poker[i]["style"])sort_v = sorted(value,key=lambda x:self.value_f[x])sort_v_f = list(map(lambda x:self.value_f[x],sort_v)) v_counts = []for i in sorted(set(sort_v_f)):counts = sort_v_f.count(i)v_counts.append(counts)return sort_v_f,sort_v,v_counts,stylesort_v_f,sort_v,v_counts,style= get_v_c(s)def gaopai(sort_v_f,v_counts):l = [1]if len(v_counts) == 7:return l + sort_v_f[-5:]else:return Falsedef yidui(sort_v_f,v_counts):if v_counts.count(2) == 1:l = [2]c = sorted(list(set(sort_v_f)))a = sort_v_f[v_counts.index(2)]if 2 in v_counts[-3:]:k = c[-4:]k.remove(a) #原来这样玩要加括号# k.remove(a)# k = k[::-1]return (l+[a]+k[::-1]) #extend和 + 有什么区别else:return (l+[a]+sort_v_f[-3:][::-1])else:return Falsedef liangdui(sort_v_f,v_counts):l = [3]c = sorted(list(set(sort_v_f)))#print(c)if v_counts.count(2) == 2:x = c.copy()for i in range(len(v_counts)-1,-1,-1):if v_counts[i] == 2:a = c[i]x.remove(a)l.append(a)return l + [max(x)]#return (3,(l.append(v_counts[len(v_counts)-(v_counts[::-1]).index(1)])))elif v_counts.count(2) == 3:if v_counts.index(1)>1:x = c.copy()x.remove(c[0])b = c[v_counts.index(1)]x.remove(b)return l+x[::-1] +[b]else:return l + c[-1:-4:-1]else: return Falsedef santiao(sort_v_f,v_counts):l = [4]c = sorted(list(set(sort_v_f)))if 3 in v_counts and v_counts.count(1) == 4:if 3 in v_counts[-3:]:a = c[-1:-4:-1]b = c[v_counts.index(3)]a.remove(b)return l + [b] + aelse:a = c[-1:-3:-1]b = c[v_counts.index(3)]return l + [b] + a #list(b) 和 [b]return Falsedef shunzi(sort_v):sort_v_f = list(set(map(lambda x:self.value_f[x],sort_v))) #判断顺子用得着if 14 in sort_v_f:sort_v_f.insert(0,1)l = [5]def five_cards(l):#判断五张牌是否为顺子,已经排好序列for i in range(4):if l[i]+1 == l[i+1]:passelse:return Falsebreakreturn Truedef get_L(lst):L = []for i in range(len(lst)-1,-1,-1):if i-4>=0:a = lst.copy()[i-4:i+1]L.append(a)return LL = get_L(sort_v_f)for i in L:if five_cards(i):return l + [i[-1]]else:continuereturn Falsedef tonghua(s,style):l = [6]for i in self.style:if style.count(i)>=5:for j in s:if self.poker[j]["style"] != i:s.remove(j)value = []for i in s:value.append(self.poker[i]["value"])value_f = map(lambda x:self.value_f[x],value)a = sorted(value_f)[-1:-6:-1]return l + aelse:return Falsedef hulu(sort_v_f,v_counts):l = [7]c = sorted(list(set(sort_v_f)))if 3 in v_counts and 2 in v_counts:if v_counts.count(2) == 2:a = c[v_counts.index(3)]x = c.copy()x.remove(a)return l + [a]+[max(x)]else:a = c[v_counts.index(3)]b = c[v_counts.index(2)]return l + [a]+[b]elif v_counts.count(3) == 2:a = c[v_counts.index(1)]x = c.copy()x.remove(a)return l + x[::-1]else:Falsedef sitiao(sort_v_f,v_counts):l = [8]c = sorted(list(set(sort_v_f)))if 4 not in v_counts:return Falseelse:a = c[v_counts.index(4)]return l + [a]def tonghuashun(s,style):l = [9]if tonghua(s,style): def get_lst(s,style):for i in self.style:if style.count(i)>=5:for j in s:if self.poker[j]["style"] != i:s.remove(j)value = []for i in s:value.append(self.poker[i]["value"])value_f = map(lambda x:self.value_f[x],value)lst = sorted(value_f)if 14 in lst:lst.insert(0,1)return lstlst = get_lst(s,style)def five_cards(l):for i in range(4):if l[i]+1 == l[i+1]:passelse:return Falsebreakreturn Truedef get_L(lst):L = []for i in range(len(lst)-1,-1,-1):if i-4>=0:a = lst.copy()[i-4:i+1]L.append(a)return LL = get_L(lst)for i in L:if five_cards(i):return l + [i[-1]]else:continueelse:return Falseelse:return Falseif tonghuashun(s,style):return tonghuashun(s,style)elif sitiao(sort_v_f,v_counts):return sitiao(sort_v_f,v_counts)elif hulu(sort_v_f,v_counts):return hulu(sort_v_f,v_counts)elif tonghua(s,style):return tonghua(s,style)elif shunzi(sort_v):return shunzi(sort_v)elif santiao(sort_v_f,v_counts):return santiao(sort_v_f,v_counts)elif liangdui(sort_v_f,v_counts):return liangdui(sort_v_f,v_counts)elif yidui(sort_v_f,v_counts):return yidui(sort_v_f,v_counts)elif gaopai(sort_v_f,v_counts):return gaopai(sort_v_f,v_counts)else:return s#s 是已经形成的七张牌# def compare_cards(self):def card_imf(self):self.d["player2"] = ["A红心","K草花"]for i in self.d:print(i,":",self.d[i])print("公共牌:",self.cp)# for i in args:# pl = map(lambda x:self.paixing(x),i)# l = []# for i in pl:# s = sum(map(lambda x:x*ooo[i.index(x)],i))# l.append(s)# return l.index(max(l))#先不管平局的事情#算一下AK单挑其他底牌时的胜率 看到河牌的条件下#任意一手牌的胜率# def one_pk(self):# self.d["player2"] = ["K红心","K草花"]# l = []# ooo = [3200000,160000,8000,400,20,1]# for i in self.d:# self.d[i] = self.paixing(self.d[i]+self.cp)# for i in self.d.values():# try:# pl = sum(map(lambda x:x*ooo[i.index(x)],i))# l.append(pl)# except:# print(self.d)# if l[1]>l[0]:# return 1# elif l[1] == l[0]:# return 0.5# else:# return 0def two_pk(self):p1 = ["K黑桃","Q黑桃"]p2 = ["A方块","A红心"]for i in p1:self.paiku.remove(i)for i in p2:self.paiku.remove(i)ooo = [3200000,160000,8000,400,20,1]lst = list(itertools.combinations(self.paiku,5))count_p1 = 0for i in lst:pa1 = list(i) + p1pa2 = list(i) + p2mpl1 = 0pl2 = 0for j in range(len(self.paixing(pa1))):pl1 = pl1 + ooo[j]*self.paixing(pa1)[j]for j in range(len(self.paixing(pa2))):pl2 = pl2 + ooo[j]*self.paixing(pa2)[j]if pl1 > pl2:count_p1 += 1elif pl1 == pl2:count_p1 += 0.5return count_p1/len(lst)# except:# print(self.d)# if l[1]>l[0]:# return 1# elif l[1] == l[0]:# return 0.5# else:# return 0def p_five_cards(self,s):#当时参数是self,每调用一次我就用公共牌5张来判断牌型,不偷懒应该是参数是s,s是一个五张牌的序列def get_v_c(s):value = []style = []for i in s:value.append(self.poker[i]["value"])style.append(self.poker[i]["style"])sort_v = sorted(value,key=lambda x:self.value_f[x])sort_v_f = list(map(lambda x:self.value_f[x],sort_v)) v_counts = []for i in sorted(set(sort_v_f)):counts = sort_v_f.count(i)v_counts.append(counts)return sort_v_f,sort_v,v_counts,stylesort_v_f,sort_v,v_counts,style= get_v_c(s)s_v_f = list(set(map(lambda x:self.value_f[x],sort_v)))if 14 in s_v_f:s_v_f.insert(0,1)def is_shunzi(l):#判断五张牌是否为顺子,已经排好序列if len(l) == 5:for i in range(4):if l[i]+1 == l[i+1]:passelse:return Falsebreakreturn Trueelif len(l) > 5:if l == [1,10,11,12,13,14] or l == [1,2,3,4,5,14]:return Trueelse:return Falseif is_shunzi(s_v_f) and len(set(style)) == 1:return 9if is_shunzi(s_v_f):return 5if len(set(style)) == 1:return 6if len(v_counts) == 5:return 1if len(v_counts) == 4:return 2if v_counts.count(2) == 2:return 3if 3 in v_counts and 1 in v_counts:return 4if 3 in v_counts and 2 in v_counts:return 7if 4 in v_counts:return 8#失误# else :# return 5# print ("高牌:{}".format(l.count(1)))# print ("一对:{}".format(l.count(2)))# print ("两对:{}".format(l.count(3)))
#计算各种牌型出现的概率def five_cards_cp(self):#[0.5011773940345369, 0.4101579093175732, 0.0475390156062425, 0.02112845138055222, 0.016335765075260873, 0.001965401545233478, 0.0014405762304921968, 0.00024009603841536616, 1.5390771693292702e-05]#print(len(self.paiku))l = list(itertools.combinations(self.paiku,5))lst = [0,0,0,0,0,0,0,0,0]for i in l:res = self.p_five_cards(i)lst[res-1] += 1lst = list(map(lambda x:x/len(l),lst))return lstdef flop(self):l = []for i in range(3):a = random.randint(0,len(self.paiku)-1)p = self.paiku[a]self.paiku.remove(p)l.append(p)return ldef get_winner(self,lst): #失策导致后面不能调用,还得复写#版本2ooo = [3200000,160000,8000,400,20,1]pl_lst = []for i in lst:pl = 0#pl = sum(map(lambda x:x*ooo[self.paixing(i).index(x)],self.paixing(i)))for j in range(len(self.paixing(i))):pl = pl + ooo[j]*self.paixing(i)[j]pl_lst.append(pl)# return [pl_lst.index(max(pl_lst))]if pl_lst.count(max(pl_lst)) == 1:return [pl_lst.index(max(pl_lst))]else:res = []for i in range(len(pl_lst)):if pl_lst[i] == max(pl_lst):res.append(i)return resdef get_sl(p1,p2,f):p1 = p1 + fp2 = p2 + fdef show_w(self,players,f = None):if f == None:f = self.flop()print(f)for i in players:for j in i:self.paiku.remove(j)for i in f:self.paiku.remove(i)lst = list(itertools.combinations(self.paiku,1))win_count = []for i in lst:s = []for j in range(len(players)):s.append((players[j] + list(i) + f))a = self.get_winner(s)win_count += areturn "{}的胜率是:{},{}player2的胜率是:{}".format(players[0],win_count.count(0)/len(win_count),players[1],win_count.count(1)/len(win_count))def show_fq(self,players):for i in players:for j in i:self.paiku.remove(j)lst = list(itertools.combinations(self.paiku,5))win_count = []for i in lst:s = []for j in range(len(players)):s.append((players[j] + list(i)))a = self.get_winner(s)win_count += areturn "{}的胜率是:{},{}player2的胜率是:{}".format(players[0],win_count.count(0)/len(win_count),players[1],win_count.count(1)/len(win_count))
A = poker()
print(A.two_pk())
#print(A.show_w([["K黑桃","Q黑桃"],["A方块","A红心"]],["2黑桃","4黑桃","Q红心","7方块"]))
def px_seven_cards(n):l = []for i in range(n):A = poker()res = A.one_player()l.append(res)print ("高牌:{}".format(l.count(1)/n))print ("一对:{}".format(l.count(2)/n))print ("两对:{}".format(l.count(3)/n))print ("三条:{}".format(l.count(4)/n))print ("顺子:{}".format(l.count(5)/n))print ("同花:{}".format(l.count(6)/n))print ("葫芦:{}".format(l.count(7)/n))print ("四条:{}".format(l.count(8)/n))print ("同花顺:{}".format(l.count(9)/n))
# p_g(500000)
def px_five_cards(n):l = []for i in range(n):A = poker()res = A.five_cards()l.append(res)print ("高牌:{}".format(l.count(1)/n))print ("一对:{}".format(l.count(2)/n))print ("两对:{}".format(l.count(3)/n))print ("三条:{}".format(l.count(4)/n))print ("顺子:{}".format(l.count(5)/n))print ("同花:{}".format(l.count(6)/n))print ("葫芦:{}".format(l.count(7)/n))print ("四条:{}".format(l.count(8)/n))print ("同花顺:{}".format(l.count(9)))`';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks |
'Isn't this fun?'
|
‘Isn’t this fun?’ |
Quotes |
"Isn't this fun?"
|
“Isn’t this fun?” |
Dashes |
-- is en-dash, --- is em-dash
|
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to-HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式[here][1].
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 [这儿][2],
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 [这儿][3],
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 [这儿][4].
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作
mermaid语法说明 ↩︎
注脚的解释 ↩︎
用百行Python代码写一个关于德州扑克的类相关推荐
- 50行的python游戏代码_50行Python代码写一个语言检测器
你有没有曾经好奇过Chrome浏览器是如何知道一个网页的语言,并对外国文字的网页提供翻译服务的?或者,Facebook是如何翻译你朋友用写在你主页上的外国文字?检测一种语言实际上非常简单,改进了用户体 ...
- python抓包 windows_教你用100行Python代码写一个抓包工具
现代计算机程序大部分时候离不开网络,作为开发者,在日常开发网络相关的程序或者排查程序错误时经常会用抓包工具来分析网卡收发的数据,比如著名的tcpdump,Wireshark等.今天我们尝试用100行左 ...
- python界面翻译-我用40行python代码写一个桌面翻译器,很nice
我们进行制作软件所需要的模板库,首先要进行引用. 另外大家要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以 ...
- python安装界面翻译_Python新手教程:40行python代码写一个桌面翻译器
这是我做出来的粗略版本,后面的UI设计就看大家的艺术细胞了 Python资源共享群:484031800 我们进行制作软件所需要的模板库,首先要进行引用. # json requests thinter ...
- python能写桌面程序吗_Python新手教程:40行python代码写一个桌面翻译器
这是我做出来的粗略版本,后面的UI设计就看大家的艺术细胞了 我们进行制作软件所需要的模板库,首先要进行引用. # json requests thinter import json import re ...
- python代码翻译器-我用40行python代码写一个桌面翻译器,很nice
我们进行制作软件所需要的模板库,首先要进行引用. 另外大家要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以 ...
- 无聊,几行python代码写一个聊天机器人陪你聊天
代码 利用爬虫功能实现. import urllib.request import rewhile True:x = input("主人:")x = urllib.parse.qu ...
- python自动化--如何用10行Python代码调一个闹钟 #电脑调闹钟
python自动化--如何用10行Python代码写一个闹钟 前言: 文末彩蛋--轻松一刻 更多关于Python的知识请加关注哟~~.若需联系博主请私信或者加博主联系方式: QQ:1542 ...
- vue如何生成公钥私钥_百行Python代码演示1私钥生成多公链公钥原理。|区块链财富指北私钥篇(2)...
<区块链财富指北>系列文章由NOCY.COM策划,肖南飞主笔撰写. 技术选型基于BOScore公链,旨在以有趣易懂的方式传播普及区块链技术,不构成任何投资建议! 学习之前说学习 今天这篇文 ...
最新文章
- Huffman Coding
- android弹窗不能手动关闭_vue3.0系列:Vue3自定义PC端弹窗组件V3Layer
- 服务器实际显示内存,服务器实际显示内存
- oracle格式化列宽度,ORACLE日期时间的格式化参数大全
- 1.3编程基础之算术表达式与顺序执行 06 甲流疫情死亡率
- sql程序实现事物锁表和解锁_怎样用SQL给SQL2880特定表加锁解锁
- 中兴的自毁与自救:封杀7年、禁用 Android,76岁创始人奔走前线!
- MOSS 2010:Visual Studio 2010开发体验(32)——工作流开发最佳实践(四):可重用工作流...
- [译]ASP.NET 5 Configuration
- Dart教程(二):基本语法
- php有没有ispostback,php用什么表示IsPostBack?
- 1024程序员节:心疼被段子手黑得最惨的他们
- 【清北学堂】dwarf
- 初识C语言————3
- 花呗部分用户已接入央行征信系统,快看你被选中了没?
- 监控平台设计 之 Graphite、Prometheus 竞对
- 解决ReliefJet需要激活而不能再使Outlook点X时最小化的问题
- 201571030121《小学四则运算练习软件软件需求说明》结对项目报告
- 影视后期学习,必须要掌握的软件有哪些?
- 一段时间有几个星期几