Python缩进、IFs和ELSE的联合

Python缩进、IFs和ELSE的联合,python,syntax,python-2.7,indentation,Python,Syntax,Python 2.7,Indentation,我是python新手,我仍在努力理解sytnax是如何工作的,您需要如何对If和else进行联合以使其正确工作。我怎样才能真正知道还有哪些是与哪个if相关的呢?尤其是在使用嵌套代码块时 在下面的代码中为else加上注释Prime!据我所知,如果(n%div==0),else与语句一起使用:,那么为什么它与FOR语句一起使用呢 我认为最后一个else语句与一起使用,如果n==2:,但是else与它不一致,而是在后面。对于同一语句如果n==2:为什么n+=1在pime\u count+=1之前而不是

我是python新手,我仍在努力理解sytnax是如何工作的,您需要如何对If和else进行联合以使其正确工作。我怎样才能真正知道还有哪些是与哪个if相关的呢?尤其是在使用嵌套代码块时

在下面的代码中为else加上注释Prime!据我所知,如果
(n%div==0),else与语句一起使用:
,那么为什么它与FOR语句一起使用呢

我认为最后一个else语句与
一起使用,如果n==2:
,但是else与它不一致,而是在后面。对于同一语句
如果n==2:
为什么
n+=1
pime\u count+=1
之前而不是之后对齐

我知道Else和if的位置非常重要,因为如果我决定移动它们中的任何一个,代码就会停止工作。我似乎不明白的是,如果结盟似乎不一致的话,python如何知道还有哪些与之相匹配

#!/usr/bin/env python
#
# Problem Set 1a
#
# A program that computes and prints the 1000th prime number.
# Finds primes using trial division (least efficient method)
#------------------------------------------------------------

prime_count = 0
n = 2 

while (prime_count <= 1000):
  #if even, check for 2, the only even prime
  if (n % 2 == 0):
    if n == 2:
      prime_count += 1
    n += 1
  else:
    # number is odd, possible prime
    for div in range(3, n, 2):
      if (n % div == 0):
        # not a prime
        n += 1
        break
    else:
      # prime!
      prime_count += 1
      if prime_count == 1000:
        print "The 1000 prime is", n
      else:
        n += 1
#/usr/bin/env python
#
#习题集1a
#
#计算并打印第1000个素数的程序。
#使用试用除法查找素数(最低效方法)
#------------------------------------------------------------
素数=0
n=2

而(prime_countif
else
在同一缩进处,只要它们之间的较低缩进处没有其他东西。它们必须在同一个“块”中但是,在您的例子中,紧跟着
#prime!
else
实际上并没有连接到
if
,而是连接到范围(3,n,2)中div的
:它前面的
循环。

规则非常简单:
else
子句必须具有与其引用的语句相同的缩进(最常见的是
if
语句)

现在,这里:

for div in range(3, n, 2):
  if (n % div == 0):
    # not a prime
    n += 1
    break
else:
  ...
您没有使用
如果
-
其他
,您正在使用

此构造意味着“除非循环通过
中断
终止,否则执行
else
块”


有关讨论,请参阅。

附加到
for
循环的
else
表示“如果
for
循环在未点击
break
语句的情况下完成,则执行此代码”。它有时可能很有用,但对于以前没有遇到过它的人来说,它常常会让人困惑!

我认为这可以帮助您了解python缩进的工作原理

在这样的构造中:

for i in foo:
  if bar(i):
    break
else:
  baz()
else套件在for之后执行,但只有在for正常终止(而不是中断)时才执行


在其他情况下,如果有两条规则非常简单,那么else将遵循这两条规则

  • if
    else
    的缩进必须相同

    for x in range(15):
        if x > 10:
            print 'x is more than 10'
        else:
            print 'x is less than or equal to 10'
    
  • 缩进小于或等于
    if
    else
    的缩进不应介于两者之间 因此,这是无效的/将引发
    SyntaxError

    for x in range(15):
        if x > 10:
            print 'x is more than 10'
        print x
        else:
            print 'x is less than or equal to 10'
    
  • 此外,如

    每个缩进级别使用4个空格


    此外,上面的缩进意味着循环已生成(如果使用
    break
    退出for循环,则执行here else子句),不是。

    缩进应该是一致的,我会质疑代码片段的有效性。你也可以在python中为
    循环使用
    else
    a
    ,因此这可能会让你感到困惑。我同意@AnthonyGrist的观点,最后7行看起来应该被制表符覆盖。使用4个空格的缩进将使这更具可读性。Thanks@MartijnPieters-python的“规则”是4个空格缩进。请参阅。如果你想认真对待,那么如果else与for相连,是什么触发了else?据我所知,false将触发else,但这里的for看起来像是在给变量div赋值。或者是如果for的条件失败那么for语句是false吗?代码底部的最后一个else似乎与if prime_count==1000一致:但我认为它与if n==2一致:。如果它到达数字4并通过奇数或偶数测试,但测试失败,无法检查它是否为2,如果最后一个else不用于tha,那么它在代码中的后面会去哪里t?谢谢,我现在理解了这一部分,但在代码中还有一件事我没有理解,当n的值达到4时,如果n==2:结果为false,它在哪里呢?这里对齐的另一个是else:#数字是奇数,可能是素数,但4不是奇数?后面的另一个是for语句,它留下最后一个else位于底部,它与if n==2语句不对齐,而是与if prime_count==1000:语句对齐。因此,我一直在查看该代码,不知道当n变为4或任何其他偶数时会发生什么。@AdrianSultu:如果您不确定代码流,我建议使用调试器()或者在战略位置插入
    print
    语句。我这样做了,我几乎在所有地方都插入了prints,但我不知道它用4做了什么,就好像它跳过了偶数,但我不知道代码的哪一部分告诉它跳过偶数,除了最后一部分,它甚至没有正确地对齐我找到了答案,我t是在if n==2:语句的prime_count+=1之后的n+=1。n+=1在prime_count+=1之前对齐,因此排除了偶数,prime_count+=1只有在n的值为2时才有效,这就是为什么它在n+=1语句之后。。
    for div in range(3, n, 2):
      if (n % div == 0):
        # not a prime
        n += 1
        break
    else: # at same indent as for
      # prime!