2016-04-16 6 views
-1

Jemand gab mir diesen Code zu versuchen, zu beheben, (Schwein Latein) Ich habe es, um eine Zeile durch eine TXT-Datei zu akzeptieren, aber wenn ich weitere Zeilen im TXT hinzufügen Datei bricht ab. Mit Indexfehler. Jeder von euch weiß, was mein Problem ist?Python 2.7 - Akzeptieren mehrere Zeilen durch eine TXT-Datei

vowels = ("A", "a", "E", "e", "I", "i", "O", "o", "U", "u") 



# Functions 

text = raw_input("Enter the path of a text file: ") 
def pig_word(string): 
    for line in text: 
     line = line.split() 
    lines = [] 
    for line in string.split('\n'): 
     new_string = "" 
     for word in line.split(" "): 
      first_letter = word[0] 
      if first_letter in vowels: 
       new_string += word + "way" + " " 
      else: 
       new_string += word[1:] + first_letter + "ay" + " " 
       global new_string 
      lines.append(new_string) 



def line_counter(s): 
    line_count = 0 
    for _ in s.split("\n"): 
     line_count += 1 
    return line_count 

def word_counter(line): 
    word_count = 0 
    list_of_words = line.split() 
    word_count += len(list_of_words) 
    return word_count 

# File path conversion 

file_path = open(text, "r") 
out_file = open("pig_output.txt", "w") 


s = file_path.read() 
pig = pig_word(s) 
out_file.write(str(new_string)+ "\n") 
out_file.write("\n") 


linecount = line_counter(s) 
wordcount = word_counter(s) 


file_path.close() 
out_file.close() 

# Results 

print "\n\n\n\nTranslation finished and written to pig_output.txt" 
print "A total of {} lines were translated successfully.".format(linecount) 
print "A total of {} words were translated successfully.".format(wordcount) 
print "\n\n\n\n" 

Fehler ist:

Traceback (most recent call last): 
    File "C:/Users/Administrator.MU-L-ZB046882H/Desktop/Code/chal.py", line 42, in <module> 
    pig = pig_word(s) 
    File "C:/Users/Administrator.MU-L-ZB046882H/Desktop/Code/chal.py", line 13, in pig_word 
    first_letter = word[0] 
IndexError: string index out of range 
>>> 
+0

Sieht aus, als hätte jemand dir Hausaufgaben gemacht. Gut. Es würde helfen, wenn Sie genaue Fehlermeldung bieten, enthält es oft eine Menge nützlicher Informationen (wie genaue Anweisung, Codezeile, etc.) –

+0

Oh, vergessen Sie, dass danke zu addieren! Weiß nicht, ob es Hausaufgaben ist oder nicht . Nur eine Herausforderung, die mir jemand gab. – PaulB1234

+1

War diese Person der Fragesteller von [dieser Frage] (http://stackoverflow.com/q/36666848/2564301)? – usr2564301

Antwort

0

die Fehler zeigen, dass Sie versuchen, aus einer leeren Zeichenfolge auf den ersten Buchstaben zuzugreifen.

Der Fall könnte Ihre Verwendung von .split mit explizit " " sein.

Wenn Sie zum Beispiel eine Linie mit wenigen Räumen nehmen und teilen sie durch " ", Sie erhalten paar leere Zeichenkette:

>>> line = "  " 
>>> line.split(" ") 
['', '', '', '', '', ''] 

Mai werden Sie besser haben aufzuspalten Standardrohlingen Raumtrennzeichen:

>>> line.split() 
[] 
+0

Mit dieser Methode bekomme ich dann den Fehler: Datei "C: /Users/Administrator.MU-L-ZB046882H/Desktop/Code/chal.py" , Zeile 42, in Schwein = Schwein_Wort (e) Datei "C: /Users/Administrator.MU-L-ZB046882H/Desktop/Code/chal.py", Zeile 12, in Pig_Word für Word in line.split : TypeError: 'builtin_function_or_method'-Objekt ist nicht iterierbar – PaulB1234

+0

@ PaulB1234 Es ist wahrscheinlich, dass meine Antwort ein bestimmtes Problem beheben wird und Sie in ein anderes Problem geraten. Beachten Sie, dass sich StackOverflow auf ein bestimmtes Problem konzentrieren sollte. Fragen in der Art "meinen Code reparieren" werden als zu weit angesehen. Wenn Sie es nicht schaffen, den nächsten Fehler zu beheben, der kommen wird, erstellen Sie eine neue Frage. Aber am besten, wenn Sie es schaffen, sich selbst zu reparieren - Sie werden das Beste daraus lernen und gewinnen. –

+0

@ PaulB1234 Sieht so aus, als hättest du '' 'nach' split' vergessen. Selbst wenn kein Argument im Funktionsaufruf verwendet wird, ist '()' erforderlich. –

0

'new_string + = word [1:] + first_letter + "ay" + ""' wenn das Wort außerhalb des zulässigen Bereichs Ausnahme Diese Zeile einen Index tun könnte nur einen Buchstaben wie ‚a‘ hat;)

und ich stimme mit dem Kommentar, dass Ihre globale Aussage ist verwirrend und eine Fehlerquelle - nur eine Beratung für eine bessere Art;)

+0

Hey, die eigentliche Datei enthält nicht nur einen Buchstaben in einer Zeile. ist Schwein Latein gut oder ist es schlecht ist in der Datei – PaulB1234