了了集(185):Python編程問題(20250210)_風聞
侠山-3小时前
出了一道Python編程題考了考DeepSeek R1、Qwen/Qwen-2.5-Coder-7B與Qwen/Qwen-2.5-72B-instruct。
題目內容如下:
編寫函數 caesar_encrypt(plaintext: str, key: int) -> str,完成普通文本的凱撒加密,返回加密後的文本。其中,參數plaintext為明文,key為密鑰(字母按字母表向右循環移動key位,維持原字母大小寫不變)。注意:(1)只需編寫本函數,其他代碼如下。(2)參數key有效,因此無需進行錯誤處理。(3)扣除函數頭、註釋與文檔字符串後,函數代碼體不得超過2行。(4)此處的代碼行指邏輯行。實際計數時,既不能使用冒號“:”,也不能使用分號“;”的手段合併代碼行。如發生了此類代碼合併,所有被合併的邏輯行都將被單獨計數。(5)至少實現3個版本。
from string import ascii_letters as lts, ascii_lowercase as lls, ascii_uppercase as uls
# 注:ascii_letters實際為 “abcd…zABCD…Z”,即小寫字母在前,大寫字母在後。
def caesar_encrypt(plaintext: str, key: int) -> str:
# 你的代碼。
s = “Fall leaves when leaves fall.”
t = caesar_encrypt(s, 3)
print(“After encrypted:”, t)
使用本機安裝的Ollama和ChatBox訪問Qwen,使用網頁訪問DeepSeek(DeepSeek本地模型下載中……)。這些軟件都給出了答案。
QWen質量較差,在正確答案之外,也一併給出了多種錯誤方案。例如下圖中給出的兩個版本中,版本7是錯的,版本8是對的。但是,這是我明確要求不得使用lambda表達式的解決策略——Qwen無視了我的這個要求。

因為忘記抓取第一次的結果圖,不得不詢問DeepSeek兩次。其第二次的回答明顯好於第一次。事實上,其第一次的表現和Qwen類似,不停地在同一種或極其相似的思路中打轉,經多次提示都未能發現構造密碼本後調用translate() 方法的策略,並且有部分策略是錯誤的。

個人準備的參考答案如下:

兩者之間的主要差別是,DeepSeek的代碼質量顯著好於Qwen——也許是版本的原因?但兩者有一個共同點,即經常性地限於某些思路之中。