您好,登錄后才能下訂單哦!
使用Python制作撲克牌的方法?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)建一個紙牌類
一副撲克除去大王小王之外,剩下的 52 張紙牌以花色為基準(zhǔn)(梅花、方塊、黑桃、紅心)可分為 4 組,每組有 13 張牌組成;因此可創(chuàng)建兩個列表一個來存儲花色,一個存儲 13 個字符;通過兩個列表之間的隨機(jī)組合來生成 52 張紙牌,
代碼如下:
​
代碼中通過collections.namedtuple模塊創(chuàng)建一個類來表示一幅紙牌,['rank','suit']分別表示紙牌中的字符(2-10,J-A)和花色;
FranchDeck 類來建 52 張紙牌,其中有兩個特殊方法,len() 返回紙牌數(shù)量,__getitem__() 獲取 position(索引) 下的指定紙牌
​
隨機(jī)抽取一張牌
這里借助 random 模塊實(shí)現(xiàn)隨機(jī)抽牌的功能
​
列表迭代、切片
因?yàn)?__getitem__ 方法 把 [] 操作交給 self._cards 列表 ,除了上面提到的 index 定位之外,F(xiàn)ranckDeck() 類還可實(shí)現(xiàn)切片、迭代操作;
​
排序操作
常規(guī)來說,依據(jù)點(diǎn)數(shù)來判斷撲克牌的大小的話,2最小,A最大。實(shí)現(xiàn)點(diǎn)數(shù)排序是比較簡單的,在創(chuàng)建點(diǎn)數(shù)列表時(shí)是以上面提到順序進(jìn)行創(chuàng)建,排序時(shí)只需按照 點(diǎn)數(shù)所在 index 作為基準(zhǔn)進(jìn)行排序即可,
除了 點(diǎn)數(shù)之外還有一個 花色也需要考慮,對于花色的話,需要建立一個映射基準(zhǔn)(也可以稱之為權(quán)重),不同花色賦予不同值;Python 的字典類型可以很方面地滿足我們的需要
​
代碼解讀:
1,代碼中利用字典加入了一個映射機(jī)制,黑桃為3,紅心為2,方塊次之,隨后梅花;2,創(chuàng)建 spades_high 函數(shù)來計(jì)算 每張牌的權(quán)重總值;3,利用 sorted() 函數(shù) key= spades_high 來作為排序基準(zhǔn),來實(shí)現(xiàn)撲克牌排序
洗牌操作
洗牌簡單來說就是對一副撲克牌重新進(jìn)行無規(guī)則地排序;正常情況random.shuffle 可以很方面地實(shí)現(xiàn)這個功能,但前提需要保證對象 滿足可變協(xié)議,這里 FranchDeck() 是不滿足的,直接使用的話會報(bào)錯:
​
對于上面問題,只需要要把 此類由不變變成可變的即可,創(chuàng)建一個函數(shù)賦值為 __setitem__ 屬性
​
這里抽取到打亂前后紙牌的前 5 個元素,已經(jīng)實(shí)現(xiàn)洗牌的功能了!
根據(jù)以上的代碼部分,可以進(jìn)一步開發(fā), 提前設(shè)計(jì)好 54 張撲克牌的可視化圖片,
​
創(chuàng)建一個 key:value 映射關(guān)系,對撲克牌字符與可視化圖片之間創(chuàng)建一個映射關(guān)系,如下圖所示,把此關(guān)系集存儲到指定數(shù)據(jù)庫或文件中,后面使用后可直接調(diào)用
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。