了了集(185):Python编程问题(20250210)

出了一道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无视了我的这个要求。

500

因为忘记抓取第一次的结果图,不得不询问DeepSeek两次。其第二次的回答明显好于第一次。事实上,其第一次的表现和Qwen类似,不停地在同一种或极其相似的思路中打转,经多次提示都未能发现构造密码本后调用translate() 方法的策略,并且有部分策略是错误的。

500

个人准备的参考答案如下:

500

两者之间的主要差别是,DeepSeek的代码质量显著好于Qwen——也许是版本的原因?但两者有一个共同点,即经常性地限于某些思路之中。

站务

全部专栏