鱼C论坛

 找回密码
 立即注册
查看: 1469|回复: 7

[已解决]没错又是translate(table)函数

[复制链接]
发表于 2023-8-2 21:29:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对不起又来麻烦大家了
cjlb=str.maketrans("s_tcjlb","1234567","minecraftverynb")
s_t="minecrafts_tcjlb very nb"
print(s_t.translate(cjlb))
x=s_t.translate(cjlb).strip()
a="1256"
if s_t.translate(cjlb) == "1256":
    print("yes")
else:
    print("no")
print(type(s_t.translate(cjlb)))
print(type(a))
刚听取了回帖的人的意见改了下,但是if条件句那里为什么还是打印“no”啊,x为啥还是不等于a,不都是字符串吗
print(s_t.translate(cjlb))打印了1256
if条件句打印出来“no”
print(type(s_t.translate(cjlb)))和print(type(a))打印的都是<class'str'>
最佳答案
2023-8-2 21:29:29
translate(table)函数解析

让我们分析一下你的代码,以便找出为什么 if 条件语句打印出 "no" 的原因:

你定义了字符映射表 cjlb,然后定义了字符串 s_t 和变量 a

print(s_t.translate(cjlb)) 这一行中,你打印了 s_t 经过字符替换后的结果,它输出为 "1256"。

x = s_t.translate(cjlb).strip() 这一行中,你将经过字符替换后的结果赋值给变量 x,但你还通过 .strip() 方法去除了字符串两端的空白字符。

if 条件语句中,你比较了 s_t.translate(cjlb) 与字符串 "1256" 是否相等。这里需要注意的是,s_t.translate(cjlb)"1256" 所表示的值虽然内容相同,但它们是不同的字符串对象。

为了解决这个问题,你需要使用变量 x 来进行比较,因为 x 是经过 .strip() 处理后的字符串,并且与 "1256" 相等。修改后的代码如下:
cjlb = str.maketrans("s_tcjlb", "1234567", "minecraftverynb")s_t = "minecrafts_tcjlb very nb"x = s_t.translate(cjlb).strip()a = "1256"if x == a:    print("yes")else:    print("no")print(type(x))print(type(a))
现在,当你运行这段代码,应该会打印出 "yes"。同时,print(type(x))print(type(a)) 将显示两者的类型都是 <class 'str'>

希望这次能解决你的问题!如果你还有任何疑问,请随时提出。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-2 21:29:29 | 显示全部楼层    本楼为最佳答案   
translate(table)函数解析

让我们分析一下你的代码,以便找出为什么 if 条件语句打印出 "no" 的原因:

你定义了字符映射表 cjlb,然后定义了字符串 s_t 和变量 a

print(s_t.translate(cjlb)) 这一行中,你打印了 s_t 经过字符替换后的结果,它输出为 "1256"。

x = s_t.translate(cjlb).strip() 这一行中,你将经过字符替换后的结果赋值给变量 x,但你还通过 .strip() 方法去除了字符串两端的空白字符。

if 条件语句中,你比较了 s_t.translate(cjlb) 与字符串 "1256" 是否相等。这里需要注意的是,s_t.translate(cjlb)"1256" 所表示的值虽然内容相同,但它们是不同的字符串对象。

为了解决这个问题,你需要使用变量 x 来进行比较,因为 x 是经过 .strip() 处理后的字符串,并且与 "1256" 相等。修改后的代码如下:
cjlb = str.maketrans("s_tcjlb", "1234567", "minecraftverynb")s_t = "minecrafts_tcjlb very nb"x = s_t.translate(cjlb).strip()a = "1256"if x == a:    print("yes")else:    print("no")print(type(x))print(type(a))
现在,当你运行这段代码,应该会打印出 "yes"。同时,print(type(x))print(type(a)) 将显示两者的类型都是 <class 'str'>

希望这次能解决你的问题!如果你还有任何疑问,请随时提出。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 21:29:29 | 显示全部楼层
translate(table)函数问题排查

根据你提供的代码片段,我看到你对之前的代码进行了一些修改。让我们逐步解析你的代码,以便找出为什么条件语句打印 "no" 的原因。

你使用 strip() 函数去除了 x 的两端空白字符,并将结果重新赋值给 x

然后,你使用条件语句判断 s_t.translate(cjlb) 是否等于字符串 "1256"。如果相等,则打印 "yes",否则打印 "no"。

现在让我们来找出问题所在:

问题可能出现在字符串的比较上。在 Python 中,字符串的比较是区分大小写的。因此,如果 s_t.translate(cjlb) 生成的字符串与 "1256" 在大小写方面有任何差异,它们将被认为不相等。

为了解决这个问题,你可以使用 .lower() 函数将两个字符串转换为小写,并进行比较。修改后的代码如下:
cjlb = str.maketrans("s_tcjlb", "1234567", "minecraftverynb")s_t = "minecrafts_tcjlb very nb"print(s_t.translate(cjlb))x = s_t.translate(cjlb).strip()a = "1256"if s_t.translate(cjlb).lower() == "1256":  # 使用 lower() 函数进行大小写不敏感的比较    print("yes")else:    print("no")print(type(s_t.translate(cjlb)))print(type(a))
现在当你运行代码时,应该打印出 "yes",因为 s_t.translate(cjlb) 和 "1256" 在进行比较时会忽略大小写。

希望这能解决你的问题!如果你还有任何疑问,请随时问我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 21:29:30 | 显示全部楼层
问题在于  s_t.translate(cjlb)  返回的字符串与  "1256"  并不相等,尽管它们看起来很相似。问题出在  translate  函数和  strip  函数的使用上。

首先,让我们分析一下你的代码:
cjlb = str.maketrans("s_tcjlb", "1234567", "minecraftverynb")
s_t = "minecrafts_tcjlb very nb"
print(s_t.translate(cjlb))
x = s_t.translate(cjlb).strip()
a = "1256"
if s_t.translate(cjlb) == "1256":
    print("yes")
else:
    print("no")
print(type(s_t.translate(cjlb)))
print(type(a))

你在  maketrans  函数中建立了一个字符映射表,将字符 "s_tcjlb" 转换为 "1234567",同时删除字符 "minecraftverynb"。然后你对字符串  s_t  应用了这个映射表,得到了  "1234567_1234567 1234567" 。接下来,你使用  strip  函数去除了字符串两侧的空格,所以  x  的值是  "1234567_1234567 1234567" 。

在  if  条件句中,你尝试将  s_t.translate(cjlb)  与字符串  "1256"  进行比较,但这里要注意,虽然两者看起来都是字符串,但实际上它们的内容是不同的。 s_t.translate(cjlb)  的内容是  "1234567_1234567 1234567" ,而  "1256"  是一个不同的字符串。

因此, if  条件句的比较结果为  False ,所以会打印出 "no"。

至于为什么  print(s_t.translate(cjlb))  打印了 "1256",这是因为你在这里打印的是  s_t.translate(cjlb)  的结果,而没有进行比较。

最后, print(type(s_t.translate(cjlb)))  和  print(type(a))  打印的结果都是  <class 'str'> ,这是因为无论是否进行了比较,它们都是字符串类型。

如果你想要比较  s_t.translate(cjlb)  与  "1256"  是否相等,你需要修改条件语句为:
if x == "1256":
    print("yes")
else:
    print("no")

这样应该就能得到正确的输出结果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 21:36:01 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-2 21:29
translate(table)函数解析

让我们分析一下你的代码,以便找出为什么 if 条件语句打印出 "no" 的原因:

谢谢解决了

点评

看看我的帖子,有用给个最佳  发表于 2023-8-2 21:36

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
学习编程中的Ben + 1 + 1 没事不用谢,以后最佳答案尽可能给我就行了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 21:37:07 | 显示全部楼层
isdkz 发表于 2023-8-2 21:29
问题在于  s_t.translate(cjlb)  返回的字符串与  "1256"  并不相等,尽管它们看起来很相似。问题出在  tra ...

谢谢解决了

点评

他们是chatgpt!!!  发表于 2023-8-2 23:26
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表