习题12

2019-08-09  本文已影响0人  小董不太懂

先看看我的解法

for i in range(101,201,1):
    for j in range(2,i):
        # print('{} % {}'.format(i,j))
        if i%j == 0:
            break
    else:
        print(i)

输出结果:

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 

这道题目很有趣的一点是出现了for...else的用法,具体请参考:https://blog.csdn.net/CSND_Ayo/article/details/70341484

  • 程序分析:
    若i是101的时候,执行第二个for循环,发现101不符合if条件,便无法执行break语句,不执行break语句,就无法跳出第二个for循环,那么也就意味着第二个for循环是正常结束的,故执行else语句并输出i的值。
    若i是102的时候,执行第二个for循环,发现满足if条件,然后就执行了break跳出第二个for循环,自然就不会再去执行else语句了,而是直接跳到第一个for循环继续执行。
import math
h = 0
for i in range(101,201):
    for j in range(2,int(math.sqrt(i))+1):
        if i%j == 0:
            break
    else:
        print(i,end='\t')
        h += 1
print('\n共有素数{}个'.format(h))

输出结果:

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 
共有素数21个
import math
p=range(101,201)
aList=list(p)#list(p)返回的是int类型元素的数列
for i in range(101,201):
    for j in range(2,int(math.sqrt(i)+1)):
        if i % j==0:
            aList.remove(i)
            break
print(aList)
print('总数为:%d'%len(aList))

输出结果:

[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
总数为:21

程序解析:
先产生101到200之间元素类型为int型的数列,若i为101不符合if条件,返回for循环,继续执行102,102满足if条件,执行aList.remove(102),就是去掉列表中的102,然后break,终止第二个for循环,接着执行102....第一个for循环执行完毕后输出aList

上一篇 下一篇

猜你喜欢

热点阅读