我开始使用Python并对以下代码提出疑问:
def prime2(n):
n = eval(input("What is your number? "))
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
else:
return True
因此,当返回True
时,n
为素数。现在有没有办法列出if语句为真的n
的所有值?
答案 0 :(得分:4)
由于有无数的素数,没有。但是,您可以列出特定时间间隔内的所有素数:
foo = [x for x in range(1000) if prime2(x)]
这将为您提供0到1000区间内所有素数的列表。
编辑:为什么你的n
作为你的功能的参数,然后把它作为用户的输入读取?这会丢弃传递给函数的参数。来自用户的输入应该在该功能之外。脚本可能如下所示:
def prime2(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
max = int(input("What is your number? "))
print [x for x in range(max) if prime2(x)]
Edit2 :根据@ rmflow对该问题的评论修正了prime2
的代码。
答案 1 :(得分:0)
如果在n
为素数时需要所有值的列表,则需要素数生成器。基于prime2
函数的示例(虽然不是效果):
import math
def prime2(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def prime_generator():
n = 1
while True:
n += 2
if prime2(n):
yield n
primes = prime_generator()
for prime in primes:
print prime
将打印素数直至中断