Python中的Collazt猜想

Python中的Collazt猜想,python,Python,我一直在尝试做一个函数,它接受一个数字,并通过猜想运行它。我写了这段代码,但不起作用。我是初学者,所以我不知道为什么它不起作用。而不是运行通过数字和停止在1,它只是永远继续下去。如果有人能看看我的代码,告诉我它出了什么问题,那将非常有用 任何在1处停止的数字必须先经过值2 但是,由于均匀性和奇异性的测试紧跟在一起,如果循环开始时number==2,则: 它是偶数,所以除以2 然后立即测试1的奇异性,它是,所以它乘以3 然后循环继续执行number==3 要解决此问题,请将第二个if替换为e

我一直在尝试做一个函数,它接受一个数字,并通过猜想运行它。我写了这段代码,但不起作用。我是初学者,所以我不知道为什么它不起作用。而不是运行通过数字和停止在1,它只是永远继续下去。如果有人能看看我的代码,告诉我它出了什么问题,那将非常有用


任何在1处停止的数字必须先经过值2

但是,由于均匀性和奇异性的测试紧跟在一起,如果循环开始时
number==2
,则:

  • 它是偶数,所以除以2
  • 然后立即测试1的奇异性,它是,所以它乘以3
然后循环继续执行
number==3


要解决此问题,请将第二个
if
替换为
elif
,每次只测试一个选项。

有人已经提到了您的if/else问题。以下是您的代码的简短版本:

def collatz(number):
    while number != 1:
        print(number)
        if number % 2 == 0:
            number = number // 2
        else:
            number = 3 * number + 1

    print(number)

collatz(5)
其输出:

$ python test.py
5
16
8
4
2
1

首先,如果number==1:break()这个
是无用的,因为它与您的条件是冗余的,而这甚至不应该编译
break()
是一个语法错误。如果
出现,我会将第二个
替换为
else
:)
$ python test.py
5
16
8
4
2
1