最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌

 更新時(shí)間:2021年04月21日 16:14:08   作者:劉sir學(xué)代碼  
這篇文章主要介紹了python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、前言

最近小編在做一個(gè)關(guān)于德州撲克的小游戲,當(dāng)然已經(jīng)做完了,才寫(xiě)的一系列文章來(lái)記錄一下自己的開(kāi)發(fā)經(jīng)歷

點(diǎn)擊鏈接查看其他文章

python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型

python實(shí)戰(zhàn)之德州撲克第三步-比較大小

一系列文章主要包括:

1.發(fā)牌
2.判斷牌型
3.比較牌的大小
4.開(kāi)始游戲
5.總結(jié)

二、說(shuō)明

制作的德州撲克僅供參考,提供源碼,源碼可運(yùn)行
可滿(mǎn)足基本操作,另外還有一些小功能,可先自行研究
和真正的德州撲克游戲相比,九牛一毛,可用來(lái)練練手
附:本源碼可優(yōu)化,如果有實(shí)力,有時(shí)間,可盡情修改代碼
注:本源碼在pycharm寫(xiě)的,使用python語(yǔ)言
每篇文章最后都有相關(guān)源碼

三、準(zhǔn)備工作

開(kāi)始做之前我們必須了解德州撲克的基本規(guī)則!
  簡(jiǎn)單說(shuō)一下:
  五張牌組合由大到小依次為:
  皇家同花順>同花順>四條>葫蘆>同花>順子>三條>兩隊(duì)>一對(duì)>高牌
  皇家同花順:同一花色最大的順子
  同花順:同一花色的順子
  四條:四張相同+1個(gè)單張
  葫蘆:三張相同+1對(duì)
  同花:5張牌花色相同
  順子:花色不同的順子
  三條:三張相同+2單張
  兩對(duì):2對(duì)+1單
  一對(duì):1對(duì)+3單張
  高牌:五個(gè)單張牌
  注:組合相同則比較牌大?。ɑ始彝槼猓〢1234為最小的順子

四、開(kāi)始工作

首先需要一副撲克牌,代碼很簡(jiǎn)單(如下):

color=["♥", "♠", "♣", "♦"]
value=["2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K ","A "]
pai = [co+va+"" for co,va in product(color,value)]

怎么樣!很簡(jiǎn)單吧!這樣就生成了一副不含鬼王的52張牌

五、效果

['♥2 ', '♥3 ', '♥4 ', '♥5 ', '♥6 ', '♥7 ', '♥8 ', '♥9 ', '♥10', '♥J ', '♥Q ', '♥K ', '♥A ',
 '♠2 ', '♠3 ', '♠4 ', '♠5 ', '♠6 ', '♠7 ', '♠8 ', '♠9 ', '♠10', '♠J ', '♠Q ', '♠K ', '♠A ',
 '♣2 ', '♣3 ', '♣4 ', '♣5 ', '♣6 ', '♣7 ', '♣8 ', '♣9 ', '♣10', '♣J ', '♣Q ', '♣K ', '♣A ',
 '♦2 ', '♦3 ', '♦4 ', '♦5 ', '♦6 ', '♦7 ', '♦8 ', '♦9 ', '♦10', '♦J ', '♦Q ', '♦K ', '♦A ']

按照正常思維,發(fā)牌之前都是先洗牌的,所以接下來(lái)就是洗牌了,先上代碼:

random.shuffle(pai)

說(shuō)明使用了random庫(kù)里面的shuffle()函數(shù),此函數(shù)的作用就是打亂順序

洗好牌之后就是發(fā)牌了,小編使用一個(gè)二維列表來(lái)存儲(chǔ)所有玩家的牌,可能就有人好奇了,二維列表咋存儲(chǔ),首先我們需要知道二維數(shù)組的結(jié)構(gòu),一個(gè)列表里面好幾個(gè)列表,類(lèi)似于a=[[],[],[]…,[]],我們可以往里面添加元素,就拿a這個(gè)二維列表來(lái)說(shuō),a[i]存儲(chǔ)的是每名玩家的牌,例如a[0]存儲(chǔ)的是第一位玩家的牌,以此類(lèi)推,有多少玩家i就有多大,羅嗦了這么多,瞅一眼代碼:

def deal_cards(number,num):
    pais=copy.deepcopy(pai)
    random.shuffle(pais)  # 洗牌
    players=[list() for x in range(number)]
    for pl in range(len(players)):
        players[pl]=[" " for x in range(num)]
    for numb in range(number):#同一副牌
        n=0
        while n<num:
            players[numb][n]=pais.pop(random.randint(0,len(pais)-1))
            n+=1
    return players

這個(gè)函數(shù)可以給n個(gè)人發(fā)m張牌

做一個(gè)簡(jiǎn)單說(shuō)明:
   拷貝一副牌(為什么要拷貝,見(jiàn)下方解釋1)
   洗牌
   創(chuàng)建一個(gè)number行num列的二維數(shù)組players,方便存儲(chǔ)(為啥要?jiǎng)?chuàng)建,見(jiàn)解釋2)
   雙重循環(huán),給players賦值(發(fā)牌)
   解釋1:因?yàn)閷?shí)現(xiàn)生成了一副牌,如果直接對(duì)原來(lái)生成的牌,進(jìn)行操作,會(huì)破壞原來(lái)的牌,假如,需要給1個(gè)人發(fā)10萬(wàn)次牌,來(lái)統(tǒng)計(jì)牌型的話(huà),就需要?jiǎng)?chuàng)建100萬(wàn)次的牌,隨著發(fā)牌次數(shù)的增加,所創(chuàng)建的牌占的內(nèi)存會(huì)越來(lái)越大,運(yùn)行也會(huì)越來(lái)越慢,導(dǎo)致等待幾分鐘或幾十分鐘才會(huì)輸出結(jié)果,進(jìn)行一個(gè)深拷貝,就是賦值一副牌,復(fù)制一副牌的時(shí)間和空間花銷(xiāo),遠(yuǎn)遠(yuǎn)小于創(chuàng)建一副牌。通過(guò)實(shí)踐可知,10萬(wàn)次發(fā)牌,通過(guò)不斷創(chuàng)建牌時(shí)間花銷(xiāo)大約為91秒,通過(guò)深拷貝的花銷(xiāo)時(shí)間為大約為6秒,對(duì)比一下,差距多么大!
   解釋2:我們需要一個(gè)容器來(lái)存儲(chǔ)玩家的牌,可以使用列表,字典,使用列表的話(huà)就是二維列表(前面已經(jīng)說(shuō)明),是用字典的話(huà),key為玩家i,value為對(duì)應(yīng)玩家的牌。使用列表,字典的區(qū)別不大只是操作上略有不同,小編使用列表存儲(chǔ)玩家的牌
   解釋3: players[numb][n]=pais.pop(random.randint(0,len(pais)-1))  這一行代碼,就是從一副牌中拿一張牌,存到 players[numb][n]中,使用random.randint(0,len(pais)-1)是為了增加隨機(jī)性,最大可能的隨即發(fā)牌,達(dá)到一個(gè)公平的效果,如果函數(shù)不理解的話(huà),可自行搜索,也可查看小編的相關(guān)文章

當(dāng)你看到這里就說(shuō)明這一篇文章就馬上完結(jié)了!

以下內(nèi)容為個(gè)人觀(guān)點(diǎn),可跳過(guò),查看下一篇文章

發(fā)牌程序可以使用很多方法來(lái)操作的,例如字典
只需要?jiǎng)?chuàng)建一副撲克牌,洗牌,發(fā)牌。完成這三步就成功了
非常感謝,非常感謝,非常感謝!
重要的事說(shuō)三遍!
更過(guò)相關(guān)文章可關(guān)注我,會(huì)不斷更新的哦!

六、發(fā)牌完整源碼

import copy
import random
from itertools import product

color=["♥", "♠", "♣", "♦"]
value=["2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K ","A "]
pai = [co+va+"" for co,va in product(color,value)]
print(pai)
random.shuffle(pai)
def deal_cards(number,num):
    pais=copy.deepcopy(pai)
    random.shuffle(pais)  # 洗牌
    players=[list() for x in range(number)]
    for pl in range(len(players)):
        players[pl]=[" " for x in range(num)]
    for numb in range(number):#同一副牌
        n=0
        while n<num:
            players[numb][n]=pais.pop(random.randint(0,len(pais)-1))
            n+=1
    return players

到此這篇關(guān)于python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)德州撲克發(fā)牌內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中線(xiàn)程的基本方法使用技巧

    Java中線(xiàn)程的基本方法使用技巧

    這篇文章主要介紹了Java中線(xiàn)程的基本方法使用技巧,需要的朋友可以參考下
    2017-09-09
  • Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法

    Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法

    這篇文章主要介紹了Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • ZooKeeper開(kāi)發(fā)實(shí)際應(yīng)用案例實(shí)戰(zhàn)

    ZooKeeper開(kāi)發(fā)實(shí)際應(yīng)用案例實(shí)戰(zhàn)

    這篇文章主要為大家介紹了ZooKeeper開(kāi)發(fā)的實(shí)際應(yīng)用案例實(shí)戰(zhàn),文中附含詳細(xì)開(kāi)發(fā)應(yīng)用源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • Hibernate實(shí)現(xiàn)批量添加數(shù)據(jù)的方法

    Hibernate實(shí)現(xiàn)批量添加數(shù)據(jù)的方法

    這篇文章主要介紹了Hibernate實(shí)現(xiàn)批量添加數(shù)據(jù)的方法,詳細(xì)分析了基于Hibernate執(zhí)行批量添加操作的具體步驟與相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-03-03
  • SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)數(shù)據(jù)同步的方法

    SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)數(shù)據(jù)同步的方法

    業(yè)務(wù)需求是,通過(guò)中臺(tái)調(diào)用api接口獲得,設(shè)備數(shù)據(jù),要求現(xiàn)實(shí)設(shè)備數(shù)據(jù)的同步,這篇文章主要介紹了SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)數(shù)據(jù)同步的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java通過(guò)調(diào)用C/C++實(shí)現(xiàn)的DLL動(dòng)態(tài)庫(kù)——JNI的方法

    Java通過(guò)調(diào)用C/C++實(shí)現(xiàn)的DLL動(dòng)態(tài)庫(kù)——JNI的方法

    這篇文章主要介紹了Java通過(guò)調(diào)用C/C++實(shí)現(xiàn)的DLL動(dòng)態(tài)庫(kù)——JNI的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java超詳細(xì)講解類(lèi)變量和類(lèi)方法

    Java超詳細(xì)講解類(lèi)變量和類(lèi)方法

    這篇文章主要介紹了JAVA類(lèi)變量及類(lèi)方法代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-05-05
  • SpringBoot詳細(xì)列舉常用注解的說(shuō)明

    SpringBoot詳細(xì)列舉常用注解的說(shuō)明

    在開(kāi)發(fā)SpringBoot程序的過(guò)程中,有可能與其他業(yè)務(wù)系統(tǒng)進(jìn)行對(duì)接開(kāi)發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot常見(jiàn)的注解的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Java字符串駝峰與下?lián)Q線(xiàn)格式轉(zhuǎn)換如何實(shí)現(xiàn)

    Java字符串駝峰與下?lián)Q線(xiàn)格式轉(zhuǎn)換如何實(shí)現(xiàn)

    這篇文章主要介紹了Java字符串駝峰與下?lián)Q線(xiàn)格式轉(zhuǎn)換如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 基于SpringBoot?Mock單元測(cè)試詳解

    基于SpringBoot?Mock單元測(cè)試詳解

    這篇文章主要介紹了基于SpringBoot?Mock單元測(cè)試詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

五大连池市| 诏安县| 枣庄市| 新源县| 洮南市| 松潘县| 砚山县| 龙南县| 财经| 万盛区| 喜德县| 广德县| 房产| 沂水县| 万全县| 东平县| 保山市| 辽宁省| 格尔木市| 宜丰县| 云浮市| 肃宁县| 乌鲁木齐县| 永川市| 潜山县| 闽侯县| 灵丘县| 赤峰市| 讷河市| 河北省| 凤翔县| 金川县| 枣强县| 禄丰县| 澄迈县| 光山县| 克东县| 万盛区| 景谷| 台中市| 南溪县|