如何在Python中取消选择以1-100范围内的7结尾的素数?

时间:2013-02-08 17:03:02

标签: python primes

list = []

for i in range(2,100):
    primeflag=True
    for num in list:
        if(i%num==0):
            primeflag=False

    if(primeflag):
        print str(i)
        list.append(i)
print list

我应该用什么来删除以7结尾的素数?

3 个答案:

答案 0 :(得分:1)

将您的数字修改为10,并在将其附加到最终列表之前检查它是否等于7。

if(i % 10 != 7):
    print str(i)
    list.append(i)

答案 1 :(得分:1)

有很多方法可以实现您想要做的事情,并且您需要了解哪些方法适合您的特定问题。

解决这个问题的一种方法:

  • 定义一个方法isprime(n) - 您可以在某处找出或查找实现,我敢肯定

然后:

yourlist = [x for x in xrange(2, 100) if isprime(x) and x % 10 != 7]

这是一个很好的第一种方法,当然还有更复杂的可能性,例如使用发生器,修改过的Erasthothenes Sieve等,但是你可以在工作之后探索这些选项。

答案 2 :(得分:0)

在python中,您可以使用str函数将任何数值转换为字符串表示。

所以,你可以这样做: -

num  = 17
str_num = str(num)

然后,要测试不等于7的最后一个数字,您可以访问该字符串的最后一个字符,并将其与'7'进行比较。要访问最后一个字符,请使用str_num[-1]

所以,你需要的条件是: -

if str_num[-1] != '7':
    # don't add it to list

另外,你的内循环似乎不正确。您正在检查i的模数,将其除以list中的每个数字,而应检查模数直到i ** 0.5。此外,您可以使用else循环的for部分,以避免使用boolean flag。因此,您修改的代码应该看起来像

for i in range(2,100):
    for num in range(2, int(i ** 0.5) + 1):
        if(i % num == 0):
            break

    else:
        if str(i)[-1] != '7':
            my_list.append(i)

else循环完成执行而没有任何中断时,for的{​​{1}}被执行。


虽然与实际问题没有直接关系,但您可以考虑签出Sieve of Eratosthenes算法,以生成给定范围内的素数。