立場新聞 Stand News

【Python 實戰篇】《經濟學人》英語詞彙測驗 Web App

2018/12/10 — 10:25

看了《經濟學人》雜誌多年,除了吸收知識外,也被其精煉的英語運用所吸引,成為我學習新詞彙的重要來源。今次便嘗試以Python及其中的Flask架構,編寫了一個以這本雜誌常用詞語為基礎的多項選擇題測驗遊戲。程式特點是可以在瀏覽器上運行,並且可以記下玩家的往績,如玩家常常在某個詞語出錯,該詞語日後出現的機會會上升,而答對了的生字,則再出現的機會率下降。

遊戲首先會叫玩家輸入一個用戶名稱,主要用於記錄玩家的成績,減少生字重覆出現的機會,以及讓不熟悉的生字出現機會較多。玩家可以到這連結進行遊戲,又或在以下的文字框中參加測驗:

廣告

程式的架構包括一個Python程序,及3個html檔案,另有一個儲存生字的文字檔,及儲存玩家紀錄的資料檔。

先從核心程式test-vocab.py說起,先要輸入Flask用於製造web app的架構,然後讀入儲存生字的文字檔,再將生字與其解釋分割,放於一個字典變數中。生字文字檔的格式為:

廣告

a slew of/a lot of

a scintilla of/一丁點

abet/慫恿

abhor/嚴惡

abominable/可惡

about face/大轉軚

......

接著是炮製生字的隨機生成子程序,有變於單單隨機揀字,本程式是以計分制揀字,基本分3分,若被出題而答中者減一分,答錯者加一分,最低分為一分,生字出現的機率是隨機,但會按計分制作加權,如是者玩家常錯的生字,即分數越高,故再出的機會率亦會較高。每名玩家會有自己的一個生字分數紀錄,在遊戲結束時會儲存於另一個字典變數中,方便日後再玩時載入程式中。

程式的主程序,在於其個控制網頁資料存取的Flask app物件內,主頁是要取得username,然後尋找是否有用這一username儲存的分數紀錄,若有則載入,沒有則生成一個全部生字分數為3的字典變數。

第二個物件則是處理生字測驗網頁的資料存取,負責具體出題及收取答案,並處理答案的正確與否,計算生字概率分數,與及是否完結遊戲。若玩家輸入1-4以外答案時,要求重新輸入。若玩家輸入零,則轉至結束頁,並儲存玩家的生字概率分數,讓下次玩家以同一username登入時再載入。

餘下三個html檔,則為index.html、test.html及end.html,集中處理玩家的輸入及輸出,但背後的邏輯則由python負責。

Flask架構的好處,是免卻學習一大堆伺服器語言如PHP等,單單用Python送出html檔,與瀏覽器溝通,便可製作web app。

當然,這只是簡單的示範,程式下一步改善之處,是完善用戶的登入系統,如加設密碼,或開設資料庫等,讀者可以自己試試在這程式上進一步改良。

 

 

發表意見