2015-04-22 116 views
0

我想在Python 2中做一个简单的控制,以确保用户的输入小于给定的常量。如果不是这种情况,它应该再次询问另一个整数,直到它变小。Python递归返回旧值

limit_store = 12 

def input_store(): 
    sel_store = int(raw_input("Which store do you want? ")) 
    if sel_store > limit_store: 
     print "Store number %i is not valid" % sel_store 
     input_store() 
    return sel_store 

store = input_store() 

这是我第一次在Ipython笔记本中写的。现在,如果第一个输入为9,则按预期返回9。如果输入是999,它大于12,则运行if语句,我们可以选择另一个整数。在错误的输入之后选择正确的输入将返回旧的错误输入而不是新的输入。

+0

您将需要'返回input_store()',sel_store'的'值将被存储在第一次调用函数,所以如果你进入100个不同的数字,你将永远得到第一个,除非你返回 –

回答

2

您需要在打印“无效”消息后保存该值。

if sel_store > limit_store: 
    print "Store number %i is not valid" % sel_store 
    sel_store = input_store() # save value here 

return荷兰国际集团将其保存也将工作的数量,而不是 - 只要数量变为有用的地方,而不是被扔掉。 Python doesn't have TCO,所以性能优势很小。不同之处在于您更喜欢:您的函数只有一个return声明,或者它立即代替首先保存变量。

这将是一个循环反正简单:

def input_store(): 
    while True: 
     sel_store = int(raw_input("Which store do you want? ")) 
     if sel_store <= limit_store: break 
     print "Store number %i is not valid" % sel_store 
    return sel_store 
+2

或只是''''''''''input_store()''' – bj0

+0

对不起。我忘了在帖子中加入那篇文章。我正在编辑。 – BAZA

+0

否 - 在功能中打印“无效”消息后立即打印。 – TigerhawkT3