开发者社区 问答 正文

为什么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)    

如果我有两个if状态,为什么while不起作用?如果我在末尾使用elifelse语句,则该方法有效。但是当我有两个if时不会

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 18:54:54 1035 分享 版权
1 条回答
写回答
取消 提交回答
  • 第一个版本不起作用的原因是,您可能 在循环中两次修改了number

    使用else您测试number%2—如果没有余数,则将其除以2来更改number,然后跳过else并测试数字!=1并再次循环。如果是余你跳过并执行其他!=1循环再设置`数= 3 *号+ 1'和你的测试号。无论哪种情况,您都只能通过两种可能的方式之一来更改“数字” 。

    使用这两个ifs测试number%2-如果没有余数,则将其除以2以更改number,然后再次测试number%2 ...但是number 之前可能已经更改您第二次测试它。

    想象一下,用从6到 6的数字除以2的3乘以0的余数来运行它,那么6%2 == 0并执行number = number // 2给出3 * Now *您进行测试if number%2!= 0…...但是现在的数字已经是3,并且3除以2就是1,余数为1-即3%2 == 1,因此number%2确实是!= 0`,所以现在您再次更改数字,这是循环中的第二次。

    随着``别人有没有办法,你永远不会换号两次在一个循环的迭代; 与两个“如果”,您可以除以2 ,然后 相乘并相加。

    回答来源:stackoverflow

    2020-03-23 18:55:01
    赞同 展开评论
问答地址: