Python缩进、IFs和ELSE的联合
我是python新手,我仍在努力理解sytnax是如何工作的,您需要如何对If和else进行联合以使其正确工作。我怎样才能真正知道还有哪些是与哪个if相关的呢?尤其是在使用嵌套代码块时 在下面的代码中为else加上注释Prime!据我所知,如果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之前而不是
(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!