我想打印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)
如果我有两个if
状态,为什么while
不起作用?如果我在末尾使用elif
或else
语句,则该方法有效。但是当我有两个if
时不会
问题来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
第一个版本不起作用的原因是,您可能 在循环中两次修改了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