2009-06-23 6 views
3

J'ai commencé à apprendre python récemment et j'ai une question sur les boucles pour lesquelles j'étais en espérant que quelqu'un puisse répondre. Je veux être capable d'imprimer tous les produits possibles de deux nombres de un à dix. donc: 2 par 2, 2 par 3, 2 par 4 ... 2 par 10, 3 par 2, 3 par 3 ... 3 par 10, 4 par 2, 4 par 3 etc ... J'aurais pensé que le La façon la plus simple de le faire serait d'utiliser deux boucles, mais je ne suis pas sûr. Quelqu'un pourrait-il me dire comment cela se fait. Merci beaucoup. Asadm.en utilisant deux pour les boucles en python

+2

Est-ce un devoir? – Jasiu

+0

Oui, vous avez raison, c'est l'approche correcte. –

+0

ne sais pas quand c'est un devoir ou non, mais ça sonne, s'il vous plaît écrivez-le pour moi. –

Répondre

4
for i in range(1, 11): 
    for j in range(1, 11): 
     print i * j 
5

Juste pour le plaisir (et les itertools-dépendants SO lecteurs) en utilisant une seule boucle for:

from itertools import product 
for i,j in product(xrange(1,11), xrange(1,11)): 
    print i*j 

EDIT: en utilisant xrange comme suggéré par Hank Gay

+1

Pourrait aussi bien utiliser xrange si vous apportez des outils. –

+0

Fyi, le produit est inutile (mais moi, C boucles au lieu de python), python a la syntaxe pour cela: produit (gamme (1,11), gamme (1,11)) <=> (i, j pour i de gamme (1,11) pour j dans la plage (1,11)) pour x dans (i * j pour i dans la plage (1,11) pour j dans la plage (1,11)): print x, –

+0

mais de nouveau vous avez> 1 pour-boucles ;-) –

8

Voici une autre façon

a = [i*j for i in xrange(1,11) for j in xrange(i,11)] 

note nous devons commencer deuxième iterator de « i 'Au lieu de 1, c'est donc doublement efficace

modifier: la preuve qu'il est le même que solution simple

b = [] 
for i in range(1,11): 
    for j in range(1,11): 
     b.append(i*j) 

print set(a) == set(b) 
+1

montrez le temps approximatif pour 10000 itération a prend .8 sec tandis que b prend 2.5 se donc abt 3 fois plus lent est –

0

Vous ne pouvez pas besoin de l'imbriquée for-loop Solution.
une seule boucle avec liste Comprehension (comme indiqué ci-dessous) suffirait:

r_list = list(range(2, 11)) 
output = [] 
for m in r_list: 
    tmp = [m*z for z in r_list] 
    output.append(tmp) 

print(output) 

ou simplifiez:

output = [] 
for m in list(range(2, 11)): 
    tmp = [m*z for z in list(range(2, 11))] 
    output.append(tmp) 

print(output) 

Prints:

[ 
     [4, 6, 8, 10, 12, 14, 16, 18, 20], 
     [6, 9, 12, 15, 18, 21, 24, 27, 30], 
     [8, 12, 16, 20, 24, 28, 32, 36, 40], 
     [10, 15, 20, 25, 30, 35, 40, 45, 50], 
     [12, 18, 24, 30, 36, 42, 48, 54, 60], 
     [14, 21, 28, 35, 42, 49, 56, 63, 70], 
     [16, 24, 32, 40, 48, 56, 64, 72, 80], 
     [18, 27, 36, 45, 54, 63, 72, 81, 90], 
     [20, 30, 40, 50, 60, 70, 80, 90, 100] 
    ] 
Questions connexes