從猜數字到抽獎:探索 Python random 模組的樂趣

從猜數字到抽獎:探索 Python random 模組的樂趣
多顆在空中翻滾的骰子,象徵著 Python random 模組帶來的隨機性與樂趣。

在許多程式應用中,我們都需要一些不可預測的元素,這就是「隨機性」。無論是製作一個小遊戲、模擬一個複雜的系統,還是為抽獎活動隨機挑選得獎者,隨機數(Random Numbers)都扮演著關鍵角色。

Python 內建的 random 模組,就是專門為您處理這類任務而設計的。它就像一個藏著各種隨機魔法的工具箱,能輕鬆生成各種形式的隨機數據。

本文將帶您探索 random 模組中幾個最常用、也最有趣的函式,並透過實戰範例,讓您親手體驗隨機性的樂趣。

1. 啟用 random 模組

random 是一個標準函式庫,使用前只需將它匯入:

import random

2. 生成隨機整數:randint() 與 randrange()

randint()randrange() 是生成隨機整數最常用的兩個函式。

  • random.randint(a, b):生成一個介於 a 和 b 之間的隨機整數,包含 a 和 b
  • random.randrange(start, stop, step):生成一個介於 start 和 stop 之間的隨機整數,不包含 stop。您可以選擇性地加入 step 參數,來指定間隔。
# 生成一個介於 1 到 10 之間的隨機整數,包含 1 和 10
lucky_number = random.randint(1, 10)
print(f"你的幸運數字是:{lucky_number}")

# 生成一個介於 1 到 100 之間、且是 5 的倍數的隨機整數
multiple_of_5 = random.randrange(5, 101, 5)
print(f"5 的倍數幸運數字是:{multiple_of_5}")

3. 從序列中隨機選擇:choice() 與 choices()

當您需要從一個既有的序列(例如列表或元組)中隨機挑選一個或多個元素時,這兩個函式能派上用場。

  • random.choice(sequence):從序列中隨機選取一個元素。
  • random.choices(sequence, k=n):從序列中隨機選取 n 個元素,並以列表回傳。這個函式可以重複選取同一個元素。
# 隨機挑選一個午餐選項
lunch_options = ['排骨飯', '義大利麵', '咖哩飯', '牛肉麵']
today_lunch = random.choice(lunch_options)
print(f"今天午餐吃:{today_lunch}")

# 模擬抽獎:從名單中隨機選出 3 位得獎者
contestants = ['小明', '小華', '小強', '小美', '小麗']
winners = random.choices(contestants, k=3)
print(f"本次得獎者是:{winners}")

4. 隨機打亂序列:shuffle()

random.shuffle() 函式能夠就地(in-place)打亂一個序列的順序。這表示它會直接改變原始的序列,而不是回傳一個新的。這在撲克牌遊戲或洗牌等場景中非常實用。

注意: shuffle() 只能用於可變(mutable)的序列,例如列表 list。對於不可變的序列,例如元組 tuple 或字串 string,則會發生錯誤。

# 模擬洗牌
cards = ['A', 'K', 'Q', 'J', 10, 9, 8, 7, 6, 5, 4, 3, 2]
print(f"原始牌組:{cards}")

random.shuffle(cards)
print(f"洗牌後:{cards}")

5. 生成隨機浮點數:random() 與 uniform()

當您需要生成介於 0 到 1 之間的隨機小數時,可以使用 random()uniform()

  • random.random():生成一個介於 0.0 到 1.0 之間的隨機浮點數,不包含 1.0。
  • random.uniform(a, b):生成一個介於 a 到 b 之間的隨機浮點數,可能包含 a 和 b。
# 生成一個介於 0.0 到 1.0 之間的隨機小數
random_float = random.random()
print(f"隨機小數:{random_float}")

# 生成一個介於 50.0 到 100.0 之間的隨機小數
random_score = random.uniform(50.0, 100.0)
print(f"隨機成績:{random_score:.2f}") # 保留兩位小數

綜合實戰:打造一個猜數字遊戲

現在,讓我們將這些函式結合起來,打造一個簡單的猜數字遊戲。

import random

# 1. 隨機生成一個 1 到 100 之間的秘密數字
secret_number = random.randint(1, 100)
print("猜數字遊戲開始!請猜一個 1 到 100 之間的數字。")

guess_count = 0
while True:
    try:
        # 2. 接收使用者輸入
        user_guess = int(input("請輸入你的猜測:"))
        guess_count += 1

        # 3. 判斷猜測結果
        if user_guess < secret_number:
            print("太小了,再大一點!")
        elif user_guess > secret_number:
            print("太大了,再小一點!")
        else:
            print(f"恭喜你,猜對了!秘密數字就是 {secret_number}。")
            print(f"你總共猜了 {guess_count} 次。")
            break # 猜對後跳出迴圈
            
    except ValueError:
        print("請輸入一個有效的數字!")

透過這個遊戲,您就能親身感受到 random 模組在遊戲與互動應用上的強大魅力。

較新的 較舊