- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python实战之德州扑克第二步-判断牌型由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断! 。
在以下操作中,需要玩家手里的牌为五张,不然无法判断! 。
先给出发牌的一个效果图:
给2人发五张牌:
通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时3(!!!) 。
判断牌型就需要熟悉牌型的组成了 。
1
2
3
4
5
6
7
8
9
10
|
皇家同花顺:同一花色最大的顺子
同花顺:同一花色的顺子
四条:四张相同
+
1
个单张
葫芦:三张相同
+
1
对
同花:
5
张牌花色相同
顺子:花色不同的顺子
三条:三张相同
+
2
单张
两对:
2
对
+
1
单
一对:
1
对
+
3
单张
高牌:五个单张牌
|
我们把牌型分为两类,同花的{皇家同花顺,同花顺,同花},其余的为非同花 。
接下来就先需要判断是否为同花,然后在具体判断,例如皇家同花顺,只有一种类型,直接判断即可,其余的可看下方! 。
事不宜迟,上手操作! 。
这里我们得先知道,玩家的花色,每张牌占三个字符串,花色占一个,牌值占两个,我们是不是可以通过分片操作,把花色提取出来,保存到一个列表中尼!方便操作! 。
1
2
3
4
5
6
|
COL
=
copy.deepcopy(C)
for
I
in
range
(
len
(COL)):
for
j
in
range
(
len
(COL[I])):
COL[I][j]
=
COL[I][j][
0
:
1
]
#print("color",C)
return
COL
|
代码中又出现了深拷贝这个函数,具体作用上一篇文章已经讲过了,不再重复! 。
1
2
3
|
大概流程:
首先深拷贝,含有玩家牌的二维数组
双重循环提取花色,就得到了一个仅含花色的二位列表且对应的玩家没有改变
|
然后就是判断花色是不是一样 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def
color_analysis(Color):
#是否为同色,传入一维花色列表
f
=
"false"
#同花
t
=
"true"
#非同花
col
=
len
(
set
(Color))
if
col>
1
:
return
f
else
:
return
t
def
color_type(CO):
#存储花色是否一样 是:true 否:false
A
=
[
"0"
for
i
in
range
(
len
(CO))]
for
i
in
range
(
len
(CO)):
A[i]
=
color_analysis(CO[i])
#print(a)
return
A
|
通过两个函数进行判断,使用到了set()去重,如果去重之后为1,则为同花,不唯1则不为同花 。
我们判断好了是否为同花,接下来就是判断牌值了,首先需要取牌值,思路和取花色一样的,就不贴代码了,取值之后,因为含有J,Q,K,A,我们需要特殊处理一下,我们把A替换为14,K替换为13,以此类推J为11,特殊处理之后得到的是字符型的值,我们还需要整型化,为了方便比较,还需要进行排序操作 。
一下只贴出部分代码,已经有了思路,相信你可以把代码补全! 。
1
2
3
4
5
6
7
8
9
10
|
def
get_int_value(value):
value
=
get_transform_value(value)
for
i
in
range
(
len
(value)):
value[i]
=
list
(
map
(
int
,value[i]))
return
value
def
sort_values(values):
values
=
get_int_value(values)
for
i
in
range
(
len
(values)):
values[i].sort(reverse
=
True
)
return
values
|
经过以上操作,我们得到了玩家是手里的牌是否为同花及其牌值,且顺序是对应的 。
然后就是比较了,思路上面已经给出了,给出关键代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
def
judge_card_type(value,Color_type):
#value为一个玩家的牌值须按照从大到小排好序,color为对应的花色
result
=
0
num
=
0
#牌值相同的个数
if
len
(value)!
=
5
:
print
(
"牌数不为五张或过多,无法判断!"
)
sys.exit()
for
A
in
range
(
0
,
len
(value)):
#统计相等的个数 或者是否为顺子
if
value[A
-
1
]
-
value[A]
=
=
1
:
result
+
=
1
#如果为顺子,则resul=4
elif
value[A]
=
=
value[A
-
1
]:
num
+
=
1
if
Color_type
=
=
"true"
:
#同花
if
value
=
=
[
13
,
12
,
11
,
10
,
9
]:
#皇家同花顺
return
"0"
elif
result
=
=
4
:
#同花顺
return
"1"
else
:
return
"4"
#同花
if
Color_type
=
=
"false"
:
#非同花
if
num
=
=
3
:
#四条或葫芦
if
value[
1
]
=
=
value[
2
]
=
=
value[
3
]
=
=
value[
4
]
or
value[
0
]
=
=
value[
1
]
=
=
value[
2
]
=
=
value[
3
]:
return
"2"
#四条
else
:
return
"3"
#葫芦
elif
result
=
=
4
:
#顺子
return
"5"
elif
num
=
=
2
:
#三条或两队
if
value[
0
]
=
=
value[
1
]
=
=
value[
2
]
or
value[
1
]
=
=
value[
2
]
=
=
value[
3
]
or
value[
2
]
=
=
value[
3
]
=
=
value[
4
]:
return
"6"
#三条
else
:
return
"7"
#两队
elif
num
=
=
1
:
#一对
return
"8"
else
:
return
"9"
#高牌
|
已经知道花色,和牌值,只需要进行简单的判断即可,小编给出的方法比较普通,相信你们可以写出更好的! 。
上面一段代码,只是返回不同牌型对应的数值,我们只需做一个简单的转换即可,相信你可以做到,代码中注释也给出了对应的牌型 。
点击链接查看 。
python实战之德州扑克第一步-发牌 。
python实战之德州扑克第三步-比较大小 。
到此这篇关于python实战之德州扑克第二步-判断牌型的文章就介绍到这了,更多相关python实现德州扑克判断牌型内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/liudadaxuexi/article/details/115821359 。
最后此篇关于python实战之德州扑克第二步-判断牌型的文章就讲到这里了,如果你想了解更多关于python实战之德州扑克第二步-判断牌型的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
判断置顶文章 is_sticky() 函数用来判断一篇文章是否为置顶文章。 用法 ?
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 下面是大多数编程语言中典型的判断结构的一般形式: 判断语句 C
我经常这样写: (if (nil? a-value) another-value a-value) 是否有更简单的功能可用,例如: (if-nil? a-value another-value) 最佳
MySQL IF 语句允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。 要在 MySQL 中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回 TRUE,FA
也就是说,是否有一种工具可以自动显示给定语法的完整语言,包括突出歧义(如果有)? 最佳答案 BNF 风格的文法可能有一些特殊性,但总的来说,确定给定的上下文无关文法(例如 BNF)是否有歧义是不可能的
有没有办法确定像下面这样的 Axios 请求是否收到了答案并完成了? axios.get('/api') .then(response => this.data = response.data); 最
我想请大家禁用 Firebug 。如何确定自己安装了firebug?所以它是一个跨浏览器,并在 Chrome、Mozilla 和 IE8 + 中确定 最佳答案 两步: 如果 window.consol
我有一个看起来像这样的对象: var searchFilter = {_id: XXX, approved: true} 用于驱动 Meteor 集合搜索过滤器。然后,我有一对文本框,允许用户输入一系
我正在循环并向我的数据库中插入几百万条记录。性能是第一要务。 我想利用无状态 session ,但您可能知道它们不支持在更复杂的实体上级联对象。 是否有一种通用方法可以确定实体是否具有级联记录?如果是
我正在使用 pdfminer 解析一些 PDF 文件。图书馆。 我需要知道文档是否是扫描文档,扫描机将扫描图像放在顶部,将 OCR 提取的文本放在背景中。 有没有办法识别文本是否可见,因为 OCR 机
我正在寻找一种方法来找出当前为浏览器游戏 TribalWars 编写的脚本打开的页面。 URL 的设置非常相似,对于知道自己在做什么的人来说这应该很容易(我显然不知道)。 URL 如下所示: http
我在 C# 中使用包装的 C 库,需要将图像从该库转换为位图并返回,但没有复制像素缓冲区。 转换为位图很简单: Bitmap WrapAsBitmap(CImage image) { retu
有没有办法检查调用方法的Controller是否来自Area内的Controller? 例如,我有一个继承自 AuthorizeAttribute 的类,例如 public class CustomA
是否可以找到MySQL View 中某列所属的表名? 如果 View 构造为 CREATE VIEW alpha_view AS SELECT alpha.col1, alpha.col2,
如何判断 .Net 应用程序是作为桌面应用程序运行还是作为服务运行? 我们正在尝试使用 Fitnesse 测试我们的应用程序,它将应用程序作为服务加载,然后调用它。但是当一个模式错误框被按下时,它就会
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我试图计算出 iframe 内容的大小,以便调整 iframe 元素的大小以包含其内容。 如何确定 iFrame 是否已加载以及我是否可以可靠地测量它的内容尺寸。 注意:onload 事件不会执行,因
这个问题在这里已经有了答案: How to write portable code in c++? (12 个答案) 关闭 9 年前。 我正在尝试编写可以用任何现代版本的 g++ 编译的代码,但遇到
这个问题在这里已经有了答案: distinguish shared objects from position independent executables (2 个答案) 关闭 4 年前。 我有
我的目标是如果 dte 与当前时间相差不到 1 小时,则停止循环。是否有“ ruby 方式”来做到这一点? #THIS IS AN INFINITE LOOP, DONT RUN THIS dte=D
我是一名优秀的程序员,十分优秀!