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

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

代码:

  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)

运行结果:

[[email protected] 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]
[[email protected] code_100]#

代码解释:

   这个代码用了一种比较繁琐的方式,不过用来练习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的详细解释,这里使用倒叙是从后面开始减,
之前的下标不会用变化,这样就不会影响到最终的结果。
时间: 2025-01-16 13:12:01

【python】编程语言入门经典100例--12的相关文章

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

1 #题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 代码:   2    3 h = 0   4 li = []   5 for i in range(1,11):   6     s = 100/(2**(i-1))   7     li.append(s)   8    9 for x in li:  10     h += x  11 print(li)  12 print('球在第十次落地时,共经过了%.1

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

1 #题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. 代码:   2    3 li = list(input('输入一个不多于5位的正整数:'))   4 n = len(li)   5 print('这个正整数是%d位数'%n)   6 i = 0   7    8 def order(li,n,i):   9     if i <= n-1-i:  10          tmp = li[i]  11          li[i] = li[n-1-i]

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

题目:输出9*9口诀 代码:   2    3 for i in range(1,10):   4     for j in range(1,10):   5             if j < i:   6                 print('%d*%d=%d '%(j,i,i*j),end = '')          7             elif i == j:   8                 print('%d*%d=%d'%(j,i,i*j)) 运行结果:

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

1 #题目:对10个数进行排序 代码:   2 i = 1   3 li = []   4 while i <= 10:   5     li.append(int(input('请输入第%d个数字:'%i)))   6     i += 1   7 print('这十个数分别为:')   8 print(li)   9   10 liorder = []  11 x = 0   12 while x == 0:  13     if li != []:  14         m = li[0

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

1 #题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 代码:   2 import pdb   3 tmp = int(input('请输入一个正整数:'))   4 print('%d='%tmp,end = '')   5    6 i = 2   7 li = []   8 #pdb.set_trace()   9 while i > 1:  10     if tmp%i == 0:  11         tmp = tmp/i  12         li

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

1 #题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他说是10岁.请问第五个人多大? 代码:   2    3 li = [0]*5   4 li[0] = 10   5 for i in range(1,5):   6     li[i] = li[i-1] + 2   7 print('第五个人是%d岁'%li[4]) 运行结果: [[email prote

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

1 #题目:利用递归方法求5!. 代码:   2 def fac(n):   3     if n == 1:   4         return 1   5     return n*fac(n-1)   6 print('5的阶乘是%d'%fac(5)) 运行结果: [[email protected] code_100]# python code_26.py  5的阶乘是120 [[email protected] code_100]# 代码解释:  思路:递归一般使用函数的形式,在函数

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

1 #题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 代码:   2    3 for i in range(1,1001):   4     s = 0   5     for j in range(1,i):   6         if i%j == 0:   7             s += j   8     if s == i:   9         print(i) 运行结果: [[email pro

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

1 #题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制. 代码:   2    3 num = int(input('请输入需要相加的数字:'))   4 m = int(input('请输入需要相加的次数:'))   5 s = 0   6 for j in range(1,m+1):   7     for i in range(1,j+1):   8         s +=