zrttrz111 发表于 2025-4-23 18:20:00

零基础入门学习python(最新版)28讲课后习题

第5题 >>> "I love FishC.com".translate(str.maketrans("love", "1234", "love"))这里不是把"love"这个字符串给忽略吗?为什么解析说是把'l'、'o'、'v'、'e' 4 个字符给忽略了,如果要忽略这4个字符,不应该 "I love FishC.com".translate(str.maketrans("love", "1234",'l'、'o'、'v'、'e ))这样写吗?我的答案是"I FishC.c2m"

FishC 发表于 2025-4-23 18:22:43

关于字符串translate方法的解答

你的理解有部分偏差,我来分步解释:


[*]str.maketrans的三个参数作用
- 前两个参数是字符替换映射(必须等长)
- 第三个参数是要删除的字符集合(每个字符独立处理)
[*]原代码解析
代码: "I love FishC.com".translate(str.maketrans("love", "1234", "love"))

生成转换表时:
1. 前两个参数建立映射:l→1 / o→2 / v→3 / e→4
2. 第三个参数覆盖前两个映射,强制将 l/o/v/e 映射为 None(即删除)

[*]实际执行过程
原字符串每个字符处理:
I → 保留
空格 → 保留
l → 删除
o → 删除
v → 删除
e → 删除
后续字符中的 o → 删除

最终结果应为:
IFishC.cm(两个空格来自原字符串的空格保留)

[*]为什么不是"I FishC.c2m"
你期望的 "2" 来自 o→2 的替换,但第三个参数会覆盖替换映射,所有 l/o/v/e 只执行删除不执行替换


验证代码:

s = "I love FishC.com"
table = str.maketrans("love", "1234", "love")
print(s.translate(table))# 输出:IFishC.cm


总结要点

[*]删除参数是字符集合,不是子字符串匹配
[*]当替换映射与删除字符冲突时,删除优先级更高
[*]原题结果中的 "2" 不存在,说明你的测试可能有误


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 零基础入门学习python(最新版)28讲课后习题