基本代码误解

时间:2016-12-29 23:45:17

标签: python variables printing while-loop

几天前,我买了一本名为" Python for Kids(For Dummies)"的书。 在页47上有一个简单代码块的示例:

a = 2
while a < 10:
    a = a + 1
    print (a)

这导致序列:

3 4 5 6 7 8 9 10

我认为这个结果不正确,因为:

  • &#39; 2&#39;尽管在代码的第一行声明,但不会打印出来。
  • &#39; 10&#39;打印出来,即使10等于它自己(违反条件a < 10)。

即使我做了&#39; while&#39;条件a <= 10,它打印出数字3到11,这又是不正确的。

我认为应该是正确的代码如下:

a = 2
while a < 10:
    print (a)
    a = a + 1

导致:

2 3 4 5 6 7 8 9

这就是我对代码的期望。我玩了一些代码,有趣的是,Python允许一些奇怪的安排,可执行而没有错误,但完全不正确!例如:

a = 2
while a < 30:
    a = a + 5
print (a)

这只会产生数字&#39; 32&#39;,这似乎是不正确的。

如果我将print (a)缩进4个空格,我会得到:

7 12 17 22 27 32

这似乎也是不正确的。你能解释一下为什么我得到这些输出吗?

3 个答案:

答案 0 :(得分:4)

这正是应该发生的事情。 while for 循环的条件仅在循环顶部 进行测试;循环操作期间没有测试。因此,您可以在循环体中根据需要更改循环控制变量(在这种情况下为 a ),并且 while 子句在您返回之前不会做出反应循环的顶部。您上一个示例的等效代码将是这样的:

a = 2
while True:
    if not a < 30:
        break
    a = a + 5

print (a)

a 收到违反条件的值之前,循环不会退出。如果您在更新 a 后进行打印,则保证 a 的最后一个值将违反该条件。

答案 1 :(得分:2)

在第一个代码中,注意print语句之前的行:在完成任何打印之前,它会向a添加1。当然,如果您更改代码,结果可能会有所不同。因此,除非你的书声称应该产生的输出与实际产生的输出不同,否则这本书没有错。

而不是假设Python 错误,也许你应该考虑到你误解Python工作原理的可能性。

答案 2 :(得分:1)

我将逐步执行此示例,一次一个语句,以便您可以看到:

(1) a = 2
(2) while a < 10:
(3)     a = a + 1
(4)     print (a)
  • 第1行:将a设为2。
  • 第2行:测试a是否小于10.这是!所以我们输入while循环体:
  • 第3行:将a增加1. a现在为3。
  • 第4行:打印a(即3)。
  • 第2行:返回循环顶部以测试循环条件:测试a是否小于10.它是!第二次输入while循环体。
  • 第3行:将a增加1. a现在为4。
  • 第4行:打印a(即4)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为5。
  • 第4行:打印a(即5)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为6。
  • 第4行:打印a(即6)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为7。
  • 第4行:打印a(即7)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为8。
  • 第4行:打印a(即8)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为9。
  • 第4行:打印a(即9)。
  • 第2行:测试循环条件:a仍然小于10.继续执行循环体。
  • 第3行:将a增加1. a现在为10。
  • 第4行:打印a(即10)。
  • 第2行:测试循环条件:a不小于10.循环结束。循环后的下一个语句继续执行。如果没有更多,程序结束。

我希望你能从中看到Python工作正常并且输出并不奇怪。

如果您将print (a)移到a = a + 1之上,那么它会在增加它之前打印该值,因此它会给出2到9而不是3到10的输出。

  

Python允许一些奇怪的安排,这些安排可执行而没有错误但完全不正确!例如:

  a = 2
  while a < 30:
      a = a + 5
  print (a)
     

这只会产生数字&#39; 32&#39;,这似乎是不正确的。

计算机正是你告诉他们的,这是他们的力量和弱点。在修改后的代码中,a增加了5而小于30.因此它从2→7→12→17→22→27→32增加。然后它退出该循环,因为32不小于然后打印a,即32。因为print语句没有缩进,所以它在循环之外,所以直到循环结束后才会执行。