Проблема области: переменная в функции не может быть использована в качестве аргумента в другой функции? - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы использовать словарь userInfo в моей функции getCreds () в качестве параметра для моей функции checkLogin (), однако создание userInfo глобальной переменной может быть решением, но это не будет наилучшей практикой. Любой совет о том, как сделать словарь userInfo доступным в качестве аргументов checkLogin () при использовании передового опыта? Примечание. Мне необходимо использовать два параметра в функции checkLogin (). Спасибо! Вот код:

adminList = [
    {
        "username": "DaBigBoss",
        "password": "DaBest"
    },
    {
        "username": "root",
        "password": "toor"
    }
]

def getCreds():
    user_name = input("Enter your username: ")
    password = input("Enter you password: ")
    userInfo = {"username":user_name, "password":password}
    return userInfo

def checkLogin(userInfo, adminList):
    for i in adminList:
        if userInfo == i:
            loggedIn = True
            print("YOU ARE LOGGEDIN!")

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Попробуйте:

def getCreds():
    adminList = [
        {
            "username": "DaBigBoss",
            "password": "DaBest"
        },
        {
            "username": "root",
            "password": "toor"
        }
    ]
    user_name = input("Enter your username: ")
    password = input("Enter you password: ")
    userInfo = {"username": user_name, "password": password}
    return checkLogin(userInfo, adminList)

def checkLogin(userInfo, adminList):
    loggedIn = False
    for i in adminList:
        if i["username"] == userInfo["username"]:
            if i["password"] == userInfo["password"]:
                loggedIn = True

    if loggedIn == True:
        print("YOU ARE LOGGED IN !")
    else:
        print("INCORRECT CREDENTIALS !")
    return loggedIn

getCreds()
0 голосов
/ 06 января 2019

Почему бы просто не вызвать функцию getCreds() внутри checkLogin() вместо попытки передать ее в качестве аргумента. Как то так

def checkLogin(adminList):
    userInfo = getCreds() # <---- calling it inside the function
    for i in adminList:
        if userInfo == i:
            loggedIn = True
            print("YOU ARE LOGGEDIN!")

checkLogin(adminList)

выход

Enter your username: root
Enter you password: toor
YOU ARE LOGGEDIN!

Если вы настаиваете на передаче двух параметров, вы можете сделать что-то вроде

def checkLogin(userInfo, adminList):
    for i in adminList:
        if userInfo == i:
            loggedIn = True
            print("YOU ARE LOGGEDIN!")

userInfo = getCreds()
checkLogin(userInfo, adminList)            
...