2013-08-18 10 views
1

Dans ce code, j'ai imprimé ces n valeurs séparément. Mais je veux que ces valeurs soient imprimées dans un seul tableau après chaque bouclage. Comment puis-je faire cela?Insérer des valeurs qui sont extraites de la boucle 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 

Merci.

+1

se référer [Collatz Conjecture] (http://en.wikipedia.org/wiki/Collatz_conjecture) – msw

Répondre

4

utilisation end=' ' intérieur print():

print(n, end=' ') 

Démo:

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

Alors, comment puis-je compter le nombre d'éléments dans ce tableau? – KillerCode

+0

@ user2297793 Vous pouvez utiliser 'enumerate' pour garder une trace du nombre total d'objets traversés jusqu'à présent, voir ma solution mise à jour. –

4

Vous pouvez stocker les valeurs dans une liste, (comme result ci-dessous):

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 

Stocker les éléments dans une liste donner Vous avez la possibilité de traiter ces éléments ultérieurement dans le code. Vous pouvez les imprimer, les compter, faire plus de calcul dessus, etc.

Cependant, il faut de la mémoire pour les stocker tous, donc si vous n'avez pas besoin de les conserver tous en mémoire en même temps, Ashwini La solution de Chaudhary serait meilleure.

Voici une approche similaire à celle d'Ashwini, sauf qu'elle sépare l'impression du calcul. C'est toujours une bonne chose car souvent on souhaite effectuer un calcul et ne pas afficher les résultats en même temps.

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