什么是IndexError?我一直在努力

时间:2013-12-08 19:23:59

标签: python for-loop while-loop syntax-error python-3.3

这是我的代码:

quote = input("Enter a Sentence: ")

a = len(quote)
counter = 0
counter1 = 0
reverse = a

print("The Length of the sentence is",a,"characters long!")

for x in range(0,a):
    if str.isspace(quote[x]) == True:
        counter = counter + 1

print("The Length of the sentence is",a - counter,"characters long (excluding space...)!")

for x in range(0,a):
    if str.isupper(quote[x]) == True:
        counter1 = counter1 + 1

print("The number of Upper Case Characters in the sentence is",counter1,"characters!")

print("The number of Lower Case Characters in the sentence is",a-counter1,"characters long!\n")


while reverse >= 1:
    r = reverse
    print(quote[r])
    r = r - 1

它的目的是找到关于该句子的所有内容,但唯一的问题是底部的'While'循环。它似乎不起作用,它的目的是“反转”句子。但是,它给出了一个看起来有点像这样的错误:

Traceback (most recent call last):
  File "C:\Documents and Settings\ususer\My Documents\Downloads\StringStuff.py", line 27, in <module>
    print(quote[r])
IndexError: string index out of range

我做错了什么?请帮忙!

2 个答案:

答案 0 :(得分:3)

Python是0 - 已编入索引,因此字符串的第一个字符为str[0],最后一个字符为str[len(str) - 1]。因此,由于您从reverse = len(quote)开始,最后您正在执行quote[len(quote)],这是一个超出字符串结尾的位置。

所以,您应该从reverse = a - 1开始,最后的循环应该类似于:

while reverse >= 0:
    print(quote[reverse])
    reverse = reverse - 1

答案 1 :(得分:0)

你遇到了Python从0开始索引的常见问题,但是将列表的长度作为从1开始计算的有效整数返回。这导致对于任何列表,l[len(l)]都会给你IndexError,因为长度为10的列表只有索引0 ... 9。 您所要做的就是初始化reverse = len(quote)-1。 您还必须在while循环中下降循环变量,因此请使用reverse-=1而不是r=r-1