IndexError:字符串索引超出范围 - 使用len()

时间:2015-12-29 04:55:17

标签: python string

我目前正在尝试创建一个简单的代码(基本上是疯狂的libs),我创建了一个名为time的变量。用户应该键入几个月或几天的内容。如果用户输入月份或日期,则if语句应添加"s"以使其复数:

time = str(input("Pick a measurement of time (ex. days): "))
if time[len(time)] != "s":
   time = time + "s"

当我测试这段代码时,它给了我这个错误:

Traceback (most recent call last):
   File "D:/nikis_staff/PROGRAMMING/madlibs.py", line 51, in <module>
      if time[len(time)] != "s":
IndexError: string index out of range

我知道string index out of range表示字符串比我想象的要长,但我使用len()

3 个答案:

答案 0 :(得分:3)

Python begin with 0中的索引,即字符串,列表,元组等中的第一个元素是:0。因此s的最后一个元素是len(s)-1。所以time[len(time)]解决了最后一个元素之后的元素,这当然会导致IndexError。请改为使用time[len(time) - 1],或者更好:time[-1]

通常,您会发现slicing s[-1:]也很有帮助,因为它会为空字符串返回''而不是引发IndexError。

C.f。 http://www.tutorialspoint.com/python/python_lists.htm

答案 1 :(得分:2)

如果字符串的长度为5,如'hello',则最大索引为4,因为索引从零开始(从0开始,而不是1)。

>>> len('hello')
5
>>> 'hello'[4]
'o'

您可以通过使用索引的相对偏移来避免计算长度。所以,如果你想要最后一个字符,请使用-1,如下所示:

>>> 'hello'[-1]
'o'

答案 2 :(得分:-1)

正确的代码是:

time = str(input("Pick a measurement of time (ex. days): ")) if time[len(time) - 1] != "s": time = time + "s"

time的长度为len(time),但time的最大索引为len(time) - 1,因为索引从零开始。

或者您可以使用if time[-1] != "s":来判断尾部元素。