2013-08-18 5 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/Collatz_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 Решение Чаудхари было бы лучше.

Вот такой подход, подобный Ашвини, за исключением того, что он отделяет печать от вычисления. Это всегда хорошо, поскольку часто вы хотите выполнить вычисление и не показывать результаты одновременно.

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))