python - 返回if语句为真时的值
我刚开始学习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
的值呢?
2 个回答
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
这个代码会一直打印质数,直到你停止它。
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)]
编辑2: 根据@rmflow对问题的评论,修正了prime2
的代码。