有人能解释一下这个代码出了什么问题吗?
str1='"xxx"' print str1 if str1[:1].startswith('"'): if str1[:-1].endswith('"'): print "hi" else: print "condition fails" else: print "bye"
我得到的结果是:
Condition fails
但我希望它打印 hi而不是。
hi
您正在对字符串 减去最后一个字符进行测试:
>>> '"xxx"'[:-1] '"xxx'
注意,最后一个字符 "不是切片输出的一部分。
"
我认为您只是想测试最后一个字符; 使用 [-1:]来切割最后一个元素。
[-1:]
但是,这里不需要切片,只需直接使用 str.startswith()和 str.endswith()。
str.startswith()
str.endswith()
当你说 [:-1]时,你正在剥离最后一个元素。您可以像下面这样对字符串对象本身应用 startswith和 endswith,而不是切片字符串
[:-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
当您设置一个字符串变量时,它不会保存它的引号,它们是其定义的一部分。 所以你不需要使用: 1
你可以选择
if str1[0] == '"' and str1[-1] == '"'
或者
if str1.startswith('"') and str1.endswith('"')
但不要把开头/结尾放在一起检查否则你会把你要找的东西切掉。