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

时间:2013-06-28 11:39:21

标签: python for-loop scope while-loop

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

 p = 2
 while(p>0):
     for i in range(10):
          print i+1 , p
          p-=1

预期输出

1 2
2 1

然而实际输出

1 2
2 1
3 0
4 -1
5 -2
6 -3
7 -4
8 -5
9 -6
10 -7

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

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

这是output I get

1 2
2 1
3 0
4 -1
5 -2
6 -3
7 -4
8 -5
9 -6
10 -7

关于它为何运行的问题。您的最外层条件while循环,在第一次执行时为true,但它会直接运行到嵌套for循环。如果发生这种情况,while将不会检查,直到for循环完成首次执行(这就是为什么p = -7)。

你想要的是this

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

给出输出:

1 2
2 1

答案 2 :(得分:0)

欢迎来到python: - )

你可以试试这个:

p = 2
for i in range(1, p+1):
    print i,
print
for i in range(p, 1, -1):
    print i,

这将打印所需的输出。不仅是2,而且如果你改变p的值,它将打印相同的输出。

范围函数可以采用三个参数,即start,stop和step。如果给出范围(x),它将以0开始,步骤为1并向上移动到x(不包括x)。如果给出范围(y,x),它将从y开始并上升到x,默认步长值为1。

在这个例子中,我使用了范围(p,0,-1),它以起点为'p',步为-1,并将p的值减1直到1并退出。要阅读有关范围的更多信息,请点击here