Python:为什么这段代码会执行?

Jos*_*hna 5 python scope for-loop while-loop

我是python的初学者,使用v2.7.2这是我试图在命令提示符下执行的

 p = 2
 while(p>0):
     for i in range(10):
          print i+1 , p
          p-=1
Run Code Online (Sandbox Code Playgroud)

预期产量

1 2
2 1
Run Code Online (Sandbox Code Playgroud)

实际输出是

1 2
2 1
3 0
4 -1
5 -2
6 -3
7 -4
8 -5
9 -6
10 -7
Run Code Online (Sandbox Code Playgroud)

为什么会这样?以及我如何实现预期的行为?

Joh*_*ooy 6

while循环条件仅在for循环结束后再次测试.你可以这样做

p = 2
for i in range(10):
    if p <= 0:
        break
    print i+1 , p
    p-=1
Run Code Online (Sandbox Code Playgroud)


Woo*_*Moo 5

这是我得到输出:

1 2
2 1
3 0
4 -1
5 -2
6 -3
7 -4
8 -5
9 -6
10 -7
Run Code Online (Sandbox Code Playgroud)

你的问题为什么它运行.你最外面的条件是一个while循环,这在第一次执行时是正确的,但是它会直接运行到嵌套的for循环中.当发生这种情况时while,在for循环完成第一次执行之前不会检查(这就是为什么p = -7).

你想要的是这个:

p = 2
for i in range(10):
    if p <= 0:
        break
    print i+1 , p
    p-=1
Run Code Online (Sandbox Code Playgroud)

给出输出:

1 2
2 1
Run Code Online (Sandbox Code Playgroud)