了了集(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无视了我的这个要求。
因为忘记抓取第一次的结果图,不得不询问DeepSeek两次。其第二次的回答明显好于第一次。事实上,其第一次的表现和Qwen类似,不停地在同一种或极其相似的思路中打转,经多次提示都未能发现构造密码本后调用translate() 方法的策略,并且有部分策略是错误的。
个人准备的参考答案如下:
两者之间的主要差别是,DeepSeek的代码质量显著好于Qwen——也许是版本的原因?但两者有一个共同点,即经常性地限于某些思路之中。