iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

30天學Python系列 第 22

Python的random運用

  • 分享至 

  • xImage
  •  

套用昨天所學的random和之前的listfor迴圈,我們就可以在 Python 上設計出一個撲克牌洗牌發牌的程式出來,每次執行程式時,因為使用隨機數,所以可以讓發出的撲克牌順序都會不同。

撲克牌發牌並洗牌

程式碼與成果

https://ithelp.ithome.com.tw/upload/images/20241001/20169364EGjckfT9iY.png

註解

import random  # 引入 random 模組,用於生成隨機數

# 定義撲克牌的花色和點數
p = ['黑', '梅', '方', '紅']  # 花色,分別為黑桃、梅花、方塊、紅心
c = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K']  # 點數,A到K

# 創建一個長度為 52 的列表,每個元素為 0 到 51,對應撲克牌的 52 張牌
poker = list(range(0, 52))  # 0-51 代表所有撲克牌的位置索引

# 洗牌過程:交換 1000 次隨機選擇的兩張牌的位置
for i in range(1, 1000):  # 執行 1000 次交換
    p1 = random.randint(0, 51)  # 隨機生成第1張牌的索引
    p2 = random.randint(0, 51)  # 隨機生成第2張牌的索引
    t = poker[p1]  # 保存第1張牌
    poker[p1] = poker[p2]  # 第1張牌變成第2張牌
    poker[p2] = t  # 第2張牌變成第1張牌(交換完成)

# 發牌過程:將撲克牌分發給 4 名使用者,每人 13 張牌
px = 0  # 用來追踪已經發到哪一張牌
for i in range(1, 5):  # 從 1 到 4 表示 4 名使用者
    print(f'User[{i:>02}]: ', end='')  # 格式化輸出使用者編號
    for j in range(0, 13):  # 每個使用者獲得 13 張牌
        cc = poker[px] // 4  # 計算該牌的點數索引,除以4可以確定牌面點數
        pp = poker[px] % 4   # 計算該牌的花色索引,取模4可以確定花色
        px += 1  # 每發一張牌,px 增加1,表示下一張牌的位置
        print(f'{p[pp]}{c[cc]}', end=' ')  # 根據花色和點數組合輸出一張牌
    print()  # 每個使用者發完 13 張牌後換行

程式碼解析

以下將從程式碼由上而下逐一做解釋

1. 撲克牌定義:

  • p = ['黑', '梅', '方', '紅']:定義撲克牌的四種花色,分別代表黑桃、梅花、方塊、紅心。
  • c = ['A', '2', '3', ..., 'K']:定義撲克牌的13種點數,從 A 到 K。

2. 撲克牌列表 poker:

  • poker = list(range(0, 52)):生成一個列表,包含數字 0 到 51,每個數字對應一張撲克牌(花色和點數的組合)。

3. 洗牌:

  • 程式執行 1000 次隨機交換牌的過程。每次隨機生成兩張牌的索引 p1 和 p2,並將這兩張牌的位置交換,達到洗牌的效果。

4. 發牌:

  • 共有 4 名使用者,每人 13 張牌。for 迴圈 i 控制使用者數量,j 控制每名使用者的 13 張牌。
  • 使用 poker[px] // 4 計算點數(每 4 張牌具有相同的點數),poker[px] % 4 計算花色(4 種花色循環出現)。
  • 每次發完 13 張牌後換行。

上一篇
Python的random
下一篇
Python的class
系列文
30天學Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言