如何使用Python 制作一副撲克牌!來看是怎么實現的!


之前在 《流暢的 Python 》中看到一個例子比較有趣,所以整理一下通過本文分享給大家, 該案例是通過 Python 類屬性創建一幅除去 大王、小王 之后的 52 張撲克牌,並實現 隨機抽牌、排序、洗牌 等功能;

創建一個紙牌類

一副撲克除去大王小王之外,剩下的 52 張紙牌以花色為基准(梅花、方塊、黑桃、紅心)可分為 4 組,每組有 13 張牌組成;因此可創建兩個列表一個來存儲花色,一個存儲 13 個字符;通過兩個列表之間的隨機組合來生成 52 張紙牌,

代碼如下:


代碼中通過 collections.namedtuple 模塊創建一個類來表示一幅紙牌, [’rank','suit'] 分別表示紙牌中的字符(2-10,J-A)和花色;

FranchDeck 類來建 52 張紙牌,其中有兩個特殊方法,len() 返回紙牌數量,__getitem__() 獲取 position(索引) 下的指定紙牌


隨機抽取一張牌

這里借助 random 模塊實現 隨機 抽牌的功能


列表迭代、切片

因為 __getitem__ 方法 把 [] 操作交給 self._cards 列表 ,除了上面提到的 index 定位之外,FranckDeck() 類還可實現切片、迭代操作;


排序操作

常規來說,依據點數來判斷撲克牌的大小的話,2最小,A最大。實現點數排序是比較簡單的, 在創建點數列表時是以上面提到順序進行創建,排序時只需按照 點數所在 index 作為基准 進行排序即可,

除了 點數之外還有一個 花色也需要考慮,對於花色的話,需要建立一個 映射基准(也可以稱之為權重) ,不同花色賦予不同值;Python 的字典類型可以很方面地滿足我們的需要


代碼解讀:

  • 1,代碼中利用字典加入了一個映射機制,黑桃為3,紅心為2,方塊次之,隨后梅花;
  • 2,創建 spades_high 函數來計算 每張牌的權重總值;
  • 3,利用 sorted() 函數 key= spades_high 來作為排序基准,來實現撲克牌排序

洗牌操作

洗牌簡單來說就是對一副撲克牌重新進行無規則地排序;正常情況random.shuffle 可以很方面地實現這個功能,但前提需要保證對象 滿足 可變 協議,這里 FranchDeck() 是不滿足的,直接使用的話會報錯:


對於上面問題,只需要要把 此類由 不變 變成 可變的 即可,創建一個函數賦值為 __setitem__ 屬性


這里抽取到打亂前后紙牌的前 5 個元素,已經實現 洗牌 的功能了!

根據以上的代碼部分,可以進一步開發, 提前設計好 54 張撲克牌的可視化圖片,

創建一個 key:value 映射關系,對撲克牌字符與可視化圖片之間創建一個映射關系,如下圖所示,把此關系集存儲到指定數據庫或文件中, 后面使用后可直接調用

按照上面的進階玩法就可以創建一個基於Python開發撲克牌小程序!

好了,以上就是本篇文章的全部內容了,最后感謝大家的閱讀!

 


此文轉載文,著作權歸作者所有,如有侵權聯系小編刪除!

原文地址:https://www.tuicool.com/articles/fYvuuer

需要源代碼點擊這里下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM