初学者。我试图返回一个包含从0到num的所有质数的列表。有没有人能帮我找出我的代码出了什么问题?我总是得到一个空的列表。非常感谢!(我使用的是python 3.6)
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)更新:
感谢你们的评论!真的很有用。
这是我修改后的代码的样子。
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发布于 2018-05-14 15:28:38
主要的问题在于你的内部for循环:
在您的代码中,每当您在i范围内找到一个不是i的除数的数字时,都会将primetest追加到列表中。
您可能希望在这里使用布尔值来存储找到i的除数的事实,如果没有找到,则仅将其附加到列表中。
为了回答您的问题,您的列表是空的,因为在您的示例中,primetest范围始终为空:
int(3**0.5) + 1 = 3 and int(5**0.5) + 1 = 3
range(3,3,2) = []该数组为空,因为range函数将不包括上限,并且由于内部循环没有在代码中执行预期的操作,因此在任务函数的参数高于或等于9之前,结果将是一个空列表
发布于 2018-05-14 15:30:32
你的代码在几个方面都是错误的,告诉我你是否理解为什么下面的代码是有效的?
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以获取更多细节)
这绝对不是一种快速的方法,但我尽量与您尝试的精神保持一致,同时提高代码的美观性
发布于 2022-02-03 06:08:46
你可以在日期集中找到质数和最整除的数字。
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)
fhttps://stackoverflow.com/questions/50324604
复制相似问题