0
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

What should I put to remove prime numbers which end with 7?

4

3 回答 3

1

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

if(i % 10 != 7):
    print str(i)
    list.append(i)
于 2013-02-08T17:07:07.817 回答
1

有很多方法可以实现您想要做的事情,您需要查看适合您特定问题的方法。

解决此问题的一种方法:

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

然后:

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

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

于 2013-02-08T17:08:25.253 回答
0

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

所以,你可以这样做: -

num  = 17
str_num = str(num)

然后,要测试最后一位不等于 7,您可以访问字符串的最后一个字符,并将其与'7'. 要访问最后一个字符,请使用str_num[-1].

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

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

此外,您的内部循环似乎不正确。您正在检查 的模数i,通过将其与 中的每个数字相除list,相反,您应该检查模数 until 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)

And elseoffor被执行,当for循环完成执行而没有任何中断时。


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

于 2013-02-08T17:06:44.060 回答