欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python编程基础练习——扑克牌发牌问题

程序员文章站 2022-04-18 09:45:28
采用扑克牌类设计扑克牌发牌程序。4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,并在屏幕上显示每位牌手的牌。##设计发牌顺序:class Card:"""a playing card."""RANKS = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #牌面数字1-13SUITS = ["黑","红","梅","方"]def __init__(self,rank,suit,face_up=True):s...

采用扑克牌类设计扑克牌发牌程序。4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,并在屏幕上显示每位牌手的牌。

##设计发牌顺序:
class Card:
	"""a playing card."""
	RANKS = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #牌面数字1-13
	SUITS = ["黑","红","梅","方"]

	def __init__(self,rank,suit,face_up=True):
		self.rank = rank
		self.suit = suit
		self.is_face_up = face_up
		
	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 card."""
	def __init__(self):  ##cards 列表变量存储手中的牌
		self.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)
	
	##Poke类,Poke是Hand的子类。
class Poke(Hand):
	"""a deck of playing cards."""
	def populate(self):
		for suit in Card.SUITS:
			for rank in Card.RANKS:
				self.add(Card(rank,suit))
	def shuf(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)

				else:
					print("不能继续发牌了,牌已经发完了")
	###主程序:
if __name__ =="__main__":
	print("this is a modle with classes for playing cards.")
	##4个玩家
	players = [Hand(),Hand(),Hand(),Hand()]
	poke1=Poke()
	poke1.populate() 	#生成一副牌
	poke1.shuf()   #洗牌
	poke1.deal(players,13) #给玩家发牌,每人13张
	#显示4位牌手的牌
	n = 1
	for hand in players:
		print("牌手",n,end="")
		print(hand)
		n += 1
	input("\nPress the enter key to exit.")
	print(Card.SUITS)
'''
result:

牌手 1红J	黑A	梅6	梅8	方J	方5	红8	方3	黑7	梅J	方A	黑J	梅4	
牌手 2红10	梅3	梅7	黑2	黑9	红6	黑4	梅K	黑6	方9	梅5	红Q	红9	
牌手 3梅A	红A	方10	方6	方4	红5	梅2	红7	方7	梅10	梅9	方8	方K	
牌手 4红2	方2	黑3	方Q	红3	红4	黑Q	黑K	红K	黑8	梅Q	黑10	黑5	
'''

'''
程序来自 2019年版,清华大学出版社 郑秋生,夏敏捷主编的《Python 项目案例开发从入门到实战》
'''

本文地址:https://blog.csdn.net/qq_40076228/article/details/109634137

相关标签: Python