首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中取消选择在1-100范围内以7结尾的质数?

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

Stack Overflow用户
提问于 2013-02-09 01:03:02
回答 3查看 169关注 0票数 0
代码语言:javascript
复制
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结尾的质数?

EN

回答 3

Stack Overflow用户

发布于 2013-02-09 01:07:08

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

代码语言:javascript
复制
if(i % 10 != 7):
    print str(i)
    list.append(i)
票数 1
EN

Stack Overflow用户

发布于 2013-02-09 01:08:25

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

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

  • 定义一个方法是

(N)-你可以找出或查找某个地方的实现,我确信

然后:

代码语言:javascript
复制
yourlist = [x for x in xrange(2, 100) if isprime(x) and x % 10 != 7]

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-09 01:06:44

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

所以,你可以这样做:

代码语言:javascript
复制
num  = 17
str_num = str(num)

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

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

代码语言:javascript
复制
if str_num[-1] != '7':
    # don't add it to list

此外,您的内部循环似乎是不正确的。你通过将i除以list中的每个数字来检查它的模数,相反,你应该检查模数直到i ** 0.5。此外,您还可以使用for循环的else部分,以避免使用boolean flag。因此,修改后的代码应该如下所示

代码语言:javascript
复制
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)

并且当for循环在没有任何中断的情况下完成执行时,执行forelse

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14777649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档