使用函数突破True循环

时间:2018-05-10 09:31:45

标签: python python-2.7 while-loop

所以我有一个真正的循环 -

while True:
  getStatus()
  print('Ended')

如果答案是999,我希望能够突破它。这就是我试过的:

def getStatus():
  answer = input('What is the box ID? ')
  if answer == 999:
    return False 
  elif type(answer) == int:
    boxId = answer + 1
    print(boxId)

然而,即使输入是' 999'它会循环回来并问“盒子ID是什么?” '再次。

如何摆脱真正的循环?

4 个答案:

答案 0 :(得分:2)

您的while循环不断循环,因为这正是您告诉它的内容。在你从它的身体调用的函数返回之后,你忽略了返回值,无条件地打印"Ended"然后再次执行,因为循环上的条件显然仍然是真的。

如果你希望函数控制循环是否继续,你应该使用它的返回值作为循环中的条件,如下所示:

running = True
while running:
    running = getStatus()
print("Ended") # move this outside the loop!

这要求当您想要保持循环时getStatus返回一个真值,而当您想要停止时,它需要一个假值。您当前对该功能的实现并没有这样做。输入False时返回999,但如果您提供其他输入(在Python中等效于返回None),则不会显式返回任何内容。由于FalseNone都是假的,因此上面的代码实际上无法工作(您可以使用类似running = getStatus() is None的内容对其进行修补,但这样做会非常糟糕)。您应该更改函数以在其所有分支中具有显式return语句(包括非整数输入的情况,它不会进入您的if或{{1块)。

如果循环和函数的逻辑紧密交织在一起,将循环移动到函数本身可能是有意义的,而不是将它分开并需要使用返回值来指示何时停止。在单个函数中,您可以使用elif直接退出循环:

break

答案 1 :(得分:1)

您可以在get_status()之前添加if语句,该语句将检查它是否为真并中断,在get_status函数中您必须返回true才能中断

def getStatus():
  answer = input('What is the box ID? ')
  if answer == 999:
    return True
  elif type(answer) == int:
    boxId = answer + 1
    print(boxId)


while True:
  if getStatus():
     print('Ended')
     break

答案 2 :(得分:-1)

您可以将其更改为 -

if(not getstatus()):       破

通过这个你可以使用返回值来打破无限循环。 它很简单!

答案 3 :(得分:-1)

def selectedCountry():
    while True:
        country = input("Enter country of which you want to check pictures HR, RS, RO:  ").upper()
        if country == str("HR") or country == str("RO") or country == str("RS"):
            break
        else:
            print("Please enter HR or RO or RS: " + "you wrote: " + country)

为什么True在函数外部工作时又在再次问相同问题的内部

Enter country of which you want to check pictures HR, RS, RO:  >? hr
Enter country of which you want to check pictures HR, RS, RO: