Python用类实现扑克牌发牌的示例代码
作者:林大夕可 发布时间:2021-01-07 10:07:07
标签:Python,扑克牌,发牌
1. 题目
编写程序, 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. 题解
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
来源:https://blog.csdn.net/Sherlooock/article/details/106232166


猜你喜欢
- 建立网站时,有很多理由让你遵循Web标准。企业、开发人员和用户都会从兼容标准的做法中获益。这里列举了一些最令人信服的理由,为什么所有网站都应
- 如下所示:import numpy as npZ=np.random.random((5,5))Zmax,Zmin=Z.max(axis=0
- 判断字段是否存在:DROP PROCEDURE IF EXISTS schema_change; DELIMITER //CREATE PR
- 前言很多人会使用postman工具,或者熟悉python,但不一定会使用python来编写测试用例脚本,postman里面可以完整的将pyt
- 前言:由于ES6到ES7增加了很多新的语法,新特性的出现使得大家都希望通过新语法来提升自身的开发效率,但在之前的最新的node可能也没有百分
- Doug Bowman,Google的Visual Design Lead离职了,一封带有感 * 彩的离职信惹发了大家不少的讨论。甚至还有人用
- 利用百度词典进行中翻英import urllib2import reimport sysreload(sys)sys.setdefaulte
- 需求背景在很多时候我们需要抽取视频的某一帧做一些分析或修改等;比如笔者需求就是判断一个人在该视频中出现的频率,以判断他是否是这段视频的主角;
- 前言本文的内容主要是介绍了MYSQL每隔10分钟进行分组统计的实现方法,在画用户登录、操作情况在一天内的分布图时会非常有用,之前我只知道用「
- MySQL是一个关系型数据库管理系统,官方网站是http://www.mysql.com/,分为MySQL Enterprise Editi
- 一、dlib以及opencv-python库安装介于我使用的是jupyter notebook,所以在安装dlib和opencv-pytho
- 经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子的。所以作为慢慢
- 好多次在不同场合,都听到有同行提到“做产品比做设计更有前途”,或者“别做设计了,做产品吧”类似的观点。我不认为它们之间有什么可比性,因为这么
- 1. 序网页弹框是个很常见的功能,比如需要告知用户消息的时候 (Alert),需要用户进行确认的时候 (Confirm),需要用户补充一点信
- ADO.NET 连接到 SQL Server SQL Server .NET Framework 数据提供程序支持类似于 OLE DB (A
- Python3中二叉树前序遍历的迭代解决方案A Binary Tree二叉树是分层数据结构,其中每个父节点最多有 2 个子节点。在今天的文章
- 这十则CSS技巧汇编于网络,作为老手已经司空见惯了,也没有什么新意,但温故而知新,或许阅读一遍也有一定的启发,本文主要面对CSS新手朋友,有
- 实例如下:<?php /** * @name thumb 缩略图函数 * @param sting  
- 调用tf.reset_default_graph()重置计算图当在搭建网络查看计算图时,如果重复运行程序会导致重定义报错。为了可以在同一个线
- * test11.pyimport timeprint "1"time.sleep(2)print "1&qu