禮客時尚館董事長翁素蕙曾邀請好友張淑芬和張忠謀夫婦,一起參觀她位於台北木柵「159文創莊園」裡的《紅樓夢》壁畫屏風,當大夥看到劉姥姥進大觀園的畫作時,張忠謀是唯一點出劉姥姥三進大觀園的人。此後,翁素蕙邀請友人看畫,一定會補上這個問題:「你知道劉姥姥幾進大觀園嗎?」至今仍未有人答出來過。最近正在學 Python,也準備開新課。突然想到上一段話,就寫個程式來執行一下。因為還不熟,暫時避開有分頁的網頁。選定的網頁是維基文庫。程式碼
import requests
import numpy as np
for i in range(120): # 120 回
if i <= 8:
chapter_no = "00" + str(i + 1) # 網址使用三個位數,可能有其他更好的寫法
elif 9 <= i <= 98:
chapter_no = "0" + str(i + 1)
else:
chapter_no = str(i + 1)
url = "https://zh.wikisource.org/wiki/%E7%B4%85" \
+ "%E6%A8%93%E5%A4%A2/%E7%AC%AC" \
+ chapter_no + "%E5%9B%9E"
hlm = requests.get(url)
if np.char.count(hlm.text, "劉姥姥") > 0 and np.char.count(hlm.text, "園") > 0: # 同時出現
print("劉姥姥和園同時出現在第 ", str(i + 1), " 回")
輸出
劉姥姥和園同時出現在第 39 回
劉姥姥和園同時出現在第 40 回
劉姥姥和園同時出現在第 41 回
劉姥姥和園同時出現在第 42 回
劉姥姥和園同時出現在第 113 回
劉姥姥和園同時出現在第 120 回
劉姥姥和園同時出現在第 113 回
劉姥姥和園同時出現在第 120 回
程式只找到同時出現 "劉姥姥" 和 "園" 的章回。幾進大觀園需要了解上下文的意涵,尚待努力中。
可以用chapter_no = str(i+1).zfill(3)
回覆刪除