python-返回if语句为true的值
我从Python开始,对以下代码有一个问题:python-返回if语句为true的值,python,Python,我从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语
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
的所有值?因为素数的数量是无限的,没有。但是,您可以在一定的时间间隔内列出所有素数:
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
的代码。因为素数的数量是无限的,所以没有。但是,您可以在一定的时间间隔内列出所有素数:
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
的代码。如果当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
将打印素数直到中断如果在
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
将打印素数直到中断您不必计算
input()
,它会自动计算为python值。请注意-您应该在外部为
返回True,否则循环没有意义您不必计算input()
,它会自动计算为python值。请注意,对于,您应该在之外返回True,否则循环将毫无意义