[英]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。
如果字符串的长度为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.