Python If/else while循环内部的正确缩进

Python If/else while循环内部的正确缩进,python,if-statement,while-loop,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) brea

大约几周前,我开始学习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')
这是一个缩进问题,如果我删除“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
位置 数字=数字[位置] 如果数字%2==0: 打印('找到偶数',数字) 打破 位置+=1 其他: 打印('未找到偶数') #打印:未找到偶数 我的问题是,为什么“else”需要与“while”对齐,而不是与循环中的“if”对齐

这就是我想知道的,伙计们! 先走一步

试着这样做:

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
number=[1,3,5]
位置=0
位置
删除缩进时,使用的是while:else块。else正在连接到while,这意味着如果while条件为false,它将运行

while True:
    ##some looping code
else:
    ##code to run when while is false
if True:
    ##code to run if true
else
    ##code to run if false
当缩进该行代码时,将else附加到if,生成if:else块。在这种情况下,如果if为false,则执行else

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

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

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

在代码中,当
position
不为true时,执行else语句

此外,语法问题的出现仅仅是因为在
if
else
语句之间有一行代码,即
position+=1

如果要对
If
语句使用
else
语句(而不是我在开头建议的
while
语句),则应将这一行代码移到
If
else
之间

试试这个:

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
位置 数字=数字[位置] 如果数字%2==0: 打印('找到偶数',数字) 打破 其他: 打印('未找到偶数') 位置+=1
希望这有帮助。

位置+=1
缩进不正确。@AndrewL。这不是真的需要缩进else语句吗?@bjskistad没有通读问题,不确定OP是否希望在if/else之外有
position+=1
。是的,在else中缩进print调用。是的,伙计们,需要缩进的是else语句,现在才发现。boolean在Python中是大写的:)就是这样。我会编辑的。谢谢。while:。。。否则:
如果在while循环中从未执行过
break
,则块将运行,这与您的描述不同。谢谢,您的解释让我掌握了窍门!是的,我正在读的那本书没有解释这一点。这也起到了作用,谢谢你!当然@代码成瘾