2017-02-23 5 views
0

Ich bekomme ein Problem in meinem Code. Ich habe ein Programm erstellt, das einen Account erstellt, Benutzernamen und Passwort in einer .txt-Datei speichert. Danach wird nach dem Login gefragt und geprüft, ob Benutzername und Passwort übereinstimmen oder nicht. Aber jedes Mal, wenn die else-Bedingung ausgeführt wird. Und ich bekomme die Ausgabe "Sie haben kein Konto". Bitte helfen Sie. Danke im Voraus.Fehler in Readline() oder Bedingung

# MyProgram: Account Verification 

print "\ncreate account:\n" 
f = open("data.txt",'w+') 

def create(): 
    user_name = raw_input("Enter username >> ") 
    password = raw_input("Enter password >> ") 
    confirm = raw_input("Enter password to confirm >> ") 
    if password == confirm: 
     f.write(user_name+"\n"+password) 
     f.close() 
     print "Account created" 
    else: 
     print "\nPassword not matched\n\n Enter details again:\n" 
     create() 

create() 

new = open("data.txt") 
un = new.readline() 
pw = new.readline() 

new.close() 

def login(): 
    print "\nLogin:\n" 
    name = raw_input("Enter username >> ") 
    if name == un: 
     pas = raw_input("Enter password >> ") 
     if pas == pw: 
      print "Welcome!" 
     else: 
      print "Wrong password" 
      login()     
    else: 
     print "You don't have any account" 

login()  
+0

Ich denke, Sie müssen 'strip()' die Ausgabe von 'readline()', um Zeilenumbrüche zu entfernen. –

+0

Können Sie ein Beispiel "data.txt" und eine Eingabe angeben, die das Problem verursacht? –

Antwort

2

readline umfasst die Newline-Zeichen am Ende der Zeile, so sind Sie wahrscheinlich zu vergleichen z.B. "hunter2 \ n" bis "hunter2". Versuchen Sie zuerst, das Leerzeichen zu entfernen.

un = new.readline().strip() 
pw = new.readline().strip() 

Alternativ kann es vorteilhaft sein, Ihre Benutzernamen und Passwörter in einer anderen Art und Weise zu speichern/abrufen als Strings und Lesezeichenketten aus einer Textdatei zu schreiben. Für sehr leichte Anwendungen kann eine einfache Serialisierung wie die pickle oder json Bibliotheken ausreichen; aber alles wirklich Ernst würde von einer richtigen Datenbank profitieren. Bei all diesen müssen Sie sich wahrscheinlich nicht um das Verhalten von readline() kümmern.

+0

Gute Passwortwahl! bash.org/?quote=244321 –