所以我在做while循环,我发现了一些奇怪的东西。
count = 0
while count <= 5:
count += 1
print(count)
输出:
1
2
3
4
5
6
这不是我不理解循环。这是怎么计数打印到六个?什么时候只有当count
小于或等于5时才打印count
?
而且6是超过5.为什么会这样?
我知道我能做到
count = 0
while count != 5:
count += 1
print(count)
但我只是想明白为什么把<=
表现得很奇怪?
<=
没什么奇怪的;你的循环条件允许数字达到并包括5
。但你增加count
然后打印它,所以你将打印6
最后。
这是因为count = 5
满足你的循环条件,然后你添加一个使它成为6
和打印。下一次通过循环count <= 5
不再是真的,只有循环结束。
所以你的代码执行此操作:
count = 0
,count <= 5
- > True
,count += 1
制作count = 1
,打印1
。count = 1
,count <= 5
- > True
,count += 1
制作count = 2
,打印2
。count = 2
,count <= 5
- > True
,count += 1
制作count = 3
,打印3
。count = 3
,count <= 5
- > True
,count += 1
制作count = 4
,打印4
。count = 4
,count <= 5
- > True
,count += 1
制作count = 5
,打印5
。count = 5
,count <= 5
- > True
,count += 1
制作count = 6
,打印6
。count = 6
,count <= 5
- > False
,结束循环。您可以在打印后递增计数器:
while count <= 5:
print(count)
count += 1
或者你可以使用<
只允许小于5
的数字:
while count < 5:
count += 1
print(count)
当计数等于5加1时它很简单,它变为6然后它被打印并退出循环。
你的问题不是关于<=
如何运作。
您在打印之前将count
添加1,因此当count等于5时,您再添加1,因此打印6。
让我们来看看代码,看看发生了什么。
注意:如果您的代码正在执行您不希望它执行的操作,那么这是一个很好的做法。
count = 0
while count <= 5:
count += 1
print(count)
count
从0开始
count = 0
while count <= 5: # count = 0. Is 0 <= 5? Yes. Run the code.
count += 1
print(count)
增加计数,使它现在等于1.打印它。
while count <= 5: # count = 1. Is 1 <= 5? Yes. Run the code.
count += 1
print(count)
增量。打印。重复。
让我们继续讨论导致问题的有趣案例。
while count <= 5: # count = 5. Is 5 <= 5? Yes. Run the code.
count += 1
print(count)
在这种情况下,count
仍然满足不等式,因此代码运行。
怎么了?
count
是5,递增,因此输出6。
既然我希望你理解为什么存在这个问题,那就让我们探索替代方案及其优点,缺点和产出。
让我们从你的代码开始吧。
count = 0
while count <= 5:
count += 1
print(count)
优点:不打印0
缺点:打印6
如果我们删除了=
标志怎么办?
count = 0
while count < 5:
count += 1
print(count)
输出:
1
2
3
4
5
优点:你想要什么
缺点:你必须从0而不是1开始
如果我们按照您的建议做了并用<
标志替换了!
标志怎么办?
count = 0
while count != 5:
count += 1
print(count)
输出:
1
2
3
4
5
优点:你想要什么
缺点:脆弱。如果你改变了你的增量,使它增加了一个像3之类的数字,那么终点将被意外跳过,代码将继续永远运行。最好使用不平等
如果我们想要开始成为第一个显示的数字怎么办?好吧,要做到这一点,我们必须在更改之前打印出当前的数字,这意味着我们必须翻转事件的顺序。
count = 1 # Change the first number so it's what we want displayed first.
while count <= 5:
print(count)
count += 1
输出:
1
2
3
4
5
优点:你想要什么,并从第一个显示的数字而不是它下面开始。
缺点:如果你想坚持使用while
循环,这是可行的方法,但在这种情况下有更好的方法。
在这种情况下,你增加数字然后用它们执行操作,使用for
loop更合乎逻辑,for count in range(1,5):
print(count)
是为像这样的实例设计的。
1
2
3
4
5
输出:
while
优点:您想要什么,更容易阅读,更容易编写,不太可能导致基于放置的错误。
缺点:与a=0
while (a<4):
a=a+1
print(a)
循环不同,必须知道上边界。
a=0
while (a<4):
print(a)
a=a+1
输出将是1,2,3,4
变量a = 0应满足while循环的条件(a <4)以继续执行。
计算a = a + 1并将其保存在现在为1的循环的存储器中。因此,作为打印(a)的结果,数字1将不输出0。为了在循环内再次迭代;数字1(保存在第一个循环的内存中,根据a <4条件)进行检查。哪个是真的;像以前一样继续执行。
a = a + 1计算并保存在现在为2的循环存储器中。然后输出数字2并保存在第二循环的存储器中,然后对照a <4)进行检查。哪个是真的;像以前一样继续执行。
a = a + 1计算并保存在循环的存储器中,现在为3.然后输出数字3并保存在第三循环的存储器中,然后在a <4)之后检查。哪个是真的;像以前一样继续执行。
a = a + 1计算并保存在现在为4的循环的存储器中。然后输出数字4,即使应满足条件a <4。原因是,在满足之前的条件3 <4之后我已经陷入循环内部并且现在在我进入循环之后,语句的执行是不可避免的,这将保持输出4.数字4现在保存在第四个循环的存储器,根据a <4)检查。这是假的,执行在这里停止。
对于相反情况的情况,这种情况是可以理解和理解的
qazxswpoi
输出为0,1,2,3
变量a = 0应满足while循环的条件(a <4)以继续执行。
首先执行打印语句,并且由第一循环的存储器中的a创建的第一个值是0.因此输出0。然后计算a = a + 1并保存在循环的存储器中,该循环将变为1而不是0.为了在循环内再次迭代;数字1(保存在第一个循环的内存中,根据a <4条件)进行检查。哪个是真的;像以前一样继续执行。
执行打印语句,并且由第二循环的存储器中的a创建的值现在是1.因此输出1。然后计算a = a + 1并将其保存在现在为2的循环的存储器中。为了在循环内再次迭代;数字2(保存在第二个循环的存储器中,根据a <4条件)进行检查。哪个是真的;像以前一样继续执行。
执行打印语句,并且由第三循环的存储器中的a创建的值现在是2.因此输出2。然后计算a = a + 1并保存在现在为3的循环的存储器中。为了在循环内再次迭代;数字3(保存在第三个循环的存储器中,根据a <4条件)进行检查。哪个是真的;像以前一样继续执行。
首先执行打印语句,并且由第四循环的存储器中的a创建的值现在是3.因此输出3。然后a = a + 1被计算并保存在循环的存储器中,现在是4.为了在循环内再次迭代;数字4(保存在第四个循环的存储器中,根据a <4条件)进行检查。这是假的;执行停止。