我目前正在尝试创建一个简单的代码(基本上是疯狂的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()
。
答案 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。
答案 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":
来判断尾部元素。