【python】编程语言入门经典100例--12

  1 #题目:判断101-200之间有多少个素数,并输出所有素数。


代码:

1
2
3
4
5
6
7
8
9
   3  tmp  =  [n  for  in  range ( 101 , 201 )]
   4  for  in  reversed (tmp):
   5      for  in  range ( 2 ,i):
   6          if  (i % = =  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  in  range ( 101 , 201 )]       #建立101到200的升序list
   4  for  in  reversed (tmp):                 #倒叙遍历tmp列表
   5      for  in  range ( 2 ,i):                #针对tmp中的每个成员,用2到(i-1)进行取余
   6          if  (i % = =  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,如需转载请自行联系原作者





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值