Ich habe ein Anmeldeprogramm, das eine Liste auf Passwörter und Benutzernamen überprüft. Wenn Anmeldeinformationen gefunden werden, wird ein Dialogfenster mit der Meldung "Erfolgreich" angezeigt. Andernfalls werden "ungültige Anmeldeinformationen" angezeigt.

Ich habe jedoch ein Problem, bei dem für jede Zeile ein Dialogfenster angezeigt wird, anstatt die Liste aufzulisten und dann die richtige Eingabeaufforderung anzuzeigen. Kurz gesagt, mein Programm zeigt für jede Zeile eine der oben genannten Eingabeaufforderungen an.

Ich verwende PyQt4 für die GUI. Hier ist mein Code:

def process_login(self, username, password):
    loggedin = False
    file = open('acclist.txt')
    login_info = [line.strip().split() for line in file]
    while not loggedin:
        for pos, line in enumerate(login_info):
            if username == line[0] and password == line[1]:
                QtGui.QMessageBox.information(self, 'Login', 'Login Successful')
                loggedin = True
            if loggedin is not True:
                QtGui.QMessageBox.warning(self, 'Warning!', 'Incorrect credentials')

Irgendwelche Ideen?

0
PjMpire 18 Apr. 2018 im 11:10

3 Antworten

Beste Antwort

Sie brauchen wirklich keine while Schleife. Sie können die Dateizeilen durchlaufen, sobald die Anmeldeinformationen mit Ihnen übereinstimmen break. Andernfalls endet die Anmeldung fehlgeschlagen, wenn die Schleife ohne Übereinstimmung endet. wie so:

def process_login(self, username, password):
    loggedin = False
    file = open('acclist.txt')
    login_info = [line.strip().split() for line in file]
    file.close()

    for line in login_info:
        if username == line[0] and password == line[1]:
            QtGui.QMessageBox.information(self, 'Login', 'Login Successful')
            loggedin = True
            break

    if not loggedin:
        QtGui.QMessageBox.warning(self, 'Warning!', 'Incorrect credentials')
2
Omar Einea 18 Apr. 2018 im 14:32

Das Problem ist, dass sich Ihr Dialog innerhalb der for-Schleife befindet. Bedeutet, dass es für jedes Element geöffnet wird. Ein Weg, dies zu beheben, wäre etwa:

def process_login(self, username, password):
  loggedin = False
  file = open('Accounts.txt')
  login_info = [line.strip().split() for line in file]
  while not loggedin:
      incorrect = False
      for pos, line in enumerate(login_info):
          if username == line[0] and password == line[1]:
              loggedin = True
          if loggedin is not True:
              incorrect = True
      if incorrect:
           QtGui.QMessageBox.warning(self, 'Warning!', 'Incorrect credentials'
      else:
           QtGui.QMessageBox.information(self, 'Login', 'Login   Successful')
0
Jakob Sachs 18 Apr. 2018 im 08:16
def process_login(self, username, password):
    file = open('acclist.txt')
    login_info = [line.strip().split() for line in file]
    while True:
        for pos, line in enumerate(login_info):
            if username == line[0] and password == line[1]:
                QtGui.QMessageBox.information(self, 'Login', 'Login Successful')
                break

        QtGui.QMessageBox.warning(self, 'Warning!', 'Incorrect credentials')
        break

Hinweis: Die while - Schleife ist nicht wichtig. Sie wird als Kontext für den erfolgreichen / fehlgeschlagenen Anmeldevorgang verwendet, anstatt eine Variable außerhalb des Bereichs zu speichern

Vergessen Sie nicht, close die Datei zu verwenden, eine bessere Implementierung wird so sein

def process_login(self, username, password):
    logged_in = False
    with open('acclist.txt', 'r') as read_file:
        for line in read_file:
            if username == line[0] and password == line[1]:
                QtGui.QMessageBox.information(self, 'Login', 'Login Successful')
                logged_in=True
                break
        if not logged_in:
            QtGui.QMessageBox.warning(self, 'Warning!', 'Incorrect credentials')
0
shahaf 18 Apr. 2018 im 10:19