78

谁能解释一下这段代码有什么问题?

str1='"xxx"'
print str1
if str1[:1].startswith('"'):
    if str1[:-1].endswith('"'):
        print "hi"
    else:
        print "condition fails"
else:
    print "bye"   

我得到的输出是:

Condition fails

但我希望它会打印出来hi

4

4 回答 4

119

当你说[:-1]你正在剥离最后一个元素时。您可以像这样应用字符串对象本身startswith,而不是切片字符串endswith

if str1.startswith('"') and str1.endswith('"'):

于是整个程序就变成了这样

>>> str1 = '"xxx"'
>>> if str1.startswith('"') and str1.endswith('"'):
...     print "hi"
>>> else:
...     print "condition fails"
...
hi

更简单,使用条件表达式,像这样

>>> print("hi" if str1.startswith('"') and str1.endswith('"') else "fails")
hi
于 2013-11-13T13:06:26.527 回答
33

您应该使用

if str1[0] == '"' and str1[-1] == '"'

或者

if str1.startswith('"') and str1.endswith('"')

但不要一起切片和检查startswith/endswith,否则你会切掉你正在寻找的东西......

于 2013-11-13T13:08:56.660 回答
16

您正在测试字符串减去最后一个字符

>>> '"xxx"'[:-1]
'"xxx'

请注意最后一个字符 ,"不是切片输出的一部分。

我认为您只想针对最后一个字符进行测试;用于[-1:]仅对最后一个元素进行切片。

但是,这里没有必要切片;只需直接使用str.startswith()str.endswith()

于 2013-11-13T13:06:25.007 回答
0

当您设置字符串变量时,它不会保存它的引号,它们是其定义的一部分。所以你不需要使用:1

于 2013-11-13T13:08:06.967 回答