python-3.x - 为什么while不适用于if语句和else
问题描述
我正在寻找打印 collatz 序列,我希望序列停止在 1。
为什么这会导致无限循环并且while
部分代码不起作用;
number = input('Enter a no')
number = int(number)
while number !=1:
if number % 2 == 0:
number= number//2
print(number)
if number % 2 != 0:
number= 3 * number + 1
print(number)
但这行得通;
number = input('Enter a no')
number = int(number)
while number !=1:
if number % 2 == 0:
number= number//2
print(number)
else:
number= 3 * number + 1
print(number)
while
如果我有两个语句,为什么不起作用if
?如果我在最后使用elif
orelse
语句,它会起作用。但不是当我有两个if
解决方案
第一个版本不起作用的原因是因为您可能number
在循环中修改了两次。
使用else
you 测试number % 2
- 如果没有余数number
,则通过将其除以 2 进行更改,然后跳过else并测试数字!=
1 并再次循环。如果还有剩余部分,则跳过该部分并执行 else,设置number = 3 * number + 1
并测试数字!=
1 以再次循环。在任何一种情况下,您都只以两种可能的方式之一更改了“数字”。
使用您测试的两个ifnumber % 2
- 如果没有余数number
,则将其除以 2 进行更改,然后number % 2
再次测试……但在第二次测试之前number
可能已经更改。
想象一下,从 6 开始的数字6
除以 2 是 3,余数为 0,所以6 % 2 == 0
你执行number = number//2
它给出3
Now you test if number % 2 != 0
… 但现在数字已经是 3,而 3 除以 2 是 1,余数为 1——也就是说,确实如此3 % 2 == 1
,所以现在您再次更改数字,这是循环中的第二次。number % 2
!= 0
由于else
没有办法在循环的一次迭代中更改数字两次;使用两个“如果”,您可以除以 2 ,然后也可以相乘和相加。