軟體開發教學筆記(二)使用Python打造Wordle猜字遊戲

Allen Shen
Oct 29, 2022

--

Image from https://biotech.ufl.edu/why-we-love-wordle-according-to-science/

Wordle是近年來相當流行的小遊戲,本質上和小時候玩的1A2B猜數字遊戲差不多,但是解答共有一萬多種可能,讓遊戲的難度大幅提升。Wordle並不只是個遊戲,每人每天都是一樣的謎底,你猜到解答後可以和朋友分享你的”戰況”,讓這個遊戲在社群間容易散播,是它成功的關鍵。

這篇文章會帶領你使用先前設定好的環境,來開發這個小遊戲。

Python學習資源

這個小遊戲雖然簡單,但還是需要基本的語法知識,推薦以下資源來學習Python。

這篇文章的內容會用到列表函式迴圈

拆解問題

Wordle猜字遊戲可以被拆解成幾個簡單的步驟來搭建。

  1. 隨機挑選謎底
  2. 獲取使用者輸入
  3. 比對輸入與謎底

🌟程式的切入點

if __name__ == "__main__":
...
...

寫Python時要養成習慣先在文件中加入這行,並在區塊中開始寫主程式。

隨機挑選謎底

英文當中5個字元的單字有非常多,所以我們可以藉助開源的資料來使用。下載其中的word檔,就準備好所有的謎底資料了。

☝️這行程式碼會開啟相同目錄下的words檔案,讀取檔案資料後將一行作為一個資料單位存進列表中。

️️️☝️導入random模組,使用其中的sample()函式來隨機從指定的列表當中取樣,第一項參數是要取樣的列表,第二項是要取樣的數量,這裡最後我加了一個[0],因為sample()得到的回傳是一個列表(即使只有一項),而我只需要其中的值。

記得把import寫在程式碼的最上方,養成好習慣。

獲取使用者輸入

☝️非常的簡單,只需這一行,程式便會停留並等待使用者輸入,輸入的值會作為字串回傳。

比對輸入與謎底

☝️我們需要以字元為單位來判斷,而字串內的字元可以用列表的方式查找,例如:user_input[2],就是user_input這個字串的第三個字元。

使用for迴圈來檢查每一個字元,先以user_input[i] == answer[i]來判斷在相同的位置,輸入與謎底的字元是否相同,若不同,則用user_input[i] in answer來判斷輸入的字元是否包含在謎底內,最後都不符合的情況代表這個單字不存在。

將以上三個部分結合在一起,就完成一個簡單的Wordle小遊戲了!但似乎還有一些可以精進的地方,可以比照一下Wordle官網的規則說明,當作一個Python練習題吧。

下一篇會教大家怎麼安裝套件並寫一個即時的人物去背程式。

--

--

Allen Shen
Allen Shen

Written by Allen Shen

🇹🇼 TKU ECE MS ⇋ 🇯🇵 UEC 1yr 🚀 Software ✨ AI 🤖️ Robotics Taiko | Coding | Exchange at UEC!