2017-04-14 95 views
-2

我一直在试图做一个函数,它需要一个数字并通过猜想来运行它。我写了这段代码,但它不起作用。我是初学者,所以我不知道为什么它不起作用。它不是贯穿数字并停在1​​,而是永远持续下去。如果有人可以看看我的代码,并告诉我什么是错的,那真的很有帮助。Python中的Collazt猜想

 
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)

+0

第一件事,这个'如果数== 1: 休息()'是无用的,因为它是多余的你,而条件 – njzk2

+3

这甚至不应该编译。 break()是一个语法错误。 – user2357112

回答

1

任何数量,将在1停止必须由值2通过第一个。

但是,因为你的evenity和古怪的测试是之后彼此,如果number == 2在你的循环的开头,则:

  • 它是偶数,所以它得到由2
  • 分然后,立即测试1的奇数,它是,所以它乘以3.

然后循环继续number == 3

要修复它,请将if替换为elif,以便每次只测试一个选项。

+1

我会用'else'替换第二个'if'。 :) –

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