你可以从循环外部打破一个while循环吗?这是一个(非常简单)我想要做的事情的例子:我想在While循环中要求连续,但当输入是'退出'时,我想要的是循环打破!
active = True
def inputHandler(value):
if value == 'exit':
active = False
while active is True:
userInput = input("Input here: ")
inputHandler(userInput)
答案 0 :(得分:7)
在您的情况下,在inputHandler
中,您正在创建一个名为active
的新变量并在其中存储False
。这不会影响模块级active
。
要解决此问题,您需要明确说active
不是新变量,而是在模块顶部声明的变量,使用global
关键字,就像这样
def inputHandler(value):
global active
if value == 'exit':
active = False
但是,请注意,执行此操作的正确方法是返回inputHandler
的结果并将其存储回active
。
def inputHandler(value):
return value != 'exit'
while active:
userInput = input("Input here: ")
active = inputHandler(userInput)
如果您查看while
循环,我们会使用while active:
。在Python中,您必须使用==
来比较值,或者仅仅依赖于值的真实性。只有当您需要检查值是否相同时,才应使用is
运算符。
但是,如果你完全想避免这种情况,你可以简单地使用iter
函数,该函数在满足标记值时自动突破。
for value in iter(lambda: input("Input here: "), 'exit'):
inputHandler(value)
现在,iter
将继续执行传递给它的函数,直到函数返回传递给它的sentinel值(第二个参数)。
答案 1 :(得分:1)
其他人已经说过你的代码失败的原因。或者,你可以将它分解为一些非常简单的逻辑。
--port_1
答案 2 :(得分:0)
是的,您确实可以这样做,通过调整:make active
全球。
global active
active = True
def inputHandler(value):
global active
if value == 'exit':
active = False
while active:
userInput = input("Input here: ")
inputHandler(userInput)
(我还将while active is True
更改为while active
,因为前者是多余的。)