今天要用python写一副简单的扑克牌, 我们想用物件导向的概念, 分别定义类别「单张扑克牌」与「一副扑克牌」, 而「一副扑克牌」就由52张「单张扑克牌」所组成 类别- 单张扑克牌 一张扑克牌由「点数...
今日要用python写一副简易的扑克游戏,
大家想要物品导向性的定义,
各自界定类型「一张扑克游戏」与「一副扑克牌」,
而「一副扑克牌」就由52张「一张扑克游戏」所构成
类型- 一张扑克游戏
一张扑克游戏由「等级」和「花型」2个因素所构成,
因而class的复位能够那样写
class Card():
def __init__(self, value, suit):
self.value=value
self.suit=suit
表明键入一张牌的「等级」和「花型」能够建立一张牌
类型- 一副扑克牌
在这个类型中,大家要想建立标準的52张扑克游戏,
花型由「红心图片、黑桃K、格子、红梅花」所构成,
我们可以用英文「'h', 's', 'd', 'c'」("Hearts", "Spades", "Diamonds", "Clubs")来表明
等级的範围是1~13,但因为一般 扑克游戏「Ace」比其他等级来的大,
把「Ace」这张牌的等级作为14对大家或许有益处,
因而等级的範围应设为2~14
class StardardDeck():
def __init__(self):
self.cards = [Card(value, suit) for value in range(2,15) for suit in 'hsdc']
def shuffule(self):
random.shuffle(self.cards)
def draw(self):
return self.cards.pop(0)
此外实操2个涵数- shuffule()和draw(),
shuffule()表明把牌洗乱,
要完成这一涵数非常简易,
python内模型组random早已有shuffule涵数,
可以将列阵的次序弄乱
draw()表明从卡组的上边抽一张牌
那样大家就打造一副牌了
打印結果
大家期待能够很便捷的用print()涵数印出一张牌或一副牌来检测大家程序有木有写对,
因而大家再类型中能够界定一个__repr__()方式,
意思是物品被print()涵数通话时候显示信息的字串,
例如假如一张牌是「红梅花8」,大家就视觉效果化的印出来「8♣」,
又例如假如一张牌是「红心图片K」就视觉效果化的印出来「K♡」(此外,习惯性上10可作为T, Ten的含意)
我们在类型- 一张扑克游戏中添加__repr__涵数以下:
class Card():
def __init__(self, value, suit):
self.value=value
self.suit=suit
def __repr__(self):
suits = {"h":"♡", "s":"♠", "d":"♢", "c":"♣"}
values = {**{i:str(i) for i in range(2,10)},
**{10:'T', 11:'J',12:'Q', 13:'K', 14:'A'}}
return values[self.value] suits[self.suit]
在类型- 一副扑克牌中添加__repr__涵数以下:
class StardardDeck():
def __init__(self):
self.cards = [Card(value, suit) for value in range(2,15) for suit in 'hsdc']
def __repr__(self):
return ' '.join([card.__repr__() for card in self.cards])
def shuffule(self):
random.shuffle(self.cards)
def draw(self):
return self.cards.pop(0)
意思是说印出来一副扑克牌等同于把每一张扑克游戏都印出
详细範例程式码
import random
class Card():
def __init__(self, value, suit):
self.value=value
self.suit=suit
def __repr__(self):
suits = {"h":"♡", "s":"♠", "d":"♢", "c":"♣"}
values = {**{i:str(i) for i in range(2,10)},
**{10:'T', 11:'J',12:'Q', 13:'K', 14:'A'}}
return values[self.value] suits[self.suit]
class StardardDeck():
def __init__(self):
self.cards = [Card(value, suit) for value in range(2,15) for suit in 'hsdc']
def __repr__(self):
return ' '.join([card.__repr__() for card in self.cards])
def shuffule(self):
random.shuffle(self.cards)
def draw(self):
return self.cards.pop(0)
if __name__=='__main__':
deck = StardardDeck()
print("标準扑克游戏:", deck)
deck.shuffule()
print("把牌堆洗乱")
randomCard = deck.draw()
print("抽出来最上边的牌:", randomCard)
print("剩余的牌为:" ,deck)
結果(任意大转变每一次結果会不一样):
标準扑克游戏: 2♡ 2♠ 2♢ 2♣ 3♡ 3♠ 3♢ 3♣ 4♡ 4♠ 4♢ 4♣ 5♡ 5♠ 5♢ 5♣ 6♡ 6♠ 6♢ 6♣ 7♡ 7♠ 7♢ 7♣ 8♡ 8♠ 8♢ 8♣ 9♡ 9♠ 9♢ 9♣ T♡ T♠ T♢ T♣ J♡ J♠ J♢ J♣ Q♡ Q♠ Q♢ Q♣ K♡ K♠ K♢ K♣ A♡ A♠ A♢ A♣
把牌堆洗乱
抽出来最上边的牌: Q♢
剩余的牌为: T♠ 6♠ A♢ 8♡ 5♡ 4♣ 7♢ 2♢ 8♢ 3♠ 8♠ 4♠ 2♠ 7♡ 5♠ 5♣ Q♡ 2♣ 6♢ T♣ 3♣ 6♣ K♡ 6♡ 5♢ Q♣ 9♢ 7♠ 2♡ 9♠ 4♡ 3♢ T♡ 3♡ A♣ J♢ J♠ K♠ T♢ J♡ A♠ J♣ 9♣ K♢ 9♡ A♡ Q♠ K♣ 4♢ 7♣ 8♣