首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取python 3中的质数列表

获取python 3中的质数列表
EN

Stack Overflow用户
提问于 2018-05-14 14:56:08
回答 4查看 1.2K关注 0票数 3

初学者。我试图返回一个包含从0到num的所有质数的列表。有没有人能帮我找出我的代码出了什么问题?我总是得到一个空的列表。非常感谢!(我使用的是python 3.6)

代码语言:javascript
复制
def task(num):
    num = int(num)
    lst = []
    if num < 3:
        return lst
    else:
        for i in range(3,num):       
            if not i & 1:
                lst = lst
            else:
                primetest = range(3, int(i ** 0.5) + 1, 2)
                for n in primetest:
                    if i % n != 0:
                        lst.append(i)

    return lst

task(5)

更新:

感谢你们的评论!真的很有用。

这是我修改后的代码的样子。

代码语言:javascript
复制
def task(num):
  num = int(num)
  lst = []

  if num < 2:
    return lst

  if num >= 2:
    lst.append(2)

  for i in range(3, num + 1):       
    if i % 2 == 1:
      switch = True
      for n in range(3, int(i ** 0.5) + 1, 2):
        if i % n == 0:
          switch = False  
          break        
      if switch:
        lst.append(i)

  return lst
EN

回答 4

Stack Overflow用户

发布于 2018-05-14 15:28:38

主要的问题在于你的内部for循环:

在您的代码中,每当您在i范围内找到一个不是i的除数的数字时,都会将primetest追加到列表中。

您可能希望在这里使用布尔值来存储找到i的除数的事实,如果没有找到,则仅将其附加到列表中。

为了回答您的问题,您的列表是空的,因为在您的示例中,primetest范围始终为空:

代码语言:javascript
复制
int(3**0.5) + 1 = 3  and   int(5**0.5) + 1 = 3
range(3,3,2) = []

该数组为空,因为range函数将不包括上限,并且由于内部循环没有在代码中执行预期的操作,因此在任务函数的参数高于或等于9之前,结果将是一个空列表

票数 2
EN

Stack Overflow用户

发布于 2018-05-14 15:30:32

你的代码在几个方面都是错误的,告诉我你是否理解为什么下面的代码是有效的?

代码语言:javascript
复制
def task(num):
    num = int(num)
    lst = [2]
    if num < 3:
        return lst

    for i in range(3, num + 1):       
        if i % 2 == 1:
            for n in range(3, int(i ** 0.5) + 1, 2):
                if i % n == 0:
                    break
            else:
                lst.append(i)

    return lst

(注意: for else子句在这里是非常自然的,for else子句是当你在循环中搜索东西时使用的,当你发现一些东西时就会中断,如果遇到not break并且常规的stopIteration被用来退出循环的else部分被执行,我说这在这里是很自然的,因为在伪代码中你会说类似“如果我的数字可以被另一个小于它的平方的数字除以它不是素数,否则将它添加到质数列表”查看http://book.pythontips.com/en/latest/for_-_else.html以获取更多细节)

这绝对不是一种快速的方法,但我尽量与您尝试的精神保持一致,同时提高代码的美观性

票数 1
EN

Stack Overflow用户

发布于 2022-02-03 06:08:46

你可以在日期集中找到质数和最整除的数字。

代码语言:javascript
复制
a=[ int(x) for x in input("Enter 10 values: ").split() ]
c=[]
prime=[]
b=max(a)
for num in range(1,b+1):
    for i in range(2,num):
        if (num%i)==0:
            break
        else:
            prime.append(num)
for i in a:
    for j in prime:
        if i%j==0: 
        c.append(i)
from collections import Counter
e=Counter(c)
f=e.most_common(1)
f
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50324604

复制
相关文章

相似问题

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