2016-09-08 6 views
0

Mein Code hat ein Problem. Ich bin relativ neu beim Lesen von Dateien, und als solche weiß ich nicht, was mit meinem Code falsch ist.Warum wird die Eingabe des Benutzers nicht als richtig erkannt?

# Flashcards 

#Read from a file containing questions in the form question, answer 


import random 
import time 

def __run__(): 
    read_file = open('state_capitals.txt','r') 
    lines = read_file.readlines() 
    ran_lines = random.randrange(0,49) 
    string_lines = lines[ran_lines] 
    global string_lines_split # To make debugging easier 
    string_lines_split = string_lines.split(',') 
    print(string_lines_split[1]) # Print correct answer 
    usr_input = input(string_lines_split[0]) 
    if usr_input == str(string_lines_split[1]): 
     print("Correct!") 
    else: 
     print("Incorrect") 
     print(usr_input) 

Wenn ich ausführen Lauf(), funktioniert alles gut, bis ich meine Antwort geben. Ich werde nach einer Antwort gefragt, und wenn ich sie eintrage, druckt das Programm, selbst wenn meine Antwort genau der Antwort in string_lines_split 1 entspricht, dass meine Antwort falsch ist. Link zu Textdokument: http://web.mit.edu/jesstess/www/IntermediatePythonWorkshop/state_capitals.txt

>>>__run__() 
Helena 

MontanaHelena 
Incorrect 
Helena 

Vielen Dank für das Lesen über mein Problem, und führt mich zu einer Lösung. Ich freue mich auf die Zusammenarbeit mit der Stackoverflow-Community.

+0

Wo ist 'string_lines_final' definiert? –

Antwort

1

Zuerst hat Ihr Code einen Fehler: print(string_lines_final[1]) sollte print(string_lines_split[1]) sein.

Ihr Problem ist, dass ein '\n' in string_lines_split[1] hinterherläuft, der den Vergleich fehlgeschlagen verursacht.

Versuchen Sie, string_lines = lines[ran_lines] zu string_lines = lines[ran_lines].rstrip() zu ändern.

+0

Übergeben Sie möglicherweise '" \ r \ n "' an 'rstrip', wenn das Folgen von nicht newline-bezogenem Leerzeichen wichtig ist. – ShadowRanger

+0

Für zukünftige Referenz, wie entfernt das Entfernen von Leerzeichen den Code? Ich nehme an, dass das Entfernen des Leerraums den Code in eine Zeile konvertiert, und wenn dies korrekt ist, funktioniert die Zufallsfunktion dann anders? Ich schätze Ihre Antwort sehr und versuche, mehr über String-Methoden zu erfahren. –

0

auch wenn meine Antwort ist genau das gleiche wie die Antwort in string_lines_split1 gibt das Programm, dass meine Antwort falsch ist

Dann sind sie nicht genau das gleiche. Das musst du akzeptieren, denn Python kann sich nicht beugen oder beugen. Wenn sie nicht gleich sind, aber sie gleich aussehen, versuchen Sie andere Dinge, bis Sie herausfinden, warum.

Hinweis:

Alabama,Montgomery 
Alaska,Juneau 
Arizona,Phoenix 

statt dessen:

Alabama,MontgomeryAlaska,JuneauArizona,Phoenix 

wie kommt die Datei wie folgt angeordnet ist?

Hinweis: Vergleichen Sie die len() Ihrer Eingabe mit der richtigen Antwort.

Hinweis: Vergleichen Sie sie Zeichen für Zeichen. Vielleicht Drucken character codes. So

0

, wenn Sie die Datei zu lesen, kehrte die Liste von read_file.readlines() sieht wie folgt aus:

[...'West Virginia,Charleston\n', 'Wisconsin,Madison\n', 'Wyoming,Cheyenne'] 

So Ihr Code sollte wie folgt sein:

def __run__(): 
    read_file = open('state_capitals.txt','r') 
    lines = read_file.readlines() 
    ran_lines = random.randrange(0,49) 
    string_lines = lines[ran_lines] 
    global string_lines_split # To make debugging easier 
    string_lines_split = string_lines.split(',') 
    print(string_lines_split[1]) # Print correct answer 
    usr_input = input(string_lines_split[0]) 
    if usr_input == str(string_lines_split[1].rstrip()): 
     print("Correct!") 
    else: 
     print("Incorrect") 
     print(usr_input) 
Verwandte Themen