请高手帮我看一下这段代码有什么问题(纯新手,望指教)

22 views
Skip to first unread message

deepen099

unread,
Nov 9, 2011, 5:29:22 PM11/9/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
下面的代码的目的是要求1到100之间的素数,但是不能得出正确的结果,希望劳神大家看一下,非常感谢。
from math import sqrt

N=100
result1=[]
for num in range(2,N):
f=True
for snu in range(2,int(sqrt(num))+1):
if num%snu == 0:
f=False
break
if f:
result1.append(num)
print result1
说明:我反复的检查了,没有发现问题。但是运行的结果不是相要的,上面的代码的运行结果为:
[5, 7, 9, 11, 11, 13, 13, 15, 17, 17, 17, 19, 19, 19, 21, 23, 23, 23,
25, 25, 25, 27, 29, 29, 29, 29, 31, 31, 31, 31, 33, 35, 35, 35, 37,
37, 37, 37, 37, 39, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 45, 47,
47, 47, 47, 47, 49, 49, 49, 49, 49, 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]

qijiong jiang

unread,
Nov 9, 2011, 5:36:58 PM11/9/11
to pyth...@googlegroups.com
缩进问题

最后个if改下

from math import sqrt
N=100
result1=[]
for num in range(2,N):
   f=True
   for snu in range(2,int(sqrt(num))+1):
       if num%snu == 0:
           f=False
           break
   if f:
       result1.append(num)
print result1

2011/11/9 deepen099 <deep...@163.com>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
       http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

deepen099

unread,
Nov 9, 2011, 5:39:33 PM11/9/11
to pyth...@googlegroups.com
问题解决了,非常感谢您的答复
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

wang tiezhen

unread,
Nov 9, 2011, 5:56:27 PM11/9/11
to pyth...@googlegroups.com
如果写的更FP一点,或许能避一些类似的缩进问题,类似于:
result = [ num for num in range(2,int(sqrt(num))+1) if isPrime(num) ] 


2011/11/9 deepen099 <deep...@163.com>

deepen099

unread,
Nov 9, 2011, 6:12:48 PM11/9/11
to pyth...@googlegroups.com
恩,是的,非常感谢您。

依云

unread,
Nov 10, 2011, 2:12:53 AM11/10/11
to pyth...@googlegroups.com
我的第一感觉是逻辑错误,因为第二个 if 不该在那里判断的。。。。看来我对错
误的缩进没有一点抵抗力啊。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客
http://lilydjwg.is-programmer.com/

steven

unread,
Nov 14, 2011, 9:46:19 PM11/14/11
to pyth...@googlegroups.com
代码一行敲完以后直接回车换行,最好不要再换行后按空格,代码缩进出现问题。

Leo Jay

unread,
Nov 14, 2011, 11:45:42 PM11/14/11
to pyth...@googlegroups.com
2011/11/15 steven <tml...@gmail.com>:
> 代码一行敲完以后直接回车换行,最好不要再换行后按空格,代码缩进出现问题。
>

不要自己拍空格键来缩进。
选能把tab自动转成空格的编译器,然后按tab来做缩进。

--
Best Regards,
Leo Jay

Leo Jay

unread,
Nov 14, 2011, 11:47:35 PM11/14/11
to pyth...@googlegroups.com
2011/11/15 Leo Jay <python...@gmail.com>:

> 2011/11/15 steven <tml...@gmail.com>:
>> 代码一行敲完以后直接回车换行,最好不要再换行后按空格,代码缩进出现问题。
>>
>
> 不要自己拍空格键来缩进。
> 选能把tab自动转成空格的编译器,然后按tab来做缩进。
>

DEBUG: 编辑器

pansz

unread,
Nov 15, 2011, 2:41:49 AM11/15/11
to pyth...@googlegroups.com
2011/11/15 Leo Jay <python...@gmail.com>:
> 不要自己拍空格键来缩进。
> 选能把tab自动转成空格的编译器,然后按tab来做缩进。

为什么需要按 tab 呢?难道编辑器不会见到冒号下一行就自动加缩进?
在行首,减缩进一般用 backspace 键。
对于大段的整体调整缩进量,一般有快捷键可以搞定,vim 是 >> 和 <<,emacs 也有相应的组合键。

总的来说,tab 是制表符,正常情况下,编写 python 程序似乎不应当有需要使用 tab 管理缩进的机会。

我的看法是:无论手动用 tab 还是用空格缩进都不对。缩进应该是编辑器的功能。

Leo Jay

unread,
Nov 15, 2011, 2:50:40 AM11/15/11
to pyth...@googlegroups.com
2011/11/15 pansz <pan.s...@gmail.com>:


写代码并不一定是新写。改缩进也不一定是在输入了冒号之后。
比方说你在extract method的时候,发现代码段需要增加或减少缩进的时候,在一般的编辑器里就需要自己改缩进了。
又比方说,你先写了一段代码,后来发现这段代码应该放到一个if里的时候,你也要自己改缩进。

不同的编辑器快捷捷不一样。有的编辑器不用tab也可以,但有的就要用到tab了。不能一概而论。

@@

unread,
Nov 17, 2011, 12:21:57 AM11/17/11
to pyth...@googlegroups.com
l = range(100)
a =2
while a*a < 100: l = [n for n in l if ( n%a!=0 or n==a)] a+=1

print l

2011/11/10 deepen099 <deep...@163.com>:

@@

unread,
Nov 17, 2011, 12:22:58 AM11/17/11
to pyth...@googlegroups.com
gmail看怎么换行乱了

l = range(100)
a =2
while a*a < 100:
l = [n for n in l if ( n%a!=0 or n==a)]
a+=1

2011/11/17 @@ <ask...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages