几天前,我买了一本名为" Python for Kids(For Dummies)"的书。 在页47上有一个简单代码块的示例:
a = 2
while a < 10:
a = a + 1
print (a)
这导致序列:
3 4 5 6 7 8 9 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
这似乎也是不正确的。你能解释一下为什么我得到这些输出吗?
答案 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)
a
设为2。a
是否小于10.这是!所以我们输入while
循环体:a
增加1. a
现在为3。a
(即3)。 a
是否小于10.它是!第二次输入while
循环体。a
增加1. a
现在为4。a
(即4)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为5。a
(即5)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为6。a
(即6)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为7。a
(即7)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为8。a
(即8)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为9。a
(即9)。 a
仍然小于10.继续执行循环体。a
增加1. a
现在为10。a
(即10)。 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语句没有缩进,所以它在循环之外,所以直到循环结束后才会执行。