"是"不在python IDE中工作,而是在命令行中工作

use*_*046 2 python

我无法理解为什么会发生这种情况..

看看这个python代码:

    word = raw_input("Enter Word")
    length = len(word)

    if word[length-1:] is "e" :
         print word + "d"
Run Code Online (Sandbox Code Playgroud)

如果我输入"爱",它的输出必须"被爱".所以,当我在PyScripter IDE中编写它时,它既不显示错误也不显示输出.但我在python shell中尝试了相同的代码,它的工作原理!

我想知道为什么会这样.

Mar*_*ers 9

is关键字仅在字符串具有完全相同的标识时才起作用,即使字符串具有相同的值,也无法保证.您应该使用==而不是在is这里比较字符串的值.

或者更好的是,使用endswith:

if word.endswith("e"):
     print word + "d"
Run Code Online (Sandbox Code Playgroud)


rpl*_*lnt 6

你应该==在这种情况下使用而不是is.Is检查对象的身份,即id('e')必须与切片返回的字符串的id相等.碰巧,cpython将单字母字符串(和小整数)存储为常量,因此这通常有效.但它不可靠,因为任何其他实现都无法使用它,甚至"e" is "e"不会产生True.只是使用==它应该工作.

编辑:endswith@MarkByers提到的情况甚至更好.更安全,更具可读性