Python 我的For loop赢了';t遍历列表

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 ==

我必须确定列表中的所有数字是否都是素数,然后根据结果返回布尔“真”或“假”语句。我在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
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