题目

编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌。

提示:

设计出3个类:Card类、Hand类和Poke类。

Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值“梅”为梅花,“方”为方块,“红”为红心,“黑”为黑桃。

Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手。

Poke类代表一副牌,可以把一副牌看作是有52张牌的牌手,所以继承Hand类。

1.1 输出样例

This is a module with classes for playing cards.

牌手 1:红桃6 黑桃6 梅花A 方片6 黑桃2 梅花10 红桃3 方片4 方片10 黑桃J 红桃Q 红桃10 红桃8

牌手 2:梅花J 梅花9 红桃7 红桃2 方片K 黑桃K 梅花3 方片7 黑桃Q 黑桃10 梅花Q 梅花8 黑桃7

牌手 3:梅花2 方片A 黑桃3 方片9 黑桃4 红桃K 红桃J 梅花7 红桃4 方片2 梅花4 梅花6 红桃5

牌手 4:黑桃5 红桃9 方片8 梅花5 方片J 黑桃A 梅花K 方片5 黑桃9 方片3 黑桃8 方片Q 红桃A

题解

2.1 代码

# Card类:一张牌

class Card:

"""A playing card.card"""

RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

SUITS = ['梅花', '方片', '红桃', '黑桃']

def __init__(self, rank, suit, face_up=True):

self.rank = rank # 牌面数字1~13

self.suit = suit # 花色

self.is_face_up = face_up # 是否显示牌的正面,True为正面,False为反面

def __str__(self): # 重写print()方法,打印一张牌的信息

if self.is_face_up:

rep = self.suit + self.rank

else:

rep = 'XX'

return rep

def pic_order(self): # 牌的顺序号

if self.rank == 'A':

FaceNum = 1

elif self.rank == 'J':

FaceNum = 11

elif self.rank == 'Q':

FaceNum = 12

elif self.rank == 'K':

FaceNum = 13

else:

FaceNum = int(self.rank)

if self.suit == '梅花':

Suit = 1

elif self.suit == '方片':

Suit = 2

elif self.suit == '红桃':

Suit = 3

else:

Suit = 4

return (Suit - 1) * 13 + FaceNum

def flip(self): # 翻牌方法

self.is_face_up = not self.is_face_up

# Hand类:一手牌

class Hand:

"""A hand of playing cards Hand"""

def __init__(self):

self.cards = [] # cards列表变量存储牌手手里的牌

def __str__(self): # 重写print()方法,打印出牌手的所有牌

if self.cards:

rep = ''

for card in self.cards:

rep += str(card) + '\t'

else:

rep = '无牌'

return rep

def clear(self): # 清空手里的牌

self.cards = []

def add(self, card): # 增加手里的牌

self.cards.append(card)

def give(self, card, other_hand): # 把一张牌给其他选手

self.cards.remove(card)

other_hand.add(card)

# other_hand.append(card) # 上面两行可以用这一行代替

# Poke类:一副牌

# 继承Hand类

class Poke(Hand):

"""Poke类代表一副牌,可以看做是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌

而且要发牌,洗牌,所以增加方法如下方法:"""

def populate(self): # 生成一副牌

for suit in Card.SUITS:

for rank in Card.RANKS:

self.add(Card(rank, suit))

def shuffle(self): # 洗牌

import random

random.shuffle(self.cards) # 打乱牌的顺序

def deal(self, hands, per_hand=13): # 将牌发给玩家,每人默认13张牌

for rounds in range(per_hand):

for hand in hands:

if self.cards:

top_card = self.cards[0]

self.cards.remove(top_card)

hand.add(top_card)

# self.give(top_card,hand) #上两句可以用此句替换

else:

print('不能继续发牌了,牌已经发完了!')

if __name__ == "__main__":

print('This is a module with classes for playing cards.')

players = [Hand(), Hand(), Hand(), Hand()]

poke1 = Poke()

poke1.populate() # 生成一副牌

poke1.shuffle() # 洗牌

poke1.deal(players, 13) # 发给每人13张牌

n = 1

for hand in players:

print('牌手', n, end=':')

print(hand)

n = n + 1

到此这篇关于Python用类实现扑克牌发牌的示例代码的文章就介绍到这了,更多相关Python 扑克牌发牌内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

我们的Python学习扣qun:784758214,从0基础的python脚本到web开发、爬虫、django、数据挖掘数据分析等,0基础到项目实战的资料都有整理。送给每一位python的小伙伴!每晚分享一些学习的方法和需要注意的小细节,学习路线规划,利用编程赚外快。点击加入我们的 python学习圈

python发牌代码十点半_Python制作扑克牌发牌程序,另含大量Python代码!相关推荐

  1. python第一个公开发行版_Python基础篇【第一篇】:python入门

    python 简介 python是一种解释型.面向对象.改动数据类型的高级程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. python是纯粹的自由 ...

  2. python写一个ssh工具_Python3制作简易SSH登录工具|python3教程|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  3. python ctypes实现api测试_Python与C之间的相互调用(Python C API及Python ctypes库)

    2010-01-24 17:58 14237人阅读 评论(11) 我实现 Python C API 此部分可以参考我原来的文章< 准备工作: 闲话少说,看看Python C API.事实上,Py ...

  4. python环境变量的配置_python基础教程-第一讲-带你进入python的世界

    python是一门非常流行的语言,在前段时间网上流传的地产大佬潘石屹宣布要开始学习Python编程,这着实让python又火了一把,但确实反映出python的火热程度 .在2019年12月的世界编程语 ...

  5. python怎么调用c语言_Python调用C语言程序方法解析

    Python调用C语言程序方法解析 首先我们需要将编写好的c程序文件编译为动态库文件(后缀名为.so) 使用下面的命令: gcc 原文件名.c -shared -o 新文件名.so 然后在python ...

  6. 用python输出世界你好汉_python print 格式输出跟老齐学Python之有容乃大的list(4)

    [0, -2, -4, -6, -8] 有了这个内置函数,很多事情就简单了.比如: 复制代码 代码如下: >>> range(0,100,2) [0, 2, 4, 6, 8, 10, ...

  7. python考试有什么用_Python有什么用?2020年学习Python的10个理由

    如果你想学习 Python,但是不知道为什么要学习,那么这里有 10 个理由,强调了在 2020 年学习 Python 的好处. 不过,这些问题取决于谁在问,也就是说,对于初学者来说,学习Python ...

  8. python curl 获取返回值_python获取系统命令的返回值 | curl in python

    项目背景: 通过curl 命令 从服务器获取数组,tids,然后导入到Mysql 表中. 自己想的方案: shell命令不熟悉,另外python中的数据库等接口都已封装,所以想使用Python来做,利 ...

  9. python发牌代码十点半_深夜十点半(一)——我的第一个Python程序“登录系统”...

    系统设计要求: (1)可以输入用户名和密码 (2)密码要密文显示 (3)输错三次要锁定对应的用户 首先,我们来完成要求1,设计一个可以输入用户名和密码的界面,输入正确或错误进行提示. _usernam ...

最新文章

  1. Prodigal:原核基因识别和翻译起始位点鉴定
  2. mac终端Iterm2支持rz和sz的解决方案
  3. unity渲染层级关系小结
  4. Spring的PropertyPlaceholderConfigurer事例应用
  5. 写号是什么意思_内涵段子暗号馒头是什么意思 该怎么接回答对话大全
  6. C语言试题十二之m个人的成绩存放在score数组中,请编写函数function,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指定的数组中。
  7. Django学习笔记《一》初始化pycharm和mysql数据库及相关环境
  8. 徐阿衡 | 知识抽取-实体及关系抽取(一)
  9. 怎样获取php页面get的值,PHP循环获取GET和POST值的代码
  10. 一次解决Linux内核内存泄漏实战全过程
  11. python 获取进程id_使用python 获取进程pid号的方法
  12. @Zabbix配置snmptrap及使用snmptt解析格式化输出
  13. ADS史密斯圆阻抗匹配
  14. 【rmzt】美女杨颖win7主题_8.5
  15. Jrebel激活服务,Jrebel激活,Jrebel激活码,Jrebel破解
  16. oracle exadata效果,exadata成功案例与性能测试-oracle.pdf
  17. 农历数据html,农历公历数据sql,包含闰月数据,天干地支,风水等数据.sql
  18. 维基百科语料库训练词向量
  19. 欧拉回路 poj-1392 Ouroboros Snake
  20. PS各个工具的字母快捷键和英…

热门文章

  1. 三极管发射极负反馈电阻的原理是什么?为什么就能起到负反馈作用呢
  2. 精品微信小程序源码丨基于微信小程序的美容预约+后台管理系统|前后分离VUE[包运行成功]
  3. Redis 的发布和订阅
  4. 干货技巧|如何用3DsMax制作笔记本电脑
  5. html实现凹陷效果,css3怎么实现字体凹陷凸出效果?(附代码)
  6. 《数字图像处理》第4讲——线性运算与空间图像增强
  7. 192.168.0.1登录入口
  8. 树莓派 音频本地的录制与播放、远程音频直播
  9. RK3288-ANDROID8.1-电源指示灯
  10. linux常用命令(轻松入门linux)