文章目录

  • 前言
  • 一、项目概述
  • 二、项目实现
    • 1.引入库
    • 2.实现卡牌类
    • 3.实现扑克类
    • 4.实现玩家类
  • 总结

前言

通过python设计程序实现德州扑克


一、项目概述

1.1项目目标和主要内容
设计程序实现德州扑克,共52张手牌,包含四种花色(红心,黑心,方块,梅花),每种花色共13张(A,2,3,4,5,6,7,8,9,10,J, Q, K)。
1.2项目的主要功能
1)洗牌功能
2)发牌功能
3)验证手牌
皇家同花顺(同一个花色五张连牌 A K Q J 10)
同花顺(同一个花色7 8 9 10 J)
四条(x x x x+y)
满堂红(x x x+ y y)
同花 (5张同一花色)
顺子 (不同花色组成的顺子)
三条 (x x x + y z)
两对 (x x y y + z)
一对 (x x y z c)
普通牌

二、项目实现

1.引入库

代码如下:

import random

2.实现卡牌类

代码如下:

class Card:"""卡牌"""def __init__(self):# 一张卡牌是由花色+点数构成的self.__color = ''self.__value = 1@propertydef color(self):return self.__color@color.setterdef color(self, value):if isinstance(value, str):self.__color = value@propertydef value(self):return self.__value@value.setterdef value(self, value):if isinstance(value, int):if value < 1 or value >= 14:self.__value = 1else:self.__value = valuedef __str__(self):"""重写该方法的目的是为了输出对象的时候,输出我们想要的信息"""# 构造特殊点数的映射关系special_point = {1: 'A', 11: 'J', 12: 'Q', 13: 'K'}# 判断if self.value in special_point:# 替换str_value = special_point[self.__value]else:str_value = str(self.__value)return self.color + str_value + " "

3.实现扑克类

代码如下:

class Poke:def __init__(self):"""初始化一副扑克"""# 花色poke_color = ['红桃', '黑桃', '方块', '梅花']# 点数poke_point = [value for value in range(1, 14)]# 存储牌self.poke = []# 定义索引index = 0# 构造扑克for i in range(4):for j in range(13):# 1. 创建cardcard = Card()# 2. 将生成的card装入扑克中self.poke.append(card)# 3. 设置card的花色和点数self.poke[index].color = poke_color[i]self.poke[index].value = poke_point[j]# 4. 索引递增index += 1def show(self, poke):"""显示所有的扑克"""index = 0for card in poke:if index % len(poke) == 0:print("")print(card, end='')index += 1print("")def shuffle(self):"""洗牌"""random.shuffle(self.poke)def deal_poke(self, start=0, end=5, step=1):"""发牌"""return self.poke[start:end:step]

4.实现玩家类

代码如下:

class Player:"""玩家类"""def __init__(self, player_id, player_name, player_money):self.player_id = player_idself.player_name = player_nameself.player_money = player_money# 玩家获取的手牌self.hand_card = []# 是否为同一花色self.is_samecolor = False# 是否为顺子self.is_straight = Falsedef hand_poke(self, card):"""玩家持有的手牌"""self.hand_card = carddef judge_poke(self):"""验证牌型"""# 1. 将card拆分(花色和点数分别拆出来)hand_colors = [x.color for x in self.hand_card]hand_values = [x.value for x in self.hand_card]# [梅花 方块 红桃 梅花 黑桃] => set          [A 7 8 6 A] => hand_colors_set = set(hand_colors)hand_values_set = set(hand_values)if len(hand_colors_set) == 1:# 判断是否为同一花色self.is_samecolor = Trueif len(hand_values_set) == 5 and max(hand_values_set) - min(hand_values_set) == 4:# 判断是否为顺子self.is_straight = Trueif self.is_samecolor and self.is_straight:print("同花顺")return 10elif self.is_samecolor:print("同花")elif self.is_straight:print("顺子")elif len(hand_values_set) == 5:print("基础牌")elif len(hand_values_set) == 4:print("一对子")else:# 四条 满堂红 三条 两对# 四条: 4 4 4 4 5 => (4, 5)  => [4, 1]    44433 [3, 2]  44435 [3, 1, 1]counts = [hand_values.count(x) for x in hand_values_set]if max(counts) == 4:print("四条")elif max(counts) == 3 and len(counts) == 2:print("满堂红")elif max(counts) == 3:print("三条")else:print("两对")

总结

这里对文章进行总结:
1项目的难点和关键点
1)架构的设计,关键步骤的思路。
2)特殊牌组的判断。
3)A J Q K的替换。
2心得体会
调试时的易错点(多次犯的错):
·易错点:不同特殊牌组的判断。
·错误原因:不同牌组容易混淆,牌组的判断不明。
·解决方案:明确不同牌组的特点,找出不点,分步解决。

python实践报告——通过python程序设计实现德州扑克相关推荐

  1. 全球Python调查报告:Python 2正在消亡,PyCharm比VS Code更受欢迎

    作者 | 唐小引 题图 | 自东方 IC 出品 | AI科技大本营(ID:rgznai100) 一年一度的 Python 开发者调查报告终于发布了.该报告由 Python 软件基金会和 JetBrai ...

  2. 全球 Python 调查报告:Python 2 正在消亡,PyCharm 比 VS Code 更受欢迎!

    作者 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 一年一度的 Python 开发者调查报告终于发布了.该报告由 Python 软件基金会和 JetB ...

  3. python培训报告,简述Python语言经验总结_python知识点总结_python培训

    这里介绍Python语言,包括介绍SQLObject.TurboGear.4Suite.Pyro.Twisted.wxPython.希望下面的文章会对你有所帮助. Python语言是不被大多数人知道的 ...

  4. 物流管理python实践报告_Python程序设计 实验报告6

    实验六 函数 安徽工程大学 Python程序设计 实验报告 班级   物流192   姓名 周海国  学号3190505228 成绩 日期     2020.5.5    指导老师       修宇 ...

  5. python实践报告总结_关于开发Python项目的心得总结

    最近照着<Python编程从入门到实践>这本书上的内容,开发了第一个完整的Python项目.之前都是用Python写一些脚本什么的,这是第一次开发一个完整的项目,现将在开发过程中的一些心得 ...

  6. Python实验报告一 python基础试题练习

    实验内容: 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变.(提示:使用切片.) 2.编写程序,输入两个集合 setA 和 setB,分别输出它们 ...

  7. Python实验报告四 python基础试题练习

    定义一个学校人员类SchoolPerson, 其中属性:姓名name.性别sex.年龄age: 方法:设置人员的各个属性的set_info方法: 获取各属性值的get_info方法. 定义好类以后,再 ...

  8. Python实验报告五 python基础试题练习

    文件 一.实验目的与要求 1.掌握文件的打开和关闭的方法. 2.掌握文本文件和二进制文件文件的不同操作,如读写.重命名.删除. 3.掌握os与os.path模块文件和文件夹的操作 二.题目 1 编写程 ...

  9. 【Python实践系列】Python学习与实践(一)

    热门系列: 程序人生,精彩抢先看 特别注意:python代码编辑时:后的执行代码必须在四个空格缩进符后. 1.下载python,创建开发环境. 2.下载完毕,cmd输入python,检测环境是否搭建成 ...

最新文章

  1. 特变电工新能源打造绿色数据中心:综合能效提升18%以上
  2. SAP 作业类型主数据
  3. html ios视频播放器,良心推荐!iOS端的视频播放应用
  4. Systemd 入门教程之实战篇
  5. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<UEL表达式篇>
  6. 电脑故障维修判断指导大全(5)
  7. java零碎要点---Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文
  8. tomcat加入系统服务
  9. java pdf 转txt文件怎么打开_使用iText将TXT文件转换为PDF(保留格式)
  10. linux edi esi eax 汇编指令,汇编指令lodsb和stosb、lodsd和stosd
  11. fiddler抓包工具-WIFI远程连接
  12. sir模型初始值_SIR 模型笔记
  13. 摩拜单车的节能黑科技
  14. idea运行web项目光标乱跳
  15. 前端杂谈: CSS 权重 (Specificity)
  16. VON矿链资本的技术含量内幕是什么?尊皇社区为你揭秘!
  17. 正点原子STM32(基于HAL库)2
  18. 计算机硬件设备ppt教案,《计算机硬件基础》PPT课件.ppt
  19. 普罗米修斯(Prometheus)安装配置部署
  20. yield方法释放锁吗_java多线程,让步yield

热门文章

  1. Entity Framework学习中级篇
  2. 制作自己的紫外线消毒盒
  3. 苹果新专利:扩大电池容量,有望提高 iPhone续航
  4. deluge webui不能添加部分torrent种子解决记录
  5. req.getparameter()
  6. 量子笔记:张量、张量的阶数与向量的维数、外积、张量积
  7. 短信黑名单app接收短信优先级权限设置
  8. 淘汰「中国式教育」,STEM 教育课程是如何设计的?
  9. 模拟器(duckstation, citra,yuzu,ryujinx)便携绿色化的设置方法
  10. 用PDF编辑软件怎样去除水印