Python 嵌套的While循环未按预期工作

Python 嵌套的While循环未按预期工作,python,python-3.x,list,for-loop,while-loop,Python,Python 3.x,List,For Loop,While Loop,我对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) 这段代码的问题是,一旦j的第一个实例满足if条件,它就会打印(i

我对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)
这段代码的问题是,一旦j的第一个实例满足if条件,它就会打印(i)。 在if语句中,理想情况下,我希望它首先完成j的while循环,并且仅当
j
的所有实例都满足(
I%j是!=0
)时才打印(I)

以我目前的知识,我无法修复它。有人能纠正我的密码吗

附言:我不想要一个完全不同的或高级的答案,只需要对我的答案进行修改,这样我就可以在我的初学者水平上理解


简言之,我基本上是在尝试使用if条件来存储素数和非素数的else,这与我的第一个工作代码不同,我在代码中做了相反的操作

my = [4,5,7,16,17,35,20,37]

for i in my:
    j = 2
    while j < i:
        if i % j == 0: # As long as there's a single division that results in 0 remainder, the number is not prime
            break
        j = j + 1
    else:
        print(i)
my=[4,5,7,16,17,35,20,37]
因为我在我的:
j=2
而j
无法从代码的第一个版本中反转逻辑。您需要运行整个内部循环,才能知道您正在测试的数字是素数。您可能会发现,它不是一个早素数(允许您退出,不测试其余的潜在除数),但没有可以在内部循环中立即检查素数的方法。如果有,你根本不需要这个循环


任何“修复”第二个代码的努力都只会将其转换为您开始使用的第一个版本。有更好的基本测试算法,但它们大多要复杂得多,并且会从根本上改变代码的结构。

我认为打印前缩进有一个错误。修复代码与您给出的第一个代码示例有何不同?我可以想出一个使用
all
和生成器表达式的版本,但任何简单的版本基本上都与您开始的版本相同。@Blckknght我基本上想使用if条件来存储素数,而非素数,这与我的第一个代码不同。我想这是可能的不,这是不可能的。如果存在任何除数,则您的数字不是素数(因此您可以停止检查其余部分)。只有当你检查了所有的值(或者子集,有一些更聪明的算法测试得更少),你才能知道一个值是素数。@Blckknght谢谢你的确认,如果你能把它写下来作为答案的话。我将标记为acceptedThanks进行应答,但第二个代码的输出与我最初的输出相同had@Sachin是的,我指出了错误,但没有改变它。糟糕,我还编辑了它,在粘贴答案时缩进可能有点混乱,尽管出于某种原因,它也会打印35,但这段代码会打印所有不为偶数的数字。内部循环只运行一次迭代,因此您只能使用
j=2
进行测试。
my = [4,5,7,16,17,35,20,37]

for i in my:
    j = 2
    while j < i:
        if i % j == 0: # As long as there's a single division that results in 0 remainder, the number is not prime
            break
        j = j + 1
    else:
        print(i)
my = [4,5,7,16,17,35,20,37]

for i in my:
    j = 2
    while j < i:
        if i % j != 0: # If a number is prime, all the cases will result in non-zero remainder, so many numbers will be print out
            print(i)
        j = j + 1
    else:
        print("Prime No not found")
my = [4,5,7,16,17,35,20,37]

for i in my:
    j = 2
    while j < i:
        if i % j != 0:
          print(i)
        break # you need to put the break out of if statement,so it will go to the next number to test, Hope this help
    else:
        print("Prime No not found")