【发布时间】:2017-07-27 14:14:53
【问题描述】:
我必须确定列表中的所有数字是否都是素数,然后根据结果返回布尔“真”或“假”语句。我在 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
问题是,我在 Python Visualizer 中看到了这一点,for 循环在检查列表中的第一个值后停止迭代。我不明白为什么语法与我过去使用的 for 循环相同。
我插入了一些示例值,例如:all_primes([5,2,11,37]) 或 all_primes([5,2,4,37]),返回值始终为真,因为 5 是列表中的第一个数字,也是唯一被迭代的数字。
关于为什么的任何想法?
【问题讨论】:
-
您的每个分支机构都有
return。这立即打破了功能。for循环完成后,您需要将代码设置为return。 -
此外,
i % i始终为 0,因此第一个elif的and语句永远不会为真。 -
@khelwood Any 整数可以被 1 和自身整除。素数的特别之处在于,没有其他数。
-
@PrithviBoinpally en.wikipedia.org/wiki/Primality_test
-
@ChristianKönig 你跟我说什么?我说
i / i错了
标签: python for-loop math iteration primes