在下面的代码中, s 指的是一个字符串(尽管我尝试将它转换为一个列表,但我仍然遇到同样的问题)。
s = "".join(s)
if s[-1] == "a":
s += "gram"
i 字符串中的最后一项是字母“a”,那么程序需要将字符串“gram”添加到字符串's'代表的末尾。
例如输入:
s = "insta"
输出:
instagram
但我不断得到一个IndexError
,任何想法为什么?
如果s
是空字符串s[-1]
导致IndexError
:
>>> s = ""
>>> s[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
而不是s[-1] == "a"
,您可以使用s.endswith("a")
:
>>> s = ""
>>> s.endswith('a')
False
>>> s = "insta"
>>> s.endswith('a')
True
如果s
为空,则没有要测试的最后一个字母:
>>> ''[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
if s.endswith('a'):
s += 'gram'
str.endswith()
当字符串为空时不会引发异常:
>>> 'insta'.endswith('a')
True
>>> ''.endswith('a')
False
或者,使用切片也可以:
if s[-1:] == 'a':
因为切片总是返回一个结果(至少是一个空字符串),但str.endswith()
对于你的代码的临时读者来说,它的作用是不言而喻的。