上部结构()返回一个显然不等于任何值的字符串,包括另一个字符串上部结构()

2024-09-28 22:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用Python的一个函数,该函数致力于使字符串中的每个字母都大写,但是在字符串上使用它之后,booleans就不适用于该字符串了。你问我什么意思?好吧,我们就说下面的布尔值:

"b".upper() is "B"
".".upper() is "."
".".upper() is ".".upper()

全部为假。你知道吗

我很困惑。它的作用就像我将一个字符串转换成upper()形式后,它返回的不是同样的带大写字母的字符串(文档中说它是这样做的),而是一个全新的对象,它甚至不等于在完全相同的条件下生成的对象。你知道吗

设置断点并查看变量的实际值似乎毫无结果。我将鼠标悬停在is_graduate_input = input("Enter (y/n)").upper() 它给我一个值“Y”,因为这是我输入的。但是就在那一行之后,我的print(is_graduate_input is "Y")语句打印出False?!?!为什么?你知道吗

python的文档说,他们的字母大写算法是在一些Unicode标准中描述的。我不想通读。我认为这没用。有人能告诉我到底怎么回事吗。我想去睡觉。我明天要上学。你知道吗


Tags: 对象函数字符串文档inputis字母大写字母
1条回答
网友
1楼 · 发布于 2024-09-28 22:33:56

如果两个变量指向同一对象id,is将返回True

如果变量引用的对象相等,==将返回True。你知道吗

你所做的是比较两个不同的对象,因此得到错误。你知道吗

"b".upper() is "B" # will return False

对你有用的是

"b".upper() == "B"  # will return True

假设你从

a = "b"
b = "B"
print(id(a))
print(id(a)) # will print same id as above.
print(id(b))
print(id(b)) # will print same id as above.

输出:

4337047792
4337047792
4337610568
4337610568

但是如果打印a.upper()的id,它每次都会返回一个新对象并打印一个新id

print(id(a.upper()))
print(id(a.upper()))

输出:

4372772488
4372772376

这就是"b".upper() is "B" # will return False的原因。因为身份证不匹配。你知道吗

您可以阅读有关这些线程的更多信息:

why does comparing strings in python using either or is sometimes produce

understanding pythons is operator

相关问题 更多 >