2016-01-25 76 views
1

我目前是一個noob學習Python,我正在嘗試完成一個練習。練習要求我:Python,Loop - Do語句,直到給出具體的答案

  1. 輸入一個整數。
  2. 根據該整數是奇數還是偶數,執行特定計算並打印答案。
  3. 就拿給出答案,並重復具體計算一次,直到答案等於1

我迄今完成了第一個2個動作的代碼,但我在努力實現循環還將繼續重新運行計算,直到答案是1。這是我到目前爲止的代碼:

def collatz(getNumber): 

    if getNumber % 2 == 0: 
     print(getNumber // 2) 
    elif getNumber % 2 == 1: 
     print(3 * getNumber + 1) 

print('Please write a number') 
number = collatz(int(input())) 
+1

你需要一個'while'環路和'break'。而且這個問題每週要問好幾次,所以要稍微搜索一下這個網站。 – LexyStardust

+0

如果您期望'number'包含結果,您還需要'返回'一個值而不是打印它。 – interjay

回答

3

使用while loop

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

或者,您可以使用遞歸:

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

謝謝;出於某種原因,我把它放在我的腦海裏,不允許在語言中重複出現的塊...... – asphyz

1
def collatz(n): 
    print n 
    if n == 1: 
     return 
    if n % 2 == 0: 
     n2 = (n/2) 
    elif n % 2 == 1: 
     n2 = (3 * n + 1) 

    collatz(n2) 


print('Please write a number') 
number = collatz(int(input()))