Python 我的For loop赢了';t遍历列表
我必须确定列表中的所有数字是否都是素数,然后根据结果返回布尔“真”或“假”语句。我在for循环中做了一些条件语句,看看这个数字是否为素数 代码如下:Python 我的For loop赢了';t遍历列表,python,for-loop,math,iteration,primes,Python,For Loop,Math,Iteration,Primes,我必须确定列表中的所有数字是否都是素数,然后根据结果返回布尔“真”或“假”语句。我在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 ==
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
def所有素数(xs):
is_prime=None
对于xs中的i:
如果i<2:
素=假吗
回报是最好的
打破
elif(i%2==0)和(i%i==1):
素=假吗
回报是最好的
打破
其他:
_prime=True吗
回报是最好的
问题是,我在Python可视化工具中看到了这一点,for循环在检查列表中的第一个值后停止迭代。我不明白为什么,因为语法与我过去使用的循环相同
我插入了一些示例值,如:all_primes([5,2,11,37])
或all_primes([5,2,4,37])
,返回值始终为真,因为5是列表上的第一个数字,也是唯一正在迭代的数字
你知道为什么吗 你应该从另一个角度看待问题
如果你发现一个不是素数的数字,你应该返回False,循环结束后你应该返回True。你的
If/else
块中有一个return
和一个break
,你应该去掉它们。另外,else
中的return
应该在外部,否则只要他找到一个“素数”,它就会返回
在每个分支中都有
return
。这会立即中断功能。在for
循环完成后,您需要将代码设置为return
。此外,i%i
始终为0,因此第一个elif
的和
-语句永远不能为真。@khelwood任何整数都可以被1和自身整除。素数的特殊之处在于,没有其他数字。@PrithviBoinpally@ChristianKönig你告诉我什么?我说,I/I
是错误的。如果不使用“map”函数,我将如何编写您建议的代码?我尝试了已编辑的代码,但不幸的是,有些测试用例无法使用该逻辑。如果列表的输入是1,3,5,7,那么它将失败,因为1不是素数,也不是负数。@PrithViboInPaly,只需在checkPrime函数中添加检查,将再次编辑。
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
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))
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