2016-03-21 16 views
2

Ich lerne Python und schreibe einen grundlegenden "Benutzerprofil-Manager". Dieses Programm ist in der Lage, Benutzerkonten zu einer vorhandenen Datei hinzuzufügen, zu bearbeiten oder zu löschen, die gespeicherte Benutzerkonten enthält. Ich habe es eingerichtet, so dass die Person, die das Programm verwendet, eine Reihe von Fragen durchläuft, um das Hinzufügen, Bearbeiten oder Löschen abzuschließen (das Ganze ist textbasiert). Ich frage mich, ob es eine Möglichkeit gibt, dass ich jede Frage auf ein "quit" -Schlüsselwort hören kann, das das Benutzermanagerprogramm schließen würde, ohne eine wenn-Anweisung für 'quit' in jeder einzelnen Frage zu setzen. Hier ist der Code für die löschen Benutzer Fähigkeit:Wie kann ich eine Immer-auf "Quit" -Option in Python schreiben?

action1 = input("Currently saved users:\n" + 
        # userList is a dictionary containing saved users 
        str(userList.keys()) + 
        "\nEnter the name of the profile you would like to delete.\n" 
        ).lower() 

    # Prevent the built in Admin and Guest users from being modified 
    while action1 == "guest" or action1 == "admin": 
     print("Sorry, this profile cannot be modified. Please try again.") 
     action1 = input("Enter the name of the profile you would like to delete.\n").lower() 

    # Require the active user's password to complete the deletion process (if active user has a password) 
    if user.password != None: 
     delpass = input("Please enter your password to complete this action:\n") 
     while delpass != user.password: 
      delpass = input("Incorrect password for %s. Please try again:\n" %user.username) 
    else: 
     pass 

    # Make sure one more time that the active user is sure about deletion 
    action2 = input("Are you sure you want to delete this user profile?\n").lower() 

    # Delete the selected user profile (which is action1) 
    if action2 == "yes": 
     del userList[action1] 
     print("User " + action1 + " has been deleted from saved users.") 
    else: 
     print("Deletion of user " + action1 + " has been cancelled.") 

Gibt es eine Möglichkeit, es zu machen, so dass Sie eine der Fragen beantworten können mit ‚beenden‘, und es wird die Benutzer-Manager schließen, ohne eine Zugabe wenn Aussage für jede einzelne Frage? Jede Hilfe würde sehr geschätzt werden! Vielen Dank!

Antwort

1

wickeln die input() Funktion in Ihre eigene Funktion, und legen Sie die Prüfbedingung in dort:

def custom_input(question): 
    answer = input(question).lower() 
    if answer == 'quit': 
     sys.exit() # or whatever you want to do 
    return answer 

^dann rufen Sie diese Funktion anstelle der input() Funktion

darüber - ich würde Ihnen auch empfehlen Verwenden Sie eine Datenbank zur einfacheren Verwaltung der Benutzerdatensätze anstelle einer Textdatei und hashen Sie Ihre Kennwörter, damit sie nicht als reiner Text gespeichert werden.