闲来无事,在python2.4的手册里找到一段代码:
>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ... # loop fell through without finding a factor ... print n, 'is a prime number' ...
手册上的输出结果是:
2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3
我在Eclipse里按装了PyDev,采用了Python3.3的解释环境,代码如下:
#!/usr/bin/env python3.3 #--encoding-utf8-- #2~10以内的素数 for n in range(2,10): for x in range(2,n): if n % x == 0: print(n,'equals',x,'*',n/x) break else: #loop fell through without finding a factory print(n,'is a prime number') break
我的输出结果如下:
3 is a prime number 4 equals 2 * 2.0 5 is a prime number 6 equals 2 * 3.0 7 is a prime number 8 equals 2 * 4.0 9 is a prime number
这里有两个问题:
1、为何原书里else这段suite里没有break?(python3.3里如果没有break,素数时会输出多次)
2、在后面的代码输出里,素数2去了哪里?
初学乍练,久思不得其解,有明白的大侠请指点一二,不胜感激。
另,为了查明range(2,10)的范围,特地作了如下测试:
# test range function for i in range(2,10): print(i)
输出结果如下:
2 3 4 5 6 7 8 9