我不明白为什么我在Python中得到"x未定义"

0 python python-2.7

我刚刚开始使用Python进行编程,而且我没有定义x,但我不知道为什么它会说考虑到我认为它是定义的.

def menu():
    x = 0
    while x != 1 or 2:
        print "menu"
        print "1)login"
        print "2)under dev"
        x = raw_input('select menu option')
        if x == 1 or 2:
            break
menu()
if x=='1':
    print "enter username:"
y = raw_input()
if y=="username":
    print "enter password:"
z = raw_input()
if z=="password":
    print "password accepted"
elif x=='2':
    print "under development"
elif y or z == False:
    print "username or password incorrect"
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

x是函数中的局部变量menu(),它不存在于外部menu().

您可以将其返回,menu()然后将值存储x在代码中的新值中:

def menu():
    x = None
    while x not in ('1', '2'):
        print "menu"
        print "1)login"
        print "2)under dev"
        x = raw_input('select menu option')
    return x

x = menu()
Run Code Online (Sandbox Code Playgroud)

请注意,我也修复了您的代码中的几个问题menu().

  • raw_input()返回一个字符串,但你测试的x是if 是1还是2.我改变了代码来测试字符串'1''2'不是.

  • 不要使用x != 1 or 2,但这并不意味着你认为这意味着什么.它测试if是否x != 1为True,如果不是,则测试是否2为True.2总是 True因为所有非零数字是在布尔上下文视为真.

    我用x not in ('1', '2')测试代替了它.

  • 无需x再次在循环内部进行测试并执行break; 该while循环将自身只是退出而不该测试.

  • 这并不重要,什么x是在开始时设置为menu(),只要它不是'1''2'.None是一个很好的选择,表明它是"空的".