Python中If语句中的布尔值

时间:2015-10-05 21:11:22

标签: python variables if-statement boolean global-variables

所以,我一直在编写一个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()(密码函数)。

答案并非迫切需要,但谢谢。

1 个答案:

答案 0 :(得分:3)

片段

def Startup():
    global PasswordSkip

并未声明PasswordSkip在任何地方都是全球性的。它声明在这个函数中,对设置PasswordSkip的引用应该被视为全局变量PasswordSkip而不是某个局部变量。

现在在函数PasswordRemove中,您没有声明PasswordSkip是一个全局范围。因此,PasswordSkip = True等语句会设置本地变量PasswordSkip