在此代碼中,我分別打印了這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
謝謝。
在此代碼中,我分別打印了這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
謝謝。
使用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
然後我怎樣才能計數該數組中元素的數目? – KillerCode
@ user2297793您可以使用'enumerate'來跟蹤到目前爲止遍歷的所有項目,請參閱我的更新解決方案。 –
您可以在值存儲在一個列表,(如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))
參閱[奇偶歸一猜想(http://en.wikipedia.org/wiki/Collatz_conjecture) – msw