Python用類實(shí)現(xiàn)撲克牌發(fā)牌的示例代碼
1. 題目
編寫程序, 4名牌手打牌,計(jì)算機(jī)隨機(jī)將52張牌(不含大小鬼)發(fā)給4名牌手,在屏幕上顯示每位牌手的牌。
提示:
設(shè)計(jì)出3個(gè)類:Card類、Hand類和Poke類。
Card類代表一張牌,其中FaceNum字段指出是牌面數(shù)字1~13,Suit字段指出的是花色,值“梅”為梅花,“方”為方塊,“紅”為紅心,“黑”為黑桃。
Hand類代表一手牌,可以認(rèn)為是一位牌手手里的牌,其中cards列表變量存儲(chǔ)牌手手里的牌??梢栽黾优啤⑶蹇帐掷锏呐?、把一張牌給別的牌手。
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 # 牌面數(shù)字1~13
self.suit = suit # 花色
self.is_face_up = face_up # 是否顯示牌的正面,True為正面,F(xiàn)alse為反面
def __str__(self): # 重寫print()方法,打印一張牌的信息
if self.is_face_up:
rep = self.suit + self.rank
else:
rep = 'XX'
return rep
def pic_order(self): # 牌的順序號(hào)
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列表變量存儲(chǔ)牌手手里的牌
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列表變量要存儲(chǔ)52張牌
而且要發(fā)牌,洗牌,所以增加方法如下方法:"""
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): # 將牌發(fā)給玩家,每人默認(rèn)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('不能繼續(xù)發(fā)牌了,牌已經(jīng)發(fā)完了!')
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) # 發(fā)給每人13張牌
n = 1
for hand in players:
print('牌手', n, end=':')
print(hand)
n = n + 1
到此這篇關(guān)于Python用類實(shí)現(xiàn)撲克牌發(fā)牌的示例代碼的文章就介紹到這了,更多相關(guān)Python 撲克牌發(fā)牌內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)大戰(zhàn)外星人小游戲?qū)嵗a
這篇文章主要介紹了python實(shí)現(xiàn)大戰(zhàn)外星人小游戲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Python?Pandas輕松實(shí)現(xiàn)數(shù)據(jù)清理
在當(dāng)今的數(shù)據(jù)驅(qū)動(dòng)時(shí)代,數(shù)據(jù)清理是數(shù)據(jù)分析、機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的一步,本文將帶大家輕松上手使用Python和Pandas進(jìn)行數(shù)據(jù)清理,希望對(duì)大家有所幫助2024-12-12
python?實(shí)現(xiàn)?redis?數(shù)據(jù)庫的操作
這篇文章主要介紹了python?包?redis?數(shù)據(jù)庫的操作教程,redis?是一個(gè)?Key-Value?數(shù)據(jù)庫,下文基于python的相關(guān)資料展開對(duì)redis?數(shù)據(jù)庫操作的詳細(xì)介紹,需要的小伙伴可以參考一下2022-04-04
使用Python快速實(shí)現(xiàn)鏈接轉(zhuǎn)word文檔
這篇文章主要為大家詳細(xì)介紹了如何使用Python快速實(shí)現(xiàn)鏈接轉(zhuǎn)word文檔功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Django配置Bootstrap, js實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Django配置Bootstrap, js實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
PyTorch模型轉(zhuǎn)換為ONNX格式實(shí)現(xiàn)過程詳解
這篇文章主要為大家介紹了PyTorch模型轉(zhuǎn)換為ONNX格式實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
在PyCharm中控制臺(tái)輸出日志分層級(jí)分顏色顯示的方法
今天小編就為大家分享一篇在PyCharm中控制臺(tái)輸出日志分層級(jí)分顏色顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07

