0

在下面的代码中, s 指的是一个字符串(尽管我尝试将它转换为一个列表,但我仍然遇到同样的问题)。

s = "".join(s)
if s[-1] == "a":
    s += "gram"

i 字符串中的最后一项是字母“a”,那么程序需要将字符串“gram”添加到字符串's'代表的末尾。

例如输入:

s = "insta"

输出:

instagram

但我不断得到一个IndexError,任何想法为什么?

4

2 回答 2

7

如果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
于 2013-09-07T09:38:51.367 回答
5

如果s为空,则没有要测试的最后一个字母:

>>> ''[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

改用str.endswith()

if s.endswith('a'):
    s += 'gram'

str.endswith()当字符串为空时不会引发异常:

>>> 'insta'.endswith('a')
True
>>> ''.endswith('a')
False

或者,使用切片也可以:

if s[-1:] == 'a':

因为切片总是返回一个结果(至少是一个空字符串),但str.endswith()对于你的代码的临时读者来说,它的作用是不言而喻的。

于 2013-09-07T09:39:46.513 回答