Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1060 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Perdu dans un code Python!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Perdu dans un code Python!

n°1956488
td871
Posté le 10-01-2010 à 11:36:47  profilanswer
 

Bonjour,

 

J'ai un examen d'informatique dans quelques jours, je m'exerce donc à résoudre des questions Python des années précédentes. Notre examen se fait sans ordinateur et il faut comprendre le code dans les moindres détails. Il faut expliquer à quoi sert le code et en donner le résultat.
Voici l'énoncé:

 

Expliquez brièvement le rôle du petit code Python qui suit et indiquez très précisément ce qui
sera affiché à l’écran en exécutant les quatre dernières lignes du code. L’instruction « list.append(a) » ajoute « a » à la liste « list ».

 
Code :
  1. >>> def find(li1, li2):
  2.     lx = []
  3.     lx2 = []
  4.     y = z1 = z2 = xx = yy = zz2 = 0
  5.     for a1 in li2:
  6.         y = y+1
  7.     z1 = 1
  8.     for a2 in li1:
  9.         z2 = 1
  10.         for a3 in li2:
  11.             if a2 == a3 and z2 == zz2 + 1:
  12.                 lx.append(z1)
  13.                 xx = xx + 1
  14.                 zz2 = z2
  15.                 z2 = z2 + 1
  16.                 if (xx == y):
  17.                     lx2.append(lx[0])
  18.                     lx = []
  19.                     xx = 0
  20.                     zz2 = 0
  21.             z2=z2+1
  22.         z1 = z1 + 1
  23.     return lx2
  24. >>> find('gta','gt')
  25. >>> find('aagtaaaa','aaa')
  26. >>> find('gtcgtcgtc','gtc')
  27. >>> find('gtaaacgtcgaataac','gtc')


Réponses finales:

 
Code :
  1. >>> find('gta','gt')
  2. [1]
  3. >>> find('aagtaaaa','aaa')
  4. [1, 6]
  5. >>> find('gtcgtcgtc','gtc')
  6. [1, 4, 7]
  7. >>> find('gtaaacgtcgaataac','gtc')
  8. [1, 7, 10]


Je sais ce que fait le code mais je suis perdu dans les indentations, le rôle des variables,...

 
  • Dans le cas où "xx" n'est pas égal à "y" (ligne 16), je ne sais pas à quel niveau il faut remonter dans le code (=> indentations). Et si on reprend la même lettre de "li1" et qu'on passe à la lettre suivante de "li2" ou autrement?
  • Je ne sais pas non plus à quel moment on peut utiliser les compteurs "z2=z2+1" et "z1=z1 +1" (lignes 21 & 22) (=> indentations)?
  • ...


Bref, je suis bien perdu dans ce code...

 

D'avance, merci beaucoup pour l'aide  :)

 

Thibault


Message édité par td871 le 11-01-2010 à 10:21:13
mood
Publicité
Posté le 10-01-2010 à 11:36:47  profilanswer
 

n°1956668
olivthill
Posté le 11-01-2010 à 09:45:16  profilanswer
 

Citation :

Dans le cas où "xx" n'est pas égal à "y" (ligne 16), je ne sais pas à quel niveau il faut remonter dans le code (=> indentations).

Si xx n'est pas égal à y à la ligne 16, alors python va à la ligne qui suit le pavé du if. Ce pavé (ou bloc) est constitué par toutes les lignes qui sont un peu plus indentées que le if. Ce pavé est donc constitué des lignes 17 à 20 incluses. Donc la ligne qui est exécutée après le test du if, dans le cas ou xx est différent de y, est la ligne 21.

Citation :

si on reprend la même lettre de "l1" et qu'on passe à la lettre suivante de "l2" ou autrement?

Je vois li1 et lx, mais pas je ne vois pas "l1".

Citation :

à quel moment on peut utiliser les compteurs "z2=z2+1" et "z1=z1 +1" (lignes 21 & 22)

La ligne 21 est exécutée dans les conditions suivantes :
- juste après la ligne 20
- ou juste après la ligne 16, si le test échoue (si xx différent de y)
- ou juste après la ligne 11 si le test de cette ligne échoue.
 
La ligne 22 est exécutée après que la boucle for de la ligne 10 se soit terminée.

n°1956698
td871
Posté le 11-01-2010 à 10:52:09  profilanswer
 

Merci beaucoup Oliv, tu éclaires ma lanterne!  :)  
 
Pour "l1" et "l2", je voulais dire "li1" et "li2" respectivement.
 
J'ai encore des doutes pour le rôle des variables:
 
"y" ? —> est le nombre d'éléments "a1" dans "li2" ??
 
"z1" ?
 
"z2" ?
 
"xx" ?
 
"zz2" ?
 
"yy" ? —> je suppose que celle-ci ne joue aucun rôle puisqu'on ne s'en sert pas dans la suite du code??  
 
 
Je suppose que "a1" et "a3" sont équivalents?
 
 
 

n°1956775
olivthill
Posté le 11-01-2010 à 13:25:23  profilanswer
 

Oui y est le nombre d'éléments dans li2
 
z1 est le nombre d'éléments + 1 dans li1, quand on arrive à la fin de la boucle de la ligne 8. Mais dans la boucle, par exemple ligne 12, z1 est l'indice de l'élément de li1 qui est en cours de traitement. Donc z1 est une sorte de pointeur sur le caractère en cours d'examen de la chaine li1.
 
z2 est le nombre d'éléments + 1 dans li2, quand on arrive à la fin de la boucle de la ligne 10. Mais dans la boucle, z2 est l'indice de l'élément en cours de traitement. Donc z2 est une sorte de pointeur sur le caractère en cours d'examen de la chaine li2.
 
xx est une sorte de pointeur sur le dernier caractère ajouté dans la chaine lx.
 
zz2 est l'ancien z2. Cela sert pour la comparaison de la ligne 11.
 
yy est zéro tout le temps. C'est probablement une variable prévue pour un traitement futur, ou pour un traitement qui a été enlevé pour simplifier ce code.
 
Je ne vois pas a1.
Si la question est de savoir si a2 et a3 sont équivalents, la réponse est non, car a2 est une lettre de li1, et a3 est une lettre de li2. Parfois, les deux lettres sont les mêmes, mais pas nécessairement.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Perdu dans un code Python!

 

Sujets relatifs
[Python] [Résolu] Liste[Python] Questions de nOob
débutante: fréquence des mots sur PythonIntrepretation du code Html dans Microsoft EXCEL
My SQL, Wordpress ... SOS je suis perduModifier et compiler code source
Simplifieur de code source perlflash code
Aide pour un programme python& Php > bordure speciale à une image, perdu dans le code
Plus de sujets relatifs à : Perdu dans un code Python!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)