在其他函数内声明的变量在主python 3中不起作用?

时间:2017-10-11 19:02:06

标签: python python-3.x

我的代码应该为用户打印菜单,让他们选择一个选项,并根据他们选择的选项,输入具有特定基数的数字。我需要一个功能来收集他们的选项,一个功能,一旦他们输入一个选择就收集他们的号码,以及一个功能来验证他们的号码在正确的基础上。我一直收到错误,因为变量" userChoice"我在我的一个函数中声明的是" undefined"当我尝试在主要使用它。我该如何解决这个问题?

def printmenu(userChoice):
    flag = True

    while(flag == True):
        print("Enter 2 for base 2")
        print("Enter 8 for base 8")
        print("Enter 16 for base 16")
        userChoice = input("Enter 0 to stop: ")

        if userChoice not in ["2", "8", "16", "0"]:
            print("Invalid choice\n")
            flag = True
        else:
            flag = False
    return(userChoice)

def askUserValue():
    flag2 = False

    while(flag == True):
        base2 = input("Enter a base 2 number: ")

        flag2 = validateInput(base2)

    newBase2 = base2
    return (newBase2)


def isbase2(base2):

    try:
        base2 = int(input("Enter a base 2 number" , 2))
        flag1 = False
        return (True)
    except ValueError:
        flag1 = True
        return (False)
    else:
        flag1 = True
        return (False)

def main():

    if (printmenu(userChoice) == "2"):
        askUserValue()


main()

3 个答案:

答案 0 :(得分:2)

删除printmenu()方法中的参数,如下所示:

def printmenu():
    flag = True

    while(flag == True):
        print("Enter 2 for base 2")
        print("Enter 8 for base 8")
        print("Enter 16 for base 16")
        userChoice = input("Enter 0 to stop: ")

        if userChoice not in ["2", "8", "16", "0"]:
            print("Invalid choice\n")
            flag = True
        else:
            flag = False
    return(userChoice)

然后你可以在main中调用它:

if (printmenu() == "2"):
    askUserValue()

答案 1 :(得分:0)

问题与python如何使用变量有关,变量与其他语言中的对象不同。 python中的变量只是引用,因此在函数中声明它们实际上并没有转移到主范围。我如何解决这个问题是我在main中声明变量,并将其设置为我正在运行的函数。

userChoice = printmenu()

答案 2 :(得分:0)

使用可变长度参数:

def printmenu(*args):
    flag = True

    while(flag == True):
        print("Enter 2 for base 2")
        print("Enter 8 for base 8")
        print("Enter 16 for base 16")
        userChoice = input("Enter 0 to stop: ")

        if userChoice not in ["2", "8", "16", "0"]:
            print("Invalid choice\n")
            flag = True
        else:
            flag = False
    return(userChoice)

并使用这样的返回结果:

def main():

    if printmenu() == "2":
        askUserValue()


main()
  

第二个选项:

只需从函数中删除参数和参数,如下所示:

def printmenu():
    flag = True

    while(flag == True):
        print("Enter 2 for base 2")
        print("Enter 8 for base 8")
        print("Enter 16 for base 16")
        userChoice = input("Enter 0 to stop: ")

        if userChoice not in ["2", "8", "16", "0"]:
            print("Invalid choice\n")
            flag = True
        else:
            flag = False
    return(userChoice)

并使用如下函数的返回值:

def main():

    if printmenu() == "2":
        askUserValue()


main()