2016-04-04 8 views
0

Also mache ich einen Passwort-Keeper zum Spaß (nicht für etwas anderes als das Unterrichten selbst), und ich möchte der Benutzer in der Lage sein, ihren Benutzernamen und ihr Passwort zu bearbeiten.Wie ändere ich den Wert einer Variablen für die spätere Verwendung?

Die Art, wie ich es eingerichtet hatte ist es fragt Sie nach einem Benutzernamen und einem Passwort, es überprüft Ihre Antworten gegen ein paar sehr spezifische Werte (Zeile 74), wenn die Aussage wahr wäre, würde es Zugriff erlauben und wenn es ist nicht, es würde den Zugang verweigern.

Ich habe dann versucht, die Aussage zu setzen "if (yourUser == yourNewUser und yourPass == yourNewPass):" es gibt mir eine Variable undefined Fehler, wenn ich versuche mich einzuloggen, was ich irgendwie erwartet.

Also habe ich versucht, die Variablen früh zu definieren, setzen Sie jede von ihnen als 0, wenn das Passwort unverändert ist, würde es auf das normale Bit gehen, und wenn sie geändert wurden oder wenn sie nicht gleich 0 sind würde zu einer anderen Funktion gehen, die das gleiche tut und es irgendwie funktioniert, aber dann verweigert mir Zugang ...

Ich weiß nicht, was ich als nächstes versuchen soll. Wenn Sie irgendeine Erläuterung zu allem, was ich gesagt habe, brauchen, fragen Sie einfach und ich werde versuchen zu helfen.

Hier ist mein Code:

#The goodbye or end statement 
def goodbye(): 
    print('Good Bye! :{D') 
#The main password request statement 
def request(): 
    reqPass = input('Which password would you like?[Google, Twitter, Reddit, Computer]') 
    #still need to figure out dictionary manipulation so this is a temporary sytem. 
    if(reqPass == 'Google' or reqPass == 'google'): 
     print('________________') 
     print('Pass: GOOGLEPASSHERE') 
     print('________________') 
     reqSecPass = input('Request another password?[y/n]') 
     if(reqSecPass == 'y' or reqSecPass == 'Y'): 
      request() 
     else: 
      goodbye() 
    elif(reqPass == 'twitter' or reqPass == 'Twitter'): 
     print('_________________') 
     print('User: TWITTERUSERHERE') 
     print('Pass: TWITTERPASSHERE') 
     print('________________') 
     reqSecPass = input('Request another password?[y/n]') 
     if(reqSecPass == 'y' or reqSecPass == 'Y'): 
      request() 
     else: 
      goodbye() 
    elif(reqPass == 'computer' or reqPass == 'Computer'): 
     print('________________') 
     print('Pass: COMPUTERPASSHERE') 
     print('________________') 
     reqSecPass = input('Request another password?[y/n]') 
     if(reqSecPass == 'y' or reqSecPass == 'Y'): 
      request() 
     else: 
      goodbye() 
    elif(reqPass == 'reddit' or reqPass == 'Reddit'): 
     print('_________________________') 
     print('User: REDDITUSERHERE') 
     print('Pass: REDDITPASSHERE')  
     print('________________') 
     reqSecPass = input('Request another password?[y/n]') 
     if(reqSecPass == 'y' or reqSecPass == 'Y'): 
      request() 
     else: 
      goodbye() 
    #This is the start of the changed password function  
def changedpass(): 
    if(yourUser == yourNewUser and yourPass == yourNewPass): 
     dirCheck = input('Account settings?[y,n]') 
     if(dirCheck == 'y' or dirCheck == 'Y'): 
      #This is the start of the password/username thing 
      print('this function is not working yet!') 
      actSetCheck = input('Change username or password?') 
      if(actSetCheck == 'user' or actSetCheck == 'User' or actSetCheck == 'Username' or actSetCheck == 'username'): 
       yourNewUser = input('What would you like your new username to be?') 
      elif(actSetCheck == 'pass' or actSetCheck == 'Pass' or actSetCheck == 'password' or actSetCheck == 'Password'): 
       yourNewPass = input('What would you like your new password to be?') 
     elif(dirCheck == 'n' or dirCheck == 'N'): 
      request() 

#setting the variables early on 
yourNewUser == 0 
yourNewPass == 0 
#This is the "title screen"  
print('_____This is a password keeper_____') 
#checking if the user has an account 
actCheck = input('Do you already have an account?') 
if(actCheck == 'Yes' or actCheck == 'yes'): 
    #Checking to see if the yourNewUser or yourNewPass variable has been changed 
    if(yourNewUser != '0' or yourNewPass != '0'): 
     changedpass() 
    #asking for user's name and password 
    else: 
     yourUser = input('___What is your Username?___') 
     yourPass = input('___What is your Password?___') 
     if(yourUser == 'ari' and yourPass == 'rycbar1234'): 
      dirCheck = input('Account settings?[y,n]') 
      if(dirCheck == 'y' or dirCheck == 'Y'): 
       #This is the start of the change password/username thing 
       print('this function is not working yet!') 
       actSetCheck = input('Change username or password?') 
       if(actSetCheck == 'user' or actSetCheck == 'User' or actSetCheck == 'Username' or actSetCheck == 'username'): 
        yourNewUser = input('What would you like your new username to be?') 
       elif(actSetCheck == 'pass' or actSetCheck == 'Pass' or actSetCheck == 'password' or actSetCheck == 'Password'): 
        yourNewPass = input('What would you like your new password to be?') 
      elif(dirCheck == 'n' or dirCheck == 'N'): 
       request() 
     #incorrect password thing 
     else: 
      print('Incorrect Username or password') 
+0

Ich glaube, Sie brauchen 'global yourNewUser, yourNewPass' in' changedPass'. Andernfalls weist er lokalen Variablen zu, nicht den globalen Variablen. – Barmar

+0

Was ist der Unterschied zwischen einer globalen und einer lokalen Variablen und wie definiere ich eine Variable als global? Außerdem bin ich bei Python ziemlich neu, also versuche, wenn möglich, Laien zu benutzen. Vielen Dank! –

Antwort

0

Die YourNewUser und YourNewPass Variablen auf 0 in das Gesamtprogramm initialisiert werden. Das Problem besteht darin, dass diese Variablen nach dem Eingeben einer Funktion nicht unbedingt auf die Funktion zugreifen können. Wenn Sie YourNewUser und YourNewPass in der Funktion festlegen, werden die gleichnamigen Variablen im Gesamtprogramm nicht geändert. Sie sind zwei verschiedene Variablen, obwohl sie den gleichen Namen haben.

Eine Möglichkeit, dies zu umgehen, besteht darin, dass die Funktion den Benutzernamen und das Kennwort zum Zurücksetzen in einer Liste am Ende zurückgibt und dann den Benutzernamen und das Kennwort basierend auf dem Index der zurückgegebenen Liste festlegt. Zum Beispiel:

NewPass = ChangedPass() YourNewUser = NewPass[0] yourNewPass = NewPass[1]

+0

Das ist ein bisschen verwirrend für mich, also werde ich ein paar Fragen stellen. –

+0

Sie sagen also, dass die neuen Benutzer- und die neuen Pass-Variablen außerhalb der Funktion nicht zugänglich sind, weil sie innerhalb der Funktion nicht zugänglich sind? Auch würde jemand, der oben erwähnte globale Variablen, alle Instanzen der Variablen myNewUser und myNewPass zu globalen Variablen ändern, die das Problem "gleicher Name, unterschiedliche Variable" beheben? Ich habe den ersten Teil Ihrer Erklärung verstanden, aber nicht ganz den zweiten Teil. Könnten Sie bitte versuchen, es anders zu erklären? Danke für eine ausführlichere Antwort! –

Verwandte Themen