2017-07-20 7 views
-4

Ich habe ein Problem mit der Rückgabe von zwei Variablen aus einer Funktion, obwohl ich die Variablen als global festgelegt haben. Das Programm, das ich mache, ist so konzipiert, dass es den Prozess des Hinzufügens eines Benutzers und des Anmeldens zu diesem Benutzer oder das Ändern des Benutzerkennworts imitiert.Rückgabe von Variablen aus Funktionen python

check = False 

global uname 
global pword 

uname = 0 
pword = 0 

while check == False: 


def user(uname, pword): 
    set_uname = input("Enter username: ") 
    set_pword = input("Enter password: ") 
    print("Username and Password set") 

    return(set_uname, set_pword) 

def login(uname, pword): 
    correct = False 
    while correct == False: 
     enter_uname = input("Enter username: ") 
     enter_pword = input("Enter password: ") 
     if enter_uname == uname and enter_pword == pword: 
      print("Login successful") 
     elif enter_uname != uname or enter_pword != pword: 
      print("Incorrect username or password") 
      correct = False 

def cpword(pword): 
    done = False 
    while done == False: 
     check_pword = input("Enter current password: ") 
     if check_pword == pword: 
      new_pword = input("Enter new password: ") 
      if new_pword == pword: 
       print("New password cannot be old password") 
       done = False 
      elif new_pword != pword: 
       print("Password successfully changed") 
       pword = new_pword 
       done = True 
       return(pword) 
     elif check_pword != pword: 
      print("Incorrect password") 
      done = False 

print("Enter User") 
user(uname, pword) 

uname = set_uname 
pword = set_pword 

print("Login = 1") 
print("Change Password = 2") 

choice = int(input("Enter function: ")) 

if choice == 1: 
    login(uname, pword) 
elif choice == 2: 
    cpword(pword) 
    pword = pword 

ich immer erhalte die Fehlermeldung:

Traceback (most recent call last): File "C:\Users\tay.swain\Documents\Login.py", line 54, in uname = set_uname NameError: name 'set_uname' is not defined

Sobald ich den Benutzer festgelegt, wenn ich die Login-Funktion dieser Fehler auftritt laufen. Ich versuche,

von der Benutzerfunktion zurückzugeben. Ich verstehe, wie man Variable von einer Funktion zurückgibt, wie ich es vorher getan habe, aber ich kann es nicht in diesem Code arbeiten lassen.

+1

"Ich habe die Variablen auf global festgelegt" <- Ihr Programm sagt nicht, dass 'set_uname' und' set_pword' global sind. – khelwood

+0

Das hat funktioniert, ich habe es geschafft, Variablen wie diese vorher ohne die Variable als global –

+0

zurückgeben Warum, genau, erwarten Sie 'set_uname' im globalen Geltungsbereich zu sein? Und Ihre 'globalen' Anweisungen am oberen Rand Ihres Skripts * sind völlig redundant *, Sie sind * bereits im globalen Bereich *. Außerdem gibt die 'user'-Funktion ein Wertepaar zurück, aber Sie verwerfen sie einfach, wenn Sie das Ergebnis des Aufrufs nichts zuweisen ....' user (uname, pword) '. –

Antwort

3

Sie versuchen, zwei Variablen aus der Funktion zurück, sagen:

def foo(): 
    a = 1 
    b = 2 
    return a,b 

Natürlich, wenn ich versuche, von außerhalb der Funktion a oder b zugreifen will ich den gleichen Fehler erhalten, die Sie sehen, das heißt a NameError.

Um die Werte zurück außerhalb der Funktion zu verwenden, was wir tun können:

c = foo() 
print (c) 
# (1,2) which is a tuple 

Um was auch immer Sie in zwei Variablen zurückkehren zu bekommen, einfach zwei Variablen beim Aufruf der Funktion:

a,b = foo() 
print (a,b) 
# 1 1 
+2

FWIW, diese Klammern in der 'return'-Anweisung sind überflüssig. – deceze

+3

Nitpick, die Klammern machen das Tupel nicht, das Komma tut es. –

+0

@ juanpa.arrivillaga danke, wusste das nicht! – DavidG

Verwandte Themen