Pri*_*lly -2 python iteration math primes for-loop
我必须确定列表中的所有数字是否都是素数,然后根据结果返回布尔“True”或“False”语句。我在 for 循环中做了一些条件语句来查看该数字是否为素数。
这是代码:
def all_primes(xs):
is_prime = None
for i in xs:
if i < 2:
is_prime = False
return is_prime
break
elif (i % 2 == 0) and (i % i == 1):
is_prime = False
return is_prime
break
else:
is_prime = True
return is_prime
Run Code Online (Sandbox Code Playgroud)
问题是,我在 Python Visualizer 中看到了这一点,for 循环在检查列表中的第一个值后停止迭代。我不明白为什么,因为语法与我过去使用的 for 循环相同。
我插入了一些示例值,例如:all_primes([5,2,11,37])or all_primes([5,2,4,37]),并且返回值始终为 true,因为 5 是列表中的第一个数字,也是唯一被迭代的数字。
有什么想法吗?
你的区块里有 areturn和 a ,你应该去掉它们。另外,里面的应该在外面,否则每当他找到“素数”时它就会返回。breakif/elsereturnelse
def all_primes(xs):
is_prime = None
for i in xs:
if i < 2:
is_prime = False
return is_prime
elif (i % 2 == 0):
is_prime = False
return is_prime
else:
is_prime = True
return is_prime
Run Code Online (Sandbox Code Playgroud)
在此之后,您应该知道,您并没有真正检查素数。这不是最有效的方法,但很清楚如何:
def all_primes(xs):
def checkPrime(n):
if n < 2:
return False
for i in xrange(2, n):
if n%i == 0:
return False
return True
return all(map(checkPrime, xs))
Run Code Online (Sandbox Code Playgroud)
编辑:如果没有map函数,您只需使用for循环进行迭代:
def all_primes(xs):
def checkPrime(n):
if n < 2:
return False
for i in xrange(2, n):
if n%i == 0:
return False
return True
for n in xs:
if not checkPrime(n):
return False
return True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |