This question already has answers here:
Using global variables in a function
                                
                                    (18个答案)
                                
                        
                                4年前关闭。
            
                    
因此,我一直在为Python“计算机软件”进行编码,在该计算机上您基本上具有可以编辑的登录用户名和密码。我尝试添加一项功能,该功能可让您“删除”密码(但更像是跳过密码),但无法正常工作。这是跳过过程的代码:

def Access1():
    print("Input first name")
    print("")
    answer = raw_input()
    if(answer.lower() == username and PasswordSkip == True):
        print("")
        print("Access granted")
        List1()
    if(answer.lower() == username and PasswordSkip == False):
        print("")
        print("Access granted")
        Access2()


*请注意,Access2()是需要密码才能继续的功能,而List1()是系统的主菜单。

这是将布尔值设置为True的地方:

def PasswordRemove():
    print("")
    print("Are you sure you want to remove your password, <yes> or <no>?")
    print("")
    key = raw_input()
    if(key.lower() == "yes"):
        PasswordSkip = True
        print("")
        print("Ok, your password has been removed.")
        print("")
        List1()
    elif(key.lower() == "no"):
        DetailsChange()
    else:
        DetailsChange()


这是我定义和全球化PasswordSkip的方法:

PasswordSkip = False

def Startup():
    global PasswordSkip


(该函数的执行时间更长,但不涉及布尔值。)

如果您需要有关我的代码的更多信息,我可以为您提供。

因此,当我运行代码时,它会忽略有关布尔值的if语句。如果布尔值为True,则应使用其他函数。但是,它跳过了该语句,因为它显示了Access2()(密码功能)。

并非急需答案,但谢谢。

最佳答案

片段

def Startup():
    global PasswordSkip


没有声明PasswordSkip在任何地方都是全局的。它声明在此函数中,对设置PasswordSkip的引用应视为全局变量PasswordSkip,而不是某些局部变量。

现在,在函数PasswordRemove中,您无需声明PasswordSkip是要引入作用域的全局变量。因此,像PasswordSkip = True这样的语句正在设置局部变量PasswordSkip

09-10 14:25