首页 > 解决方案 > 为什么while不适用于if语句和else

问题描述

我正在寻找打印 collat​​z 序列,我希望序列停止在 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?如果我在最后使用eliforelse语句,它会起作用。但不是当我有两个if

标签: python-3.xif-statementwhile-loop

解决方案


第一个版本不起作用的原因是因为您可能number在循环中修改了两次。

使用elseyou 测试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 ,然后也可以相乘和相加。


推荐阅读