python生成一副扑克牌_【扑克游戏基本】用python打造出一副扑克牌并实操大转变...

今天要用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♣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值