2013-12-08 3 views
0

Вот мой код:Что такое IndexError? Я продолжаю получать его

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 

цель это, чтобы найти все об этом предложении, но единственная проблема является «В то время как» петля в нижней части. Кажется, что это не работает, и цель состоит в том, чтобы «отменить» предложение. Тем не менее, это дает мою ошибку, которая выглядит примерно так:

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 

Что я делаю неправильно? Пожалуйста помоги!

+0

использовать 'print (r)', чтобы обнаружить вашу проблему – mrKelley

ответ

3

Python is 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 
+1

Обратите внимание, что его текущий цикл while никогда не выйдет, поскольку он уменьшает 'r', а не' reverse'. – kevinsa5

+0

Спасибо, но он не работает. Он печатает только второй символ. –

+0

@ Raihaan-Tech Попробуйте сейчас. Ваша петля была немного неправильной. – Xymostech

0

Вы столкнулись с общей проблемой, что Python начинает индексировать от 0, но возвращает длину в list как действительное целое число, отсчитываемое от 1. Это приводит к тому, что для любого списка l[len(l)] предоставит вам IndexError, потому что список длиной 10 будет иметь только индексы 0 ... 9. Все, что вам нужно сделать, это инициализировать reverse = len(quote)-1. Вам также нужно спуститься с переменной цикла внутри цикла while, поэтому используйте reverse-=1 вместо r=r-1.

+0

Спасибо, но та же ошибка появляется ... –

+0

Но ваша инициализация обратных работает просто отлично. –

Смежные вопросы