【问题标题】:Python: Why does this code execute?Python:为什么要执行这段代码?
【发布时间】:2013-06-26 04:16:10
【问题描述】:

我是 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

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

【问题讨论】:

  • 这真的是输出还是一直到 10?
  • @doctorlove 这绝对不是 OP 得到的输出。
  • 对不起!我对其进行了编辑!谢谢!
  • 您的代码不会产生您打印的实际输出。他们用你写的方式,只显示前五行。
  • 看起来有人再次编辑了它!我会修复它感谢您的注意。

标签: python for-loop scope while-loop


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是output I get

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

    关于它为什么运行的问题。您的最外层条件是一个while 循环,在第一次执行时它是正确的,但是它会直接运行到一个嵌套的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
    

    【讨论】:

    • 你能做到吗1 22 1这就是我要找的谢谢!
    • @JosyulaKrishna 已修复。感谢您了解这一点。
    • 不,现在i 没有改变
    • @gnibbler 我刚刚在 ideone 中运行它并包含了输出的链接。
    • 是的,现在它完全符合我的答案:p
    【解决方案3】:

    欢迎来到 python :-)

    你可以试试这个:

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

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

    range 函数可以接受三个参数,即 start、stop 和 step。如果给定 range(x),它将以 start 为 0,step 为 1 并上升到 x(x 不包括在内)。如果给定 range(y, x),它将从 y 开始向上到 x,默认步长值为 1。

    在示例中,我使用了 range(p, 0, -1) ,它以起点为 'p',步长为 -1,并将 p 的值递减直到 1 并退出。要了解有关范围的更多信息,请单击here

    【讨论】:

    • 谢谢!但是我试图通过使用条件来解决它。
    • @JosyulaKrishna 条件?你的意思是通过 if 语句还是通过 while 循环?
    猜你喜欢
    • 1970-01-01
    • 2016-05-16
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多