你能从循环外部打破一个循环吗?

时间:2015-11-25 01:05:49

标签: python python-3.x while-loop boolean-expression

你可以从循环外部打破一个while循环吗?这是一个(非常简单)我想要做的事情的例子:我想在While循环中要求连续,但当输入是'退出'时,我想要的是循环打破!

active = True

def inputHandler(value):
    if value == 'exit':
        active = False

while active is True:
    userInput = input("Input here: ")
    inputHandler(userInput)

3 个答案:

答案 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,因为前者是多余的。)