1 #题目:判断101-200之间有多少个素数,并输出所有素数。
代码:
1
2
3
4
5
6
7
8
9
|
3
tmp
=
[n
for
n
in
range
(
101
,
201
)]
4
for
i
in
reversed
(tmp):
5
for
j
in
range
(
2
,i):
6
if
(i
%
j
=
=
0
):
7
tmp.remove(i)
8
break
9
print
(
'101到200之间有%d个素数'
%
len
(tmp))
10
print
(
'这些素数分别是:'
)
11
print
(tmp)
|
运行结果:
1
2
3
4
5
|
[root@HK code_100]
# python code_12.py
101
到
200
之间有
21
个素数
这些素数分别是:
[
101
,
103
,
107
,
109
,
113
,
127
,
131
,
137
,
139
,
149
,
151
,
157
,
163
,
167
,
173
,
179
,
181
,
191
,
193
,
197
,
199
]
[root@HK code_100]
#
|
代码解释:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
这个代码用了一种比较繁琐的方式,不过用来练习
list
的操作还是不错的,因为牵扯到要统计素数的个数,
我觉得用
len
(
list
)比较合适, 思路是遍历整个
list
,发现不是素数的就从
list
中删除,最后剩下的
就是
101
到
200
之间的素数。
3
tmp
=
[n
for
n
in
range
(
101
,
201
)]
#建立101到200的升序list
4
for
i
in
reversed
(tmp):
#倒叙遍历tmp列表
5
for
j
in
range
(
2
,i):
#针对tmp中的每个成员,用2到(i-1)进行取余
6
if
(i
%
j
=
=
0
):
#如果取余等于零,说明不是素数
7
tmp.remove(i)
#将不是素数的数字从list中删除
8
break
#直接跳出循环,不进行后面的验证,以节省资源
9
print
(
'101到200之间有%d个素数'
%
len
(tmp))
#格式化输出素数的个数
10
print
(
'这些素数分别是:'
)
11
print
(tmp)
#打印素数
在第四行中用了倒叙遍历
list
,因为tmp.remove的特点,如果用正序是得不出期望结果的,因为remove删掉一个元素的时候,
这个元素后面的所有元素的下标都会减
1
(如果所有元素下标都不变就不会有问题),但是
for
循环的迭代是下标依次加
1
,这样就会导致
在遍历
list
的时候有一些元素是遍历不到的,用逐步调试可以看到效果具体可以查一下remove的详细解释,这里使用倒叙是从后面开始减,
之前的下标不会用变化,这样就不会影响到最终的结果。
|
本文转自snc_snc 51CTO博客,原文链接:http://blog.51cto.com/netsyscode/1745166,如需转载请自行联系原作者