2016-09-10 2 views
-1

Ich versuche, Ex zu lösen. 9.6 Denken Python 3.Wie Debuggen "IndexError: Zeichenfolge-Index außerhalb des Bereichs" in Python?

Question: Write a function called is_abecedarian that returns True if the letters in a word appear in alphabetical order (double letters are ok). How many abecedarian words are there?

Was ich geschrieben habe:

fin= open('words.txt') 
for line in fin: 
line=fin.readline() 
word=line.strip() 
c=0 
index=0 
for letter in word: 
    if ord(letter)<ord(word[index+1]): 
     c=c+1 
     index=index+1 
if c==len(word): 
    print(word) 

Mein Ansatz ist Buchstaben auf numerischen Wert zu konvertieren und sie mit dem nächsten Buchstaben im Wort übereinstimmen jeder durch eine Erhöhung des Index um 1 Die Zeitschleife endet und zählt jedes Mal. Wenn die Zahl gleich der Länge des Wortes ist, was bedeutet, dass der vorhergehende Buchstabe weniger wert war als der nächste. Also druck das Wort aus.

Fehler:

Traceback (most recent call last): File "C:\Users\KARAN\Desktop\Python\Programs\practice.py", line 8, in <module> if ord(letter)<ord(word[index+1]): IndexError: string index out of range 

Ich erhalte 'Indexerror' aber ich denke, Index nicht, die 0 + 1 = 1 außer Reichweite sein sollte? Ich habe versucht, es zu suchen, konnte aber meine Antwort nicht bekommen.

+1

Bitte geben Sie den ** Voll ** Zurückverfolgungs des Fehlers. Lassen Sie uns nicht raten, wo und in welchem ​​Kontext es entstehen könnte. –

+1

Die Python-Indizierung beginnt bei 0 und endet bei 'len (sequence) - 1'. Sie laufen hier bis zu "len (word)", so erhalten Sie einen Indexfehler für den letzten Buchstaben. –

+0

ah .. danke Martijn, ich kümmerte mich nicht darum. Versuche es nochmal mit dem – Vito

Antwort

1

(Veröffentlicht im Namen des OP).

Endlösung:

fin= open('words.txt') 
for line in fin: 
    line=fin.readline() 
    word=line.strip() 
    c=0 
    index=0 
    while index!=(len(word)-1): 
     i=(word[index]) 
     j=(word[index+1]) 
     index=index+1 
     if ord(j)>=ord(i): 
      c=c+1 
    if c==(len(word)-1): 
     print(word) 
+1

Ich denke, es ist erwähnenswert, dass Sie auch 'fin.close()' tun müssen, um sicherzustellen, dass Sie nichts undicht sind. ein einfaches 'mit open ('words.txt) als fin:' Block würde das für dich behandeln. – Minato

+0

Ich werde das sicher hinzufügen danke Mann – Vito

Verwandte Themen