Python中FOR嵌套WHILE循环的计数异常及变量重置疑问
问题分析:循环中count未重置却输出重复值的原因
你原本想要得到这样的输出:0;12 1;24 2;36 3;48 4;60 ...,但实际运行代码后得到的却是:0;12 1;12 2;12 3;12 4;12。先看看你用的代码:
iter = 0 count = 0 letter = 0 for iter in range(5): while letter < len("hello, world"): letter+=1 count+=1 print("Iteration " + str(iter) + "; count is: " + str(count))
首先要纠正你的一个误解:count变量根本没有在每次for循环迭代时重置!这恰恰就是问题的核心。
咱们一步步拆解代码的执行流程:
- 程序一开始初始化了
count=0、letter=0,这两个变量是定义在for循环外面的,属于外层变量,不会自动重置。 - 第一次进入for循环(iter=0):此时
letter是0,满足letter < 12(因为"hello, world"的长度是12),所以while循环开始运行:letter从0加到12,count也跟着累加了12次,变成12。然后打印出Iteration 0; count is: 12。 - 接下来进入for循环的第二次迭代(iter=1):这时候
letter已经是12了,完全不满足letter < 12的条件,所以while循环直接跳过,根本不会执行。count的值还是停留在12,所以打印出来的自然还是12。 - 后面的iter=2、3、4都是同样的逻辑:
letter一直保持12,while循环再也没运行过,count也就一直是12,所以每次输出的count值都一样。
你用count*(iter+1)得到了想要的结果,这算是一个“歪打正着”的办法,但并不是逻辑上最合理的修复方式。如果想要让每次for循环都重新计算count,正确的做法是把count和letter的初始化放到for循环内部,这样每次迭代开始时这两个变量都会被重置为0,重新执行while循环:
for iter in range(5): count = 0 letter = 0 while letter < len("hello, world"): letter += 1 count += 1 # 如果需要倍数的话,这里再乘以(iter+1)即可 print(f"Iteration {iter}; count is: {count*(iter+1)}")
这样修改后,就能得到你最初期望的输出啦。
内容的提问来源于stack exchange,提问作者ahOw22
相关产品推荐
相关产品推荐

