iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Software Development

軟體開發養成計畫:以小程式實作深化開發能力系列 第 6

[Day6]Python 新手練功:用 random 打造抽籤程式

  • 分享至 

  • xImage
  •  

昨天完成了字數統計小工具,今天依舊延續「實用派」路線~
要挑戰使用VS Code開發第三個小程式──抽籤程式

這次的功能和網路上常見的抽籤工具差不多,但我特地做了一些客製化設計,例如新增「要抽幾個人」以及「是否允許重複中籤」的選項。原因很單純,就是希望這個程式不只是一個練習,而是能在日後真的派得上用場,符合我自己常會遇到的需求。

那麼接下來就一起來看看我的程式實作吧!


匯入模組

載入 Python 的隨機模組,用來做抽籤的隨機選取。

import random
  • random.choice(seq):從序列 seq 隨機取一個元素(有放回,一次一個)。
  • random.choices(seq, k=n):從 seq 隨機取 n 個(有放回,可重複),回傳長度為 n 的 list。
  • random.sample(seq, k=n):從 seq 隨機取 n 個(無放回,不重複),回傳 list。

輸入與清洗候選名單

candidates = input("請輸入候選名單(用頓號分隔):").split("、")
candidates = [c.strip() for c in candidates if c.strip()]
  • input():讀取使用者輸入(字串)。
  • .split(","):以逗號分割成 list(例如 "漢堡, 薯條" → ["漢堡", " 薯條"])。
  • c.strip():去掉兩端空白(避免 " 薯條" 的前空白)。
  • if c.strip():過濾掉純空白項(避免空項被當成候選)。
  • 若 candidates 最後是空 list,就要提醒使用者並重新輸入(程式用 if not candidates: continue)。

要抽幾個 & 驗證輸入(輸入整數、處理例外)

while True:
    try:
        num = int(input(f"要抽幾個?(1 ~ {len(candidates)}): "))
        if 1 <= num <= len(candidates):
            break
        else:
            print("請輸入合理範圍內的數字!")
    except ValueError:
        print("請輸入整數!")
  • int()把字串轉成整數;若輸入非數字會丟 ValueError,因此用try/except捕捉並提示使用者
  • 目前程式把最大值限制為 len(candidates)(表示不允許超出候選人數量的抽取)。

是否允許重複 & 抽籤邏輯

repeat = input("是否允許重複抽中?(y/n): ").strip().lower()
if repeat == "y":
    for _ in range(num):
        results.append(random.choice(candidates))
else:
    results = random.sample(candidates, num)
  • 當 repeat == "y" 時,原程式用random.choice在迴圈內多次選取,意思為每次獨立,有可能選到相同名字 — 有放回
  • 當 repeat != "y" 時,用random.sample無放回,保證不重複

顯示結果

for i, r in enumerate(results, start=1):
    print(f"{i}. {r}")
  • enumerate(results, start=1):方便列出序號(1., 2., ...)。
  • f"{i}. {r}":f-string,簡潔方便處理字串插入。

重複執行 & 程式結束

  • 程式最後會問again = input("\n要再抽一次嗎?(y/n): ").strip().lower(),若使用者輸入不是 'y' 就 break 迴圈並結束,這可以幫助在同一個執行中可以多次抽籤,不用重開程式。

測試結果展示

14


完成了這個抽籤程式的挑戰後,我覺得自己對於流程設計和程式互動有了更深的體會,雖然功能看似簡單,但實際上要思考如何加入「抽幾個人」和「是否重複中籤」這些條件時,才發現細節的安排會大大影響使用體驗。
接下來我期待能挑戰更多互動性或視覺化的小工具~


上一篇
[Day5]文字處理入門:簡單字數統計程式
下一篇
[Day7]一週小程式回顧 + GUI 入門/包裝
系列文
軟體開發養成計畫:以小程式實作深化開發能力7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言