2013-08-18 35 views
1

在此代碼中,我分別打印了這n個值。但我希望這些值在每次循環後都打印在單個數組中。如何才能做到這一點?插入從for循環中獲取的值

n=1000000 
for x in range(1,3000001): 
    if n%2==0: 
     x=n/2 
    else: 
     x=3*n+ 1 
    n=x 
    print(n) 
    if n==1: 
     break 

謝謝。

+1

參閱[奇偶歸一猜想(http://en.wikipedia.org/wiki/Collat​​z_conjecture) – msw

回答

4

使用end=' 'print()

print(n, end=' ') 

演示:

for i, x in enumerate(range(10), 1): 
    print (x, end=' ') 
    if x==5: 
     break 
...   
0 1 2 3 4 5 
>>> print(i) #print the count 
6 
+0

然後我怎樣才能計數該數組中元素的數目? – KillerCode

+0

@ user2297793您可以使用'enumerate'來跟蹤到目前爲止遍歷的所有項目,請參閱我的更新解決方案。 –

4

您可以在值存儲在一個列表,(如result如下):

n = 1000000 
result = [] 
for x in range(1, 3000001): 
    if n % 2 == 0: 
     x = n/2 
    else: 
     x = 3 * n + 1 
    n = x 
    result.append(n) 
    if n == 1: 
     break 
print(result) 
# [500000, 250000, 125000,... 8, 4, 2, 1] 
print(len(result)) 
# 152 

將項目存儲在列表中您有機會稍後在代碼中進一步處理這些項目。您可以打印它們,對它們進行計數,對它們進行更多的計算等。

但是,它確實需要內存來存儲它們,所以如果不需要將它們全部保留在內存中,Ashwini喬杜裏的解決方案會更好。

這是一種類似於Ashwini's的方法,不同之處在於它將打印與計算分開。這總是一件好事,因爲通常希望執行計算而不是同時顯示結果。

n = 1000001 

def myseq(n): 
    for x in range(1, 3000001): 
     if n % 2 == 0: 
      x = n/2 
     else: 
      x = 3 * n + 1 
     n = x 
     yield n 
     if n == 1: 
      return 

for n, item in enumerate(myseq(n), 1): 
    print(n, end=' ') 
# 500000 250000 125000... 8 4 2 1 
print('\n{}'.format(n))