检查字符串的第一个和最后一个字符

有人能解释一下这个代码出了什么问题吗?

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

我得到的结果是:

Condition fails

但我希望它打印 hi而不是。

273738 次浏览

您正在对字符串 减去最后一个字符进行测试:

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

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

我认为您只是想测试最后一个字符; 使用 [-1:]来切割最后一个元素。

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

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

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

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

你可以选择

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

或者

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

但不要把开头/结尾放在一起检查否则你会把你要找的东西切掉。