Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
boucles_imbriquees [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


boucles_imbriquees

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
boucles_imbriquees [2008/12/16 20:24]
tyrtamos
boucles_imbriquees [2008/12/17 07:46]
tyrtamos
Ligne 77: Ligne 77:
 <code python> <code python>
 # donnée # donnée
-boucles = [[1,5,2],[3],[1,4]]+boucles = [[1,5,2],3,[1,4]]
  
 # initialisation de la boucle # initialisation de la boucle
 +boucles = [(type(x)==list and [x] or [[x]])[0] for x in boucles]
 boucles = [(len(x)==1 and [[0] + x] or [x])[0] for x in boucles] boucles = [(len(x)==1 and [[0] + x] or [x])[0] for x in boucles]
 boucles = [(len(x)==2 and [x + [1]] or [x])[0] for x in boucles] boucles = [(len(x)==2 and [x + [1]] or [x])[0] for x in boucles]
Ligne 136: Ligne 137:
 Le principe de l'incrémentation des compteurs (la boucle "for") est simple: Le principe de l'incrémentation des compteurs (la boucle "for") est simple:
  
-  * on commence par incrémenter le dernier compteur (x=n). S'il ne "déborde pas, on arrête la boucle. S'il "déborde", on le remet à zéro, et on passe au compteur précédent %%x=x-1%%+  * on commence par incrémenter le dernier compteur (x=n). S'il ne "débordepas, on arrête la boucle. S'il "déborde", on le remet à la valeur de la borne inférieure, et on passe au compteur précédent %%x=x-1%%
   * on fait la même chose pour le compteur précédent   * on fait la même chose pour le compteur précédent
   * etc...   * etc...
Ligne 157: Ligne 158:
         self.B = B         self.B = B
         self.indmax = len(self.B)-1         self.indmax = len(self.B)-1
 +        # reconstituer une sous-liste quand elle est donnée sous forme d'entier
 +        self.B = [(type(x)==list and [x] or [[x]])[0] for x in self.B]
         # insérer la borne inférieure (=0) de chaque boucle si elle n'est pas donnée         # insérer la borne inférieure (=0) de chaque boucle si elle n'est pas donnée
         self.B = [(len(x)==1 and [[0] + x] or [x])[0] for x in self.B]         self.B = [(len(x)==1 and [[0] + x] or [x])[0] for x in self.B]
Ligne 198: Ligne 201:
  
 <code python> <code python>
-B = [[1,5,2],[3],[1,4]]+B = [[1,5,2],3,[1,4]]
 boucles = Boucles(B) boucles = Boucles(B)
  
Ligne 210: Ligne 213:
 </code>  </code> 
  
-Comme dans le 1er code, on peut introduire une liste de boucles incomplète (comme le [3au lieu de [0, 3, 1]), comme d'ailleurs on le ferait avec le "for i in range(binfbsuppas)".+Comme dans le 1er code, on peut introduire une liste de boucles incomplète (ex: 3 au lieu de [0, 3, 1]), comme d'ailleurs on le ferait avec le "for i in range(3)" au lieu de "for i in range(031)".
  
-Dans la partie utile de la boucle, on peut récupérer chaque compteur de boucle i comme: boucles.C[i]. Mais ici, le nom "boucles" est un choix de l'utilisateur.+Dans la partie utile de la boucle, on peut récupérer chaque compteur de boucle i comme: boucles.C[i]. Mais ici, le nom "boucles", instance de classe, est un choix de l'utilisateur.
  
-Ce code utilisateur affiche, bien entendu, la même chose que précédemment:+Ce code utilisateur affiche, bien entendu, la même chose que précédemment (affichage des compteurs à chaque tour):
  
 <code>  <code> 
Ligne 237: Ligne 240:
 </code> </code>
  
-Petite particularité: comme on se met uniquement à la partie la plus interne des boucles imbriquées, il suffit qu'un seul des compteurs ait une borne inf >= à la borne sup, pour qu'aucune boucle ne tourne (c'est le cas dans les boucles imbriquées python).+Petite particularité: comme on se met uniquement à la partie la plus interne des boucles imbriquées, il suffit qu'un seul des compteurs ait une borne inf >= à la borne sup, pour qu'aucune boucle ne tourne (c'est aussi le cas dans les boucles imbriquées python).
  
 La seule chose qui manque encore, éventuellement, ce sont, à l'initialisation de la classe, les vérifications qu'on ne rentre pas n'importe quoi comme "B". Avec génération d'une exception, par exemple, voire avec création d'une classe d'erreur supplémentaire (BoucleError ?). La seule chose qui manque encore, éventuellement, ce sont, à l'initialisation de la classe, les vérifications qu'on ne rentre pas n'importe quoi comme "B". Avec génération d'une exception, par exemple, voire avec création d'une classe d'erreur supplémentaire (BoucleError ?).
boucles_imbriquees.txt · Dernière modification: 2008/12/17 08:20 de tyrtamos