从异常中学python(3)——求素数

从错误中学python(3)——求素数

题目

输出100以内的所有素数,素数之间以一个空格区分

定义函数法

这个方法代码比较多

def isSushu(x):
    for i in range(2,x):
        if(x%i==0):
            return False
    return True

print(' '.join([str(y) for y in [x for x in range(2,100) if isSushu(x)]]))

' '.join()这种写法是把其中的itrable对象用空格分隔

嵌套法

print(' '.join(str(y) for y in [x for x in range(2,100) if not[i for i in range(2,x) if x%i==0]]))

这里只用一行代码就搞定了因为if 可以判断一个列表是不是空。

当然可以把生成式的方式改成map函数
有人使用filter函数

filter函数

import math
def is_prime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n%i==0:
            return False
    return True

primes = filter(is_prime, range(2, 100))
print(' '.join([str(p) for p in primes]))

一个奇怪的写法

for i in range(2, 101):
    for j in range(2, i-1):
        if i % j == 0:
            break
    else:
        print(i)

这里的奇怪之处就在于 python按缩进分代码块 而else的位置就显得十分的莫名奇妙,不知道执行流程是怎么样的

版权声明:本文为博主原创文章,欢迎转载和分享,但请声明出处http://blog.****.net/zhzz2012