我有这样的功能:
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"一旦应该停止整个计划。
答案 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()