Ich habe den folgenden Code und in der Login-Funktion ist die Ausgabe fehlerhaft (ein logischer Fehler). Es druckt im Grunde "ungültiger Benutzername und Passwort", bis es zur rechten kommt, und druckt dann "korrekte Anmeldung".Spezifischer Einrückungsfehler in der verschachtelten if-Anweisung in der for-Schleife
fehlerhafte Ausgabe:
Zum Beispiel mit den Testdatum: user3 und Pass3, der Ausgang ist:
*****LOGIN SCREEN******
Username: user3
Password: pass3
invalid username or password
invalid username or password
correct login
>>>
Hier ist der Code in Frage, mit Bezug auf den LOGIN Funktion:
usernames=["user1","user2","user3"]
passwords=["pass1","pass2","pass3"]
def main():
mainmenu()
def mainmenu():
print("****MAIN MENU****")
print("=======Press L to login :")
print("=======Press R to register :")
choice1=input()
if choice1=="L" or choice1=="l":
login()
elif choice1=="R" or choice1=="r":
register()
else:
print("please make a valid selection")
usernames=["user1","user2","user3"]
passwords=["pass1","pass2","pass3"]
def login():
print("*****LOGIN SCREEN******")
username=input("Username: ")
password=input("Password: ")
for index_of_current_user, current_user in enumerate(usernames): #enumerate allows to you to go throw the list and gives to you the current element, and the index of the current element
if username == current_user and passwords[index_of_current_user] == password: #since the two list are linked, you can use the index of the user to get the password in the passwords list
print("correct login")
else:
print("invalid username or password")
def register():
print("*****REGISTRATION****")
username=input("Enter a username:")
password=input("Enter a password:")
users_pass[username] = password
answer=input("Do you want to make another registration?")
if answer=="y":
register()
else:
registration_details()
def registration_details():
print(usernames)
print(passwords)
main()
ich suche ein) Eine Lösung und, um das Problem zu beheben, so dass es druckt nur „richtige Login“, sobald das richtige Paar von Benutzernamen und Passwörtern statt Schleifen und Drucken jeder auf der Suche nach
b) eine Erklärung, warum die Einrückung oder was auch immer hier falsch ist, funktioniert nicht - da die Logik (in einer Sprache wie VB.Net) gut ist.
Ich würde es vorziehen, wenn das Problem ohne zusätzlichen Code (und eine sehr einfache Lösung) behoben werden könnte, aber vielleicht ist die eleganteste Lösung eine Flagge. Das heißt, wenn das Problem nicht nur bei Einrückung oder ähnlichem liegt, habe ich es verpasst.
Sie führen 'else: print ("ungültig ..") 'für jeden fehlgeschlagenen Test, also ja, du bekommst diese Ausgabe. –
können Sie eine Lösung vorschlagen? Bitte beachten Sie, dass, obwohl jemand mich sehr freundlicherweise abgelehnt hat, dies eine gültige Frage ist, dass ich es aus einem VB.Net-Hintergrund komme, in dem diese Logik/Code-Struktur klingen würde – MissComputing
Nur ein Vorschlag, anstatt zwei Listen zu verwenden Speichern Sie Benutzernamen und Passwörter, verwenden Sie stattdessen ein Wörterbuch. –