繁体   English   中英

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

[英]IndexError: string index out of range - with len()

我目前正在尝试制作一个简单的代码(基本上是疯狂的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()

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

通常你会发现切片 s[-1:]也很有用,因为它为空字符串返回''而不是引发IndexError。

参见http://www.tutorialspoint.com/python/python_lists.htm

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

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

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

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

正确的代码是:

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":来获取和判断尾部元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM