用if语句求解50至100之间的全部素数

软件和网站开发以及相关技术探讨
回复
する夜の雨
帖子: 5
注册时间: 2009-07-19 19:02

用if语句求解50至100之间的全部素数

#1

帖子 する夜の雨 » 2009-07-19 19:28

>>>import math
>>>for i in range(50,100+1):
. . . for t in range(2,int(math.sqrt(i))+1):
. . . if i % t ==0:
. . . break
. . . else:
. . . print i
为什么用这程序去求解50至100间的素数,输出结果是 100 列?感觉程序没啥问题啊
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 用if语句求解50至100之间的全部素数

#2

帖子 millenniumdark » 2009-07-20 19:16

不知道你的縮進是怎麼樣的,使用code標簽可以保留縮進,猜想你的縮進是這樣的:

代码: 全选

import math
for i in range(50,100+1):
    for t in range(2,int(math.sqrt(i))+1):
        if i % t ==0:
            break
        else:
            print i
這個得出的結果就是你所說的打印range(50,101)。

如果這樣縮進:(注意else語句的位置,上面的縮進else語句是if block的else語句,而下面的縮進else語句是for block的else語句)

代码: 全选

for i in range(50,100+1):
    for t in range(2,int(math.sqrt(i))+1):
        if i % t ==0:
            break
    else:
            print i
輸出結果是:

代码: 全选

53
59
61
67
71
73
79
83
89
97
python裡面縮進是很重要的。
する夜の雨
帖子: 5
注册时间: 2009-07-19 19:02

Re: 用if语句求解50至100之间的全部素数

#3

帖子 する夜の雨 » 2009-07-20 19:33

呵呵 是缩进错误 谢谢指教 !!!!
才发现我借的这本书上蛮多缩进错误的
新手 刚开始学两三天 都不咋会咯
する夜の雨
帖子: 5
注册时间: 2009-07-19 19:02

Re: 用if语句求解50至100之间的全部素数

#4

帖子 する夜の雨 » 2009-07-20 20:27

代码: 全选

import math
for i in range(50,100+1):
    for t in range(2,int(math.sqrt(i))+1):
        if i % t ==0:
            break
else:
    print i
那本书上是这样缩的...
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: 用if语句求解50至100之间的全部素数

#5

帖子 millenniumdark » 2009-07-21 22:38

哦,是这样缩进的。我猜错了。:-)
原书上这样缩进的确是输出100。else语句是属於第一层for循环的,else语句最后执行,输出的是range(50,100+1)的最后一个值。

书排版的时候很容易出缩进错误,要命的是python里面缩进很关键。看来python不是print-error-proof啊。:)
lizuolong
帖子: 17
注册时间: 2009-07-23 21:04

Re: 用if语句求解50至100之间的全部素数

#6

帖子 lizuolong » 2009-07-23 21:28

else 顶到最前面也是错误的
lgm12380
帖子: 23
注册时间: 2009-03-22 16:55

Re: 用if语句求解50至100之间的全部素数

#7

帖子 lgm12380 » 2009-07-29 16:26

する夜の雨 写了:

代码: 全选

import math
for i in range(50,100+1):
    for t in range(2,int(math.sqrt(i))+1):
        if i % t ==0:
            break
else:
    print i
那本书上是这样缩的...
这样缩进输出结果为
100
>>> for i in range(50,100+1):
for t in range(2,int(math.sqrt(i))+1):
if i % t ==0:
break
else:#和第二个for对齐。
print (i, end=' ')


53 59 61 67 71 73 79 83 89 97
>>> for i in range(50,100+1):
for t in range(2,int(math.sqrt(i))+1):
if i % t ==0:
break
else:#和if对齐。
print (i, end=' ')



51 53 53 53 53 53 53 55 55 55 57 59 59 59 59 59 59 61 61 61 61 61 61 63 65 65 65 67 67 67 67 67 67 67 69 71 71 71 71 71 71 71 73 73 73 73 73 73 73 75 77 77 77 77 77 79 79 79 79 79 79 79 81 83 83 83 83 83 83 83 83 85 85 85 87 89 89 89 89 89 89 89 89 91 91 91 91 91 93 95 95 95 97 97 97 97 97 97 97 97 99
缩进不同结果不同!!!
回复