我无法理解为什么会发生这种情况..
看看这个python代码:
word = raw_input("Enter Word")
length = len(word)
if word[length-1:] is "e" :
print word + "d"
如果我输入“爱”,其输出必须“被爱”。所以,当我在PyScripter IDE中编写它时,它既不显示错误也不显示输出。但我在python shell中尝试了相同的代码,它的工作原理!
我想知道为什么会这样。
答案 0 :(得分:9)
is
关键字仅在字符串具有完全相同的标识时才起作用,即使字符串具有相同的值,也不能保证。您应该在此处使用==
代替is
来比较字符串的值。
或者更好的是,使用endswith
:
if word.endswith("e"):
print word + "d"
答案 1 :(得分:6)
在这种情况下,您应该使用==
而不是is
。 Is
检查对象的身份,即id('e')必须与切片返回的字符串的id相等。碰巧,cpython将单字母字符串(和小整数)存储为常量,因此这通常有效。但它不可靠,因为任何其他实现都不能使用它,然后即使"e" is "e"
也不必产生True。只需使用==
即可。
编辑:@MarkByers提到的endswith
对于这种情况更好。更安全,更具可读性