在Python中无限循环,但仅当1是目标值时

时间:2017-05-16 17:19:02

标签: python

所以,我刚开始学习Python,并认为一个简单的Collat​​z 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)

5 个答案:

答案 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))