如何在python 3中替换函数内的变量值

时间:2014-12-22 05:19:10

标签: python python-3.x

我是python的新手,我可能会使这个问题复杂化。我在函数中的值没有被替换时遇到问题。相反,它似乎只是为它添加新值。使用此功能,如果您选择1或2,则应该执行某些操作,如果您选择其他任何操作,则应该说这不是一个选项并让您再试一次。如果在选择有效选项之前选择了错误的选项,则输出如下:

Select Option

[1] Option 1
[2] Option 2

You selected Option 1
1
9
7
6

因此,不是将我的变量的值替换为1并清除以前的值,而是似乎只是添加它。这是我的代码:

def testfunc():

    testvar = input('Select Option\n\n[1] Option 1\n[2] Option 2\n\n    >')
    if testvar in ('1', 'Option 1', 'option 1'):
        print("\nYou selected Option 1")
    elif testvar in ('2', 'Option 2', 'option 2'):
        print("\nYou Selected Option 2")
    else:
        print("\n\nThat is not an option, please select another option")
        testfunc()
    print(testvar)

testfunc()

如果我能让某人解释为什么它存储多个值以及我如何防止这种情况,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:3)

您的问题是您使用递归返回并获取另一个值(testfunc()testfunc()的调用。)

如果输入无效值,它将再次调用该函数,保存其当前位置(print之前),以便它可以返回到那里。

然后,当您最终输入 good 值时,它最终将展开堆栈,随时打印出无效的堆栈。

最好使用循环进行此类验证,例如:

def testfunc():
    ok = False
    while not ok:
        testvar = input('Select Option\n\n[1] Option 1\n[2] Option 2\n\n    >')
        if testvar in ('1', 'Option 1', 'option 1'):
            print("\nYou selected Option 1")
            ok = True
        elif testvar in ('2', 'Option 2', 'option 2'):
            print("\nYou Selected Option 2")
            ok = True
        else:
            print("\n\nThat is not an option, please select another option")

    print(testvar)

testfunc()