我一直得到全局名'username'没有定义?

2024-10-01 17:39:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,我一直在这个脚本中得到一个全局名称未定义的错误:

import time
def cls():
    print(("\n")*100)
#Registers the Username and Password for the user.
def registerPro():
    cls()
    username=str(input("Enter your Username here: "))
    password=str(input("Enter your Password here: "))
    confirm=str(input("Please confirm your Password: "))
    if password==confirm:
        cls()
        print("Thank you for registering at Apex Industries!")
        time.sleep(3)
        loggingIn()
    else:
        cls()
        print("Your passwords do not match, please re-register.")
        time.sleep(3)
        registerPro()
    return username, password
#Is called by getUsername. If the user entered the password correctly then the login is successful.
def getPass(password):
    cls()
    confirmPass=str(input("Enter your password: "))
    if confirmPass==password:
        cls()
        print("You have logged in successfully.")
    else:
        cls()
        print("Wrong Password. Try again")
        getPass()
#Makes sure the username is in the database.
def getUsername(username):
    cls()
    confirmUser=str(input("Enter your username: "))
    if confirmUser==username:
        getPass(password)
    else:
        cls()
        print("No username with that name in the database.")
        time.sleep(3)
        loggingIn()
#The login for the main program.
def loggingIn():
    cls()
    print("Hello and welcome to the Apex Industries login/register page.")
    print("      Please choose to either Login or Register.")
    print()
    regLog=str(input("Type Login or Register for your choice: "))
    if regLog=='Login':
        getUsername(username)
    elif regLog=='Register':
        registerPro()
    else:
        cls()
        print("That is not a valid option. Try again.")
        time.sleep(3)
        loggingIn()

loggingIn()

我的回溯显示:

^{pr2}$

我做错什么了?我想将username导入到我创建的getUsername()函数中。请记住,我是脚本新手,我只是在自己的时间尝试学习这个,这只是一个测试脚本。任何建议都会很棒。在


Tags: theforinputyouriftimedefusername
2条回答

您正在调用getUsername函数,并将一个名为username的变量作为一个参数,该变量在那时没有定义。 实际上,它是在getUsername函数中定义的,但也不是username定义的。相反,最终包含真实用户名的变量是confirmUser。在这种情况下,这是有意义的,但是username应该包含有效/注册的用户名。这实际上应该是一种包含不止一个用户名的列表,对此,一个专用函数是一种可能的方法。在

有趣的是:你在一开始就正确地使用了regLog。在这里,通过输入定义regLog,然后检查它的值。在

您肯定应该再看一下有关变量、函数(及其参数)的文档,这些都是基本的。哦,应该是raw_input()而不是{}。至少在这种情况下。在

这将是我快速而肮脏(且不完整)的方法:

registeredusers = ['john.doe', 'peter.parker', 'bruce.banner']

def getUsername():
    global registeredusers
    loginname = str(raw_input("Enter username: "))
    if loginname in registeredusers:
        return True
    else:
        return False

def loggingIn():
    regLog = str(raw_input("Login or Register? "))
    if regLog == 'Login':
        if getUsername():
            print "Yay! Logged in"
        else:
            print "Login failed"
    elif regLog == 'Register':
        # do stuff
        pass
    else:
        # do stuff
        pass

loggingIn()

当您在loggingIn()中调用getUsername(username)时,您还没有初始化用户名-您要验证哪个用户名,它来自哪里?如果它找不到本地username,它会在全局命名空间中查找,但在那里找不到它,因此出现错误。在

相关问题 更多 >

    热门问题