Problème de compréhension sur une ligne de code
Résolu/Fermé
kilvui
Messages postés
41
Date d'inscription
dimanche 16 juin 2013
Statut
Membre
Dernière intervention
22 octobre 2016
-
Modifié par kilvui le 23/04/2016 à 14:50
mamiemando Messages postés 33029 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 24 avril 2016 à 12:25
mamiemando Messages postés 33029 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 mars 2024 - 24 avril 2016 à 12:25
A voir également:
- Problème de compréhension sur une ligne de code
- Site de vente en ligne particulier - Guide
- Partage de photos en ligne - Guide
- Apparaitre hors ligne instagram - Guide
- Code de déverrouillage oublié - Guide
- Code ascii de a - Guide
1 réponse
mamiemando
Messages postés
33029
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
Modifié par mamiemando le 24/04/2016 à 12:09
Modifié par mamiemando le 24/04/2016 à 12:09
Bonjour,
Conseils préalables
En python n'hésite pas à mettre des print pour voir ce que contiennent les variables pendant que tu exécutes ton programme. La fonction type permet également de voir le type d'une variable.
Encore mieux, tu peux utiliser pdb pour le faire (je passe rapidement là dessus, si tu es intéressé tu regarderas tranquillement comment ça s'utilise).
Pré-requis
Lis par exemple ceci pour comprendre ce que fait la fonction zip :
https://www.saltycrane.com/blog/2008/04/how-to-use-pythons-enumerate-and-zip-to/
Du coup
Par convention, dans ce qui suit, les noms commençant par une majuscule correspondent à un nom de classe (donc un type), à ne pas confondre avec une instance de cette classe (qui est donc une variable de ce type).
Assigner des variables dans une boucle for
Python sait, lorsqu'il itère sur des paires, les attribuer à un ensemble de variables.
Exemple :
Plus généralement il sait le faire pour des n-uplets, et même des n-uplets de contenant des n-uplets. Complexifions notre exemple pour le vérifier :
Retour à ton bout de code :
Reprenons le premier lien : la fonction
Ainsi i,(boule,x,y,dx,dy,r) permet d'initialiser les variables i (index de la Boule), boule (la Boule), x, y, dx, dy et r pour chaque BouleInfo stockée dans self.boules.
Bonne chance
Conseils préalables
En python n'hésite pas à mettre des print pour voir ce que contiennent les variables pendant que tu exécutes ton programme. La fonction type permet également de voir le type d'une variable.
Encore mieux, tu peux utiliser pdb pour le faire (je passe rapidement là dessus, si tu es intéressé tu regarderas tranquillement comment ça s'utilise).
Pré-requis
Lis par exemple ceci pour comprendre ce que fait la fonction zip :
https://www.saltycrane.com/blog/2008/04/how-to-use-pythons-enumerate-and-zip-to/
len(x)renvoie la longueur de
x.
range(0, n)renvoie [0, 1, 2, ..., n-1]
Du coup
range(0,len(self.boules))permet de compter de 0 jusqu'au nombre de boules -1 (en d'autres terme : la première boule correspond à l'index 0, la seconde à l'index 1 et ainsi de suite).
Par convention, dans ce qui suit, les noms commençant par une majuscule correspondent à un nom de classe (donc un type), à ne pas confondre avec une instance de cette classe (qui est donc une variable de ce type).
self.boulesfait référence au membre
boulesde la classe (mettons
class Billard) dans laquelle la fonction que tu regardes est codée.
selfest l'instance considérée de cette classe (ou si tu préfère, le Billard considéré).
Assigner des variables dans une boucle for
Python sait, lorsqu'il itère sur des paires, les attribuer à un ensemble de variables.
Exemple :
>>> l = [(i, i*i) for i in range(0, 10)]
>>> print l
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81)]
>>> for i, j in l:
... print i, j
...
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
Plus généralement il sait le faire pour des n-uplets, et même des n-uplets de contenant des n-uplets. Complexifions notre exemple pour le vérifier :
>>> l = [(i, (i*i, i*i*i)) for i in range(0, 10)]
>>> print l
[(0, (0, 0)), (1, (1, 1)), (2, (4, 8)), (3, (9, 27)), (4, (16, 64)), (5, (25, 125)), (6, (36, 216)), (7, (49, 343)), (8, (64, 512)), (9, (81, 729))]
>>> for i, (carre, cube) in l:
... print i, carre, cube
...
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
Retour à ton bout de code :
Reprenons le premier lien : la fonction
zipva permettre d'énumérer des couples de type
(int, BouleInfo), où BouleInfo correspond au type
(Boule, int, int, int, int, int).
Ainsi i,(boule,x,y,dx,dy,r) permet d'initialiser les variables i (index de la Boule), boule (la Boule), x, y, dx, dy et r pour chaque BouleInfo stockée dans self.boules.
Bonne chance
24 avril 2016 à 12:21
Bonne fin de journée, cordialement
Kilvui
24 avril 2016 à 12:25