Python中的Collazt猜想

时间:2017-04-14 19:57:39

标签: python

我一直在努力创建一个带有数字的函数并通过猜想运行它。我写了这段代码,但它不起作用。我是初学者,所以我不知道为什么它不起作用。它不是通过数字运行而是停在1处,而是永远持续下去。如果有人可以查看我的代码并告诉我它的错误,那将非常有用。

def collatz(number):
    number = int(number)

while number != 1: if number == 1: break() if number%2 == 0: number = number//2 print(str(number)) if number%2 == 1: number = 3*number+1 print(str(number)) collatz(5)

2 个答案:

答案 0 :(得分:1)

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

但是,由于你对偶数和奇怪性的测试是正确的,如果在你的循环开始时number == 2,那么:

  • 它是偶数,所以它除以2。
  • 然后立即测试1是否有奇怪性,因此它乘以3。

然后循环继续number == 3

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

答案 1 :(得分:0)

有人已经提到过你的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