如果/ else正确缩进内部while循环

时间:2016-09-23 01:59:42

标签: python if-statement while-loop

我开始用Python学习编程几周了 而我遇到了一些麻烦。 下面的代码是一个很小的程序,它检查列表中是否有偶数,如果它找到第一个偶数,它就会突破循环:

numbers = [1, 3, 5]
position = 0

while position < len(numbers):
    number = numbers[position]
    if number % 2 == 0:
        print('Found even number', number)
        break
    position += 1

    else:  # break not called
    print('No even number found')

打印错误:

File "test.py", line 11
    else:  # break not called
       ^
SyntaxError: invalid syntax

这是一个缩进问题,如果我在“else”之前删除标签,那么将它与'while'对齐,程序运行得非常好:

while position < len(numbers):
    number = numbers[position]
    if number % 2 == 0:
        print('Found even number', number)
        break
    position += 1

else:
    print('No even number found')

# Prints: No even number found

我的问题是,为什么'else'需要与'while'对齐,而不是与循环内的'if'对齐?

这就是我想要认识的人! Thanx提前!

3 个答案:

答案 0 :(得分:1)

试试这样:

numbers = [1, 3, 5]
position = 0

while position < len(numbers):
    number = numbers[position]
    if number % 2 == 0:
        print('Found even number', number)
        break
    else:  # break not called
        print('No even number found')
    position += 1

答案 1 :(得分:1)

当您删除缩进时,您正在使用while:else块。其他是附加到while,这意味着如果你的while条件是假的话它会运行。

while True:
    ##some looping code
else:
    ##code to run when while is false

如果缩进该行代码,则在生成if:else块时附加else。在这种情况下,如果为false,则执行else。

if True:
    ##code to run if true
else
    ##code to run if false

python中的代码块遵循相同的缩进。因为“else”是“while”块的一部分,它必须位于相同的tab位置才能工作,并且查看你的代码,我会说while:else块就是你想要的。 :)

答案 2 :(得分:1)

这是问题所在。在这种情况下,有两种类型的else语句。如果将else语句与while对齐,则else循环的条件变为false时将执行while语句。

在您的代码中,当position < len(numbers)不为真时,会执行else语句。

此外,语法问题的发生只是因为ifelse语句之间有一行代码,position += 1

如果你想对你的else语句使用if语句(不是我开头建议的while语句),你应该在这两行之间移动这行代码ifelse

试试这个:

while position < len(numbers):
    number = numbers[position]
    if number % 2 == 0:
        print('Found even number', number)
        break
    else:
        print('No even number found')
    position += 1

希望这有帮助。