2014-09-25 25 views
0

所以我有這個代碼來計算Hailstone序列,並且一直這樣做5次迭代。所以,如果我輸入數字128我應該得到64,32,16,8,4。我最終這樣做,但不是沒有它顯示列表一次添加一個數字在列表的末尾。我想獲得整個列表,而不是其他任何東西。 這裏是我的代碼:Python中的冰雹

lines=list() 
n=int(input("Enter the a number greater than 128: ")) 
if n<128: 
     print("ENTER A NUMBER GREATER THAN 128!!!!") 
else: 
    i=5 
    m=5 
for i in range(m): 
    if n%2==0: 
     n=n/2 
     line=n 
     lines.append(line) 
    else: 
     n=3*n+1 
     line=n 
     lines.append(line) 
    print (lines) 

這裏是我的輸出:

[64.0] 
[64.0, 32.0] 
[64.0, 32.0, 16.0] 
[64.0, 32.0, 16.0, 8.0] 
[64.0, 32.0, 16.0, 8.0, 4.0] 

我唯一希望的是最後的名單,我不想第一3.如何做到這一點?

+0

'print(lines)'應該在'for循環的範圍外(m):' – 2014-09-25 06:16:40

+0

嗨,如果我的回答有幫助,請接受它。 :) – 2014-09-25 12:59:23

回答

2

print放在循環之外。 試試這個:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 
lines=list() 
n=int(input("Enter the a number greater than 128: ")) 
if n<128: 
     print("ENTER A NUMBER GREATER THAN 128!!!!") 
else: 
    i=5 
    m=5 
for i in range(m): 
    if n%2==0: 
     n=n/2 
     line=n 
     lines.append(line) 
    else: 
     n=3*n+1 
     line=n 
     lines.append(line) 
print (lines) 
0

因爲你print功能的它是內部for循環把它拿出來的圈:

lines=list() 
n=int(input("Enter the a number greater than 128: ")) 
if n<128: 
     print("ENTER A NUMBER GREATER THAN 128!!!!") 
else: 
    i=5 
    m=5 
for i in range(m): 
    if n%2==0: 
     n=n/2 
     line=n 
     lines.append(line) 
    else: 
     n=3*n+1 
     line=n 
     lines.append(line) 
print (lines) 

>>>Enter the a number greater than 128: 128 
[64, 32, 16, 8, 4] 

,或者如果你要打印出方可以使用map作爲轉換索引的列表strjoin函數將str數字連接到,

print ','.join(map(str,lines)) 

>>>Enter the a number greater than 128: 128 
64,32,16,8,4 
1

您正在'for'循環內打印列表(行)。 所以很明顯,每次循環都會迭代你的print語句就會執行。 如果您必須打印最終列表,則必須將打印頁面保留在for循環之外。