|
|
您的代码基本思路正确,但存在一个逻辑错误:if len(w) == 6 and w in words 中,w in words 永远为 True,因为 w 本身就是从 words 里取出的,所以条件退化为「选出所有长度为 6 的单词」,而非您期望的「单词与其逆序词都在集合中」。
修正方法:将判断条件改为 if len(w) == 6 and w[::-1] in words,检查逆序词是否也存在于集合中。
修正后的代码:
- with open('shakespeare.txt', 'r', encoding='utf-8') as f:
- words = set(f.read().split())
- # 查询长度为6且其逆序词也在集合中的单词
- result = {w for w in words if len(w) == 6 and w[::-1] in words}
- print(result)
复制代码
此外,注意:
- 原文件若包含标点(如逗号、句点),split() 会保留它们,可能导致单词「长短」计算含标点。如需更精确匹配,可使用正则提取纯字母单词。
- 若文本中存在重复单词,集合本身会自动去重,无需额外处理。
如果问题已解决,请忽略此提醒。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|