【发布时间】:2020-11-05 16:33:05
【问题描述】:
我对 Python 很陌生。我刚刚了解了 for 和 while 循环。有一个练习让我们打印列表中的所有素数。我做了以下
my = [4,5,7,16,17,35,20,37]
for i in my:
j = 2
while j < i:
if i % j == 0:
break
j = j + 1
else:
print(i)
这很有效,但是由于我只是在学习,出于好奇,我尝试替代地实现结果
我没有在if 条件中过滤和禁止数字为非素数,而是尝试做相反的事情,即在if 条件中将数字评估为素数,并使用 else 打印非出现或素数
my = [4,5,7,16,17,35,20,37]
for i in my:
j = 2
while j < i:
if i % j != 0:
print(i)
j = j + 1
else:
print("Prime No not found")
这个代码的问题 it ,只要 j 的第一个实例满足 if 条件,它就会打印 (i)。
在 if 语句中,理想情况下,我希望它首先完成 j 的 while 循环,并且仅当 j 的所有实例都满足 (i % j is != 0) 时才打印 (i)
以我目前的知识,我无法修复它。有人可以纠正我的代码吗?
PS:我不想要一个完全不同或高级的答案,只需要我自己的改变,这样我就可以在我的初学者水平上理解。
简而言之,我基本上是在尝试使用 if 条件来存储素数,else 用于非素数,这与我的第一个工作代码相反
【问题讨论】:
-
我认为打印前缩进有错误
-
修复代码与您给出的第一个代码示例有何不同?我可以想出一个使用
all和生成器表达式的版本,但任何更简单的东西都将与您开始的地方基本相同。 -
@Blckknght 我基本上想使用 if 条件来存储素数和非素数,这与我的第一个代码不同。我认为这是可能的
-
不,这是不可能的。如果存在 any 除数,则您的数不是素数(因此您可以停止检查其余数)。只有当你检查了它们全部(或一个子集,有更聪明的算法测试更少)时,你才能知道一个值是素数。
-
@Blckknght 感谢您的确认,如果您可以将其写为答案。我将标记为已接受
标签: python python-3.x list for-loop while-loop