skyteam超级吕布 发表于 2023-8-2 21:29:07

没错又是translate(table)函数

对不起又来麻烦大家了
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'>

学习编程中的Ben 发表于 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'>。

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

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

Mike_python小 发表于 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" 在进行比较时会忽略大小写。

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

isdkz 发表于 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")


这样应该就能得到正确的输出结果了。

skyteam超级吕布 发表于 2023-8-2 21:36:01

学习编程中的Ben 发表于 2023-8-2 21:29
translate(table)函数解析

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

谢谢解决了

skyteam超级吕布 发表于 2023-8-2 21:37:07

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

谢谢解决了{:5_106:}
页: [1]
查看完整版本: 没错又是translate(table)函数