所以我有一个真正的循环 -
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是什么?” '再次。
如何摆脱真正的循环?
答案 0 :(得分:2)
您的while
循环不断循环,因为这正是您告诉它的内容。在你从它的身体调用的函数返回之后,你忽略了返回值,无条件地打印"Ended"
然后再次执行,因为循环上的条件显然仍然是真的。
如果你希望函数控制循环是否继续,你应该使用它的返回值作为循环中的条件,如下所示:
running = True
while running:
running = getStatus()
print("Ended") # move this outside the loop!
这要求当您想要保持循环时getStatus
返回一个真值,而当您想要停止时,它需要一个假值。您当前对该功能的实现并没有这样做。输入False
时返回999
,但如果您提供其他输入(在Python中等效于返回None
),则不会显式返回任何内容。由于False
和None
都是假的,因此上面的代码实际上无法工作(您可以使用类似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: