2017-10-21 198 views
0

J'ai vu ma même question posée mais je veux savoir pourquoi ce que j'essaie ne fonctionne pas. C'est à partir d'une question de défi Zybook.Utilisation d'une boucle for imbriquée en python pour imprimer un rectangle

Voici l'exercice:

écrire des boucles imbriquées pour imprimer un rectangle. Exemple de sortie pour un programme donné:

* * * 
* * * 

Voici le code I construit:

num_rows = 2 
num_cols = 3 

for num_rows in range(0,num_rows): 
    for num_cols in range(0,num_cols): 
     print('*', end=' ') 
    print('') 

La sortie est:

* * * 
* * 

Question: Pourquoi ne pas le imbriquée pour la déclaration d'impression en boucle répéter pour la troisième fois? Quand je tournerai la boucle imbriquée à:

for num_cols in range(0,3): 

Je reçois ma sortie désirée du rectangle astérisque 3x2. Si la variable num_cols est déclarée comme 3, l'instruction de sortie ne devrait-elle pas correspondre à la sortie désirée?

+1

Parce que vous utilisez les mêmes identifiants 'num_rows' et' num_cols' pour les variables précédemment définies et celles utilisées dans la boucle 'for'. Renommez les derniers en quelque chose comme 'row' et' col' au lieu de 'num_rows' et' num_cols'. – dabadaba

+0

Voilà, merci. Je récurais mes livres et je ne réalisais pas que c'était l'erreur que je faisais. –

+1

Fondamentalement, vous étiez en train d'écraser l'original 'num_rows' et' num_cols' dans la boucle. – dabadaba

Répondre

0

Vous remplacez la variable num_cols en l'utilisant comme variable de bouclage ainsi que la valeur du nombre de colonnes. Il est mis à 2 à la fin de la première itération de la boucle externe. Vous pouvez le remplacer par num_col. Même chose pour num_rows

0

Après le raisonnement de @ Karthik sur la raison pour laquelle votre code est incorrect, voici une solution avec misc. améliorations:

num_rows = 2 
num_cols = 3 

for _ in xrange(num_rows):  # xrange for efficient iteration 
    for _ in xrange(num_cols): # no need to unpack iteration variable 
     print '*',    # for Python 2, but use the function syntax for 3+ 
    print ''