关于其他缩进的一点点困惑

时间:2018-09-15 14:38:42

标签: python for-loop if-statement

方法1:

n = 6
for i in range(2, n):
    if n%i==0:
        print 'Not Prime Number'
        break
else:
    print 'Prime Number'

输出:

Not Prime Number

方法2:

n = 6
for i in range(2, n):
    if n%i==0:
        print 'Not Prime Number'
        break
print 'Prime Number'

输出:

Not Prime Number
Prime Number

我想知道“方法1”绝对正常,但是缩进不在if语句下,那么它如何正常工作?谁能用一个简单的例子对此进行详细说明? 注意:这个问题是面试官问的

3 个答案:

答案 0 :(得分:4)

方法1使用else循环的可选for子句。该子句在循环正常完成时执行-即调用break

有关其他详细信息,请参见the documentation

答案 1 :(得分:1)

在某些情况下,您可以使用for / else,while / else,if / else。例如: 示例1:

for i in range(5):
    print(i)
else:
    print('hello world')

输出: 0 1个 2 3 4 你好世界

如何理解?很简单,您有一个“ for”循环,该循环将通过0到4。但是当循环结束时会发生什么?好吧,这是else语句进入的时候。因为您写的比结束时要打印'hello world'。

诀窍是查看缩进位置。在前面的示例中,else缩进与for循环匹配,因此它将在循环完成时运行。

示例2:

for i in range(5)
    if i < 3:
        print(i)
    else:
        print('hello world')

输出: 0 1个 2 你好,世界 你好世界

查看else的缩进与if语句如何匹配,以便当if语句为false时它将运行,那么i大于3。

答案 2 :(得分:1)

Python for具有else:的情况,该情况在循环结束时执行而没有break(正常的for循环执行)。

在正常执行for循环时,当迭代器没有更多元素时,即,迭代器上的next()失败时,循环完成。在这种情况下,将执行else的{​​{1}}部分。

for

假设您使用for x in range(5): print(x) else: print('Loop over without break!') # This line is printed. 语句突然停止了循环,退出了循环,因此条件不能评估为false,并且您从不运行break子句。

else