2017-04-14 46 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