所以,我刚开始学习Python,并认为一个简单的Collatz Conjecture程序将是一个有趣的项目。我们的想法是打印每一步,然后是总共采取的步骤。
问题是我不能阻止这段代码进入无限循环,但只有当我使用'while x!= 1'时。我可以用'while x!= 2'代替,然后按预期停在2。我很难理解这里的数字1有什么特别之处。
提前致谢。这是迄今为止的代码:
x=int(input("Enter a number: "))
steps=int(0)
while x!=1:
if x%2==0:
x=int(x/2)
steps=(steps+1)
print(x)
if x%2!=0:
x=((x*3)+1)
steps=(steps+1)
print(x)
print("Steps:",steps)
答案 0 :(得分:1)
它不只是1,尝试用x != 3
替换它,你会发现相同的行为。只要你使用奇数,它就会发生。
每当它达到第一个条件时,x
的值就会改变,然后再次达到第二个条件。您可能希望将其放入else
,以确保一次只执行一个if
!
我们首先假设x = 5
。它命中第二个条件,变为16,然后命中第一个,变为8,然后是4,然后是2,然后是1.只有这一次,在x = 1
之后,也达到第二个条件,它将其值更改回4.因此循环继续。
答案 1 :(得分:0)
当x = 1时,while循环将导致问题。为什么不尝试for循环并枚举以跟踪循环数?例如
x = int(input('enter your number'))
for n, i in enumerate(range(x)):
print('x: {}'.format(x))
if x % 2 == 0:
x /= 2
else:
x = x * 3 + 1
if x == 1:
break
print('steps: {}, x: {}'.format(n, x))
答案 2 :(得分:0)
我修改了你的代码。例如,将12写入输入部分,9步之后x的值将等于“1”,并且当x = 1时循环将结束。
x = int(input("Enter a number: "))
steps = int(0)
while x>1:
if x!=1:
if x % 2 == 0:
x = int(x / 2)
steps = (steps + 1)
print(x)
else:
x = ((x * 3) + 1)
steps = (steps + 1)
print(x)
print("Steps:",steps)
答案 3 :(得分:0)
感谢大家的回复,我没有想过测试其他奇怪的数字(感觉特别愚蠢)或者跟随“如果'用'否则'基于这里的一些答案,我确实设法获得了一个工作计划:
x=int(input("Enter a number: "))
steps=int(0)
while x!=1:
if x%2==0:
x=int(x/2)
else: x=((x*3)+1)
steps=(steps+1)
print(x)
print("Steps:",steps)
但是,我会尝试其他建议的方法。在这个阶段,它对我来说都很有价值。
答案 4 :(得分:0)
我认为x
变成1
时应分开对待。如果输入1
,则steps
将为0,并且应为1
。
x = int(input("Enter a number: "))
steps = 0
while x > 0:
if x == 1:
if steps ==0:
steps += 1
break
if x%2 == 0:
x = x/2
print(int(x))
else:
x = 3*x + 1
print(int(x))
steps += 1
print("steps =", str(steps))