2014-11-06 68 views
0

我怎樣才能得到一個整數作爲輸入,其輸出將是該號碼後面的Collatz sequence。該序列由以下規則來計算:Collat​​z序列

  • 如果n是偶數,則下一個數字是n/2
  • 如果n是奇數,則下一個數字是3n + 1

例如11

11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 

開始時,這是我現在的代碼:

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n%2 == 0: 
     n_add = [n/2] 
     collatz = [] + n_add 
    else: 
     n_add2 = [3*n + 1] 
     collatz = [] + n_add2 
     print collatz 

如果我執行這一點,並插入一個數字,沒有任何反應。

+0

您是否嘗試過使用Google搜索「隨機數字蟒蛇」? – 2014-11-06 19:57:40

回答

1

你永遠不會改變數字n,所以每次都是一樣的。如果數字很奇怪,您也只能打印。另外,方括號[]表示一個數組 - 我不確定你的目標是什麼。我可能會改寫這樣的:

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n%2 == 0: 
     n = n/2 
    else: 
     n = 3*n + 1 
    print n 

你可能要花費一些時間來比較和對比什麼,我跟你的指示做的 - 這幾乎是名副其實的字對字的翻譯(除print

它是從你的代碼有點不清楚,如果你只想打印出來,因爲他們出來,或者如果你想將它們收集齊全,並打印出來,在最後。

1

你應該每次修改n,這將做你想要的:

n = int(raw_input('insert a random number')) 
while n > 1: 
    n = n/2 if not n & 1 else 3 * n + 1 # if last bit is not set to 1(number is odd) 
    print n 

## -- End pasted text -- 
insert a random number11 
34 
17 
52 
26 
13 
40 
20 
10 
5 
16 
8 
4 
2 
1 

使用自己的代碼,只是打印出每個n:

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n % 2 == 0: 
     n = n/2 
    else: 
     n = 3 * n + 1 
    print n 

或者把所有在列表中,並在年底進行打印:

all_seq = [] 
while n > 1: 
    if n % 2 == 0: 
     n = n/2 
    else: 
     n = 3 * n + 1 
    all_seq.append(n) 
print(all_seq) 
0
def collatz(number): 
    while number != 1: 
     if number % 2 == 0: 
      number = number // 2 
      print(number) 

     elif number % 2 == 1: 
      number = number * 3 + 1 
      print(number) 

try: 
    num = int(input('Please pick any whole number to see the Collatz Sequence in action.\n')) 
    collatz(num) 
except ValueError: 
    print('Please use whole numbers only.') 
0

我也一直在努力了一段時間,這是我想出了:

def collatz (number): 
    while number != 1: 
     if number == 0: 
      break 
     elif number == 2: 
      break 
     elif number % 2 == 0: 
      number = number // 2 
      print (number) 
     elif number % 2 == 1: 
      number = 3 * number + 1 
      print (number) 
    if number == 0: 
     print ("This isn't a positive integer. It doesn't count") 
    elif number == 2: 
     print ("1") 
     print ("Done!") 
    elif number == 1: 
     print ("1") 
     print ("Done!") 

try: 
    number = int(input("Please enter your number here and watch me do my magic: ")) 
except (ValueError, TypeError): 
    print ("Please enter positive integers only") 

try: 
    collatz(number) 
except (NameError): 
    print ("Can't perform operation without a valid input.") 
+0

你問題的格式是錯的,看看它吧... – 2017-07-28 11:22:22

+0

剛剛做過。謝謝! – RamRam 2017-07-28 11:40:54