-3

运行此程序后,它不会打印任何内容:

for n in range(2,100):
     for x in range(2,n):
        if n%x == 0:
         break
        else:
          if n==x:
           print n,'is a prime number'
4

2 回答 2

4

if n==x永远不会是真的,因为内部循环只运行xfrom 2to的值n-1

如果您需要检查内部循环是否运行完成,else请在for自身之后使用。这将执行elseifbreak尚未执行:

for n in range(2,100):
    for x in range(2,n):
        if n%x == 0:
             break
    else:
        print n,'is a prime number'

一种更 Pythonic 的方法是使用all生成器表达式:

for n in range(2,100):
    if all(n%x != 0 for x in range(2,n)):
        print n,'is a prime number'
于 2013-01-02T12:50:47.617 回答
1

简单的逻辑说明了这一点 - 余数为 0 的任何内容都将跳出循环,并且任何模本身的值都将为0,因此您的else块将永远不会到达包含if运行的地方。

于 2013-01-02T12:49:11.203 回答