python |功能在休息后重复

时间:2016-05-19 23:31:24

标签: python function

我有这样的功能:

def loop():
    while True:
        ans=str(input("Do you wish to continue? :"))
        if ans == "yes":
            loop()
        elif ans =="no":
            break

在运行之后,我注意到如果我回答" no",我将不得不重新进入" no"多次,取决于我输入了多少次"是"。例如:如果运行该函数的前2次,则输入" yes",然后如果我输入" no"之后,它会问我是否希望再次继续,然后两次,然后三次,以便我必须进入的次数,不是"不是"是我输入的次数"是" 1。

我需要它,即使我进入"是"奇怪的20次,如果我要进入"没有"下一次,我不应再问我是否会继续"几次。这意味着只需输入" no"一旦应该停止整个计划。

3 个答案:

答案 0 :(得分:4)

您没有恢复循环,而是从函数本身再次调用函数。这称为递归break不会突破它。 break将突破当前循环,但这只会返回到函数的前一个版本,该函数仍在循环中,您必须在中回答no 一个也是等等,直到你回答no次,回复yes。然后,当您下次输入no时,它将停止该程序。

不要使用loop()从循环开始重新开始,而是使用continue(从顶部重新启动循环)或pass(继续其他任何内容环)。或者完全删除yes的测试;循环一直持续到你退出它为止,所以没有必要明确告诉Python继续前进。

答案 1 :(得分:1)

那是因为如果您输入YES正在调用该函数的另一个实例,但前一个实例尚未结束,那么您必须为每个实例键入NO已启动的loop()函数。

         LOOP() 
     YES        NO
    LOOP()     BREAK
 YES     NO
LOOP()   BREAK
 ...

没有必要在"是分支"中每种类型调用新函数:

def loop():
while True:
    ans=str(input("Do you wish to continue? :"))
    if ans == "yes":
        pass
    elif ans =="no":
        break

答案 2 :(得分:1)

假设除了" no"将导致循环继续。

def loop():
    while True: # the while is the actual loop
        ans=str(input("Do you wish to continue? :"))
        if ans == "no":
            break

def recur_loop():
    ans=str(input("Do you wish to continue? :"))
    if ans == "no":
        return
    recur_loop()