2014-02-17 42 views
2

我对Python很陌生。我正在使用最新版本。我正在使用的代码如下:简单查询:为什么说这个变量是未定义的?

def tts(): 
    print('(0) Input a new list') 
    print('(1) Print the current list') 

    choice = int(input('Enter your choice: ')) 

    if choice == 0: 
     newList = eval(input('Enter a new list of prices: ')) 
     tts(); 

    elif choice == 1: 
     return newList 

所以,我开始通过运行函数tts()。它打印它应该的内容并提示我输入。我输入0,并输入一个列表,如[20,10,30]。在点击回车后,现在不应该将变量newList分配给我输入的列表吗?它似乎没有工作。如果我稍后在Shell中键入newList,则表示newList未定义。基于同样的原因,如果我稍后选择1作为我的选择,它会说newList没有被定义。

我将不胜感激一些建议。我感到非常沮丧,我怀疑这是一个我只是不知道的非常微不足道的问题。

+2

fyi'eval'是危险的。 –

回答

2

递归调用tts()(为什么?)和newList是局部变量。当您进行递归调用时,newList未在新的堆栈帧中定义。

将代码重组为循环代替递归可能是最简单的。然后,您将不会有新的堆栈帧,并且newList仍然可以访问。

+0

好的,我认为我发现了我更深的误解。我试图尽可能简化这一点。考虑以下代码: def test(): t = int(input('Enter your choice:')) if t == 0: testing(); 高清测试(): A = 2 回报 如果我运行试验(+),然后在壳牌提示时输入0,什么都没有返回。只是一个空白的行。为什么是这样?它不应该返回2吗? – user3317405

+0

垃圾,我不能在评论中键入代码?对不起,我不是在懒惰或粗鲁,但是你可以破译它吗?如果没有,我会澄清。 – user3317405

+0

无论如何澄清: 它不应该返回2,因为它调用了测试(),这是写入返回a,它等于2? – user3317405

1

你的“newList”是在if语句中定义的,它是在ELSE语句中返回的。因此,如果它进入elif,那么它永远不会被创建。

相关问题