【问题标题】:What is IndexError? I keep Getting It什么是索引错误?我不断得到它
【发布时间】:2013-12-25 19:25:14
【问题描述】:

这是我的代码:

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

我做错了什么?请帮忙!

【问题讨论】:

  • 使用print(r) 发现您的问题

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Python 是0-indexed,所以字符串的第一个字符是str[0],最后一个字符是str[len(str) - 1]。所以,既然你以reverse = len(quote) 开头,那么最后你就在做quote[len(quote)],这是字符串末尾的一个。

    因此,您可能应该从 reverse = a - 1 开始,最后的循环应该类似于:

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

    【讨论】:

    • 还要注意他当前的while循环永远不会退出,因为他递减r,而不是reverse
    • 谢谢,但它似乎不起作用。它只打印第二个字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2017-03-29
    相关资源
    最近更新 更多