je viens de débuter en python , en utilisant le tutoriel libre de gerard
swinnen , que j 'apprecie beaucoup .
Mais j ai un petit problem de compréhension sur un script
ce script affiche les 10 premiers termes de la suite de fibonacci
il marche très bien , mais voila je ne comprend pas totalement pourquoi
et comment
>>> a , b, c = 1 ,1,1
>>> while c < 11:
... print b,
... a , b , c = b , b + a , c + 1
...
1 2 3 5 8 13 21 34 55 89
après avoir assigné les valeurs aux variables
la boucle while va commence
... et affiche la premiere valeur de b trouvé (1)
... a assigné la valeur de b (1) , b assigné la valeur de lui meme plus
celle de a (= 2) , c incrémente de un (1+1)
passe la main a while qui compare c avec 11
ok il affiche b (2)
a assigne la valeurs de b (2), b assigne la valeur de a (2) + sa valeur
2 , c incrémente (3)
boucle while ok
print b (3) ?? 2 + 2 = 4 non ?
ou bien quand b assigne la valeur de a il lui mis la valeur (1) qu'il a
chercher ou ?? (dans la premiere ligne ?? bizarre )
ou bien il a chercher ca dans l'assignement antérieur de a (1) dans ce
cas la il lis de droite a gauche ?
quelqu'un peut m'eclairer sur ces points ?
merci d'avance
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Roger That
Le Sun, 05 Sep 2004 15:20:25 +0000, Vent d'Est - East Wind s'est écrié:
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
Je ne saurais le garantir, mais je crois que ça se passe de la manière suivante: - l'interpréteur évalue les expresions "b", "b+a" et "c+1" et en créé un object tuple. Par exemple, si tu fais "a=1,2,3" puis "print a", ça t'affiche "(1,2,3)". - seulement ensuite, l'interpréteur va effectuer une affectation en tupple. Bien sûr, il faut que le tuple de gauche est la même dimension que celui de droite (sinon tu as le droit à "ValueError: unpack tuple of wrong size").
Si tu cherches dans google groupes les mots suivant, tu vas tomber sur ta question: python tuple affectation
Le Sun, 05 Sep 2004 15:20:25 +0000, Vent d'Est - East Wind s'est écrié:
a , b, c = 1 ,1,1
while c < 11:
... print b,
... a , b , c = b , b + a , c + 1 ...
1 2 3 5 8 13 21 34 55 89
Je ne saurais le garantir, mais je crois que ça se passe de la manière
suivante:
- l'interpréteur évalue les expresions "b", "b+a" et "c+1" et en créé
un object tuple. Par exemple, si tu fais "a=1,2,3" puis "print a", ça
t'affiche "(1,2,3)".
- seulement ensuite, l'interpréteur va effectuer une affectation en
tupple. Bien sûr, il faut que le tuple de gauche est la même dimension
que celui de droite (sinon tu as le droit à "ValueError: unpack tuple of
wrong size").
Si tu cherches dans google groupes les mots suivant, tu vas tomber sur ta
question:
python tuple affectation
Le Sun, 05 Sep 2004 15:20:25 +0000, Vent d'Est - East Wind s'est écrié:
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
Je ne saurais le garantir, mais je crois que ça se passe de la manière suivante: - l'interpréteur évalue les expresions "b", "b+a" et "c+1" et en créé un object tuple. Par exemple, si tu fais "a=1,2,3" puis "print a", ça t'affiche "(1,2,3)". - seulement ensuite, l'interpréteur va effectuer une affectation en tupple. Bien sûr, il faut que le tuple de gauche est la même dimension que celui de droite (sinon tu as le droit à "ValueError: unpack tuple of wrong size").
Si tu cherches dans google groupes les mots suivant, tu vas tomber sur ta question: python tuple affectation
Frédéric Momméja
Vent d'Est - East Wind wrote:
Mais j ai un petit problem de compréhension sur un script ce script affiche les 10 premiers termes de la suite de fibonacci il marche très bien , mais voila je ne comprend pas totalement pourqu oi et comment
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_. Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectat ion se décompose comme suit :
a = 2 (valeur de b) b = 2 + 1 (valeur de b + a) c = 1 + 1 (valeur de c + 1)
C'est comme si, avant d'effectuer les calculs on copiait les valeurs de a, b et c dans a', b' et c'. Ensuite on calcule a = b', b = b' + a' et c = c' + 1... ;)
HTH -- Frédéric Momméja
Vent d'Est - East Wind wrote:
Mais j ai un petit problem de compréhension sur un script
ce script affiche les 10 premiers termes de la suite de fibonacci
il marche très bien , mais voila je ne comprend pas totalement pourqu oi
et comment
a , b, c = 1 ,1,1
while c < 11:
... print b,
... a , b , c = b , b + a , c + 1
...
1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_.
Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectat ion se
décompose comme suit :
a = 2 (valeur de b)
b = 2 + 1 (valeur de b + a)
c = 1 + 1 (valeur de c + 1)
C'est comme si, avant d'effectuer les calculs on copiait les valeurs de
a, b et c dans a', b' et c'.
Ensuite on calcule a = b', b = b' + a' et c = c' + 1... ;)
Mais j ai un petit problem de compréhension sur un script ce script affiche les 10 premiers termes de la suite de fibonacci il marche très bien , mais voila je ne comprend pas totalement pourqu oi et comment
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_. Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectat ion se décompose comme suit :
a = 2 (valeur de b) b = 2 + 1 (valeur de b + a) c = 1 + 1 (valeur de c + 1)
C'est comme si, avant d'effectuer les calculs on copiait les valeurs de a, b et c dans a', b' et c'. Ensuite on calcule a = b', b = b' + a' et c = c' + 1... ;)
HTH -- Frédéric Momméja
Xavier Combelle
Frédéric Momméja wrote:
Vent d'Est - East Wind wrote:
Mais j ai un petit problem de compréhension sur un script ce script affiche les 10 premiers termes de la suite de fibonacci il marche très bien , mais voila je ne comprend pas totalement pourquoi et comment
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_. Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectation se décompose comme suit :
De façon surprenante, en python, il n'y a qu'une manière de faire chaque chose. La méthode pythonique pour écrire des choses successives, c'est de les mettre les une en dessous des autres. Je pense que la bonne présentation pour écrire ce qui précède est: a, b, c = b, (b + a), (c + 1) Un triplet est la limite ou j'hésite avec la présentation suivante: (a, b, c) = (b, b + a, c + 1) à partir de 4 élément, la seconde écriture est clairement meilleure. le fait est que c'est le tuplet qui est affecté et comme les effets de bords sont toujours limités, c'est ce à quoi on doit s'attendre. Il y a bien l'ordre de l'évaluation des arguments qui n'a pas l'air d'être défini. Cepedant, on peut considérer tout code se basant sur celui-ci comme étant potentiellemet buggé.
Amicalement, Xavier
Frédéric Momméja wrote:
Vent d'Est - East Wind wrote:
Mais j ai un petit problem de compréhension sur un script
ce script affiche les 10 premiers termes de la suite de fibonacci
il marche très bien , mais voila je ne comprend pas totalement pourquoi
et comment
a , b, c = 1 ,1,1
while c < 11:
... print b,
... a , b , c = b , b + a , c + 1
...
1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_.
Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectation se
décompose comme suit :
De façon surprenante, en python, il n'y a qu'une manière de faire chaque
chose. La méthode pythonique pour écrire des choses successives,
c'est de les mettre les une en dessous des autres.
Je pense que la bonne présentation pour écrire ce qui précède est:
a, b, c = b, (b + a), (c + 1)
Un triplet est la limite ou j'hésite avec la présentation suivante:
(a, b, c) = (b, b + a, c + 1)
à partir de 4 élément, la seconde écriture est clairement meilleure.
le fait est que c'est le tuplet qui est affecté et comme les effets de
bords sont toujours limités, c'est ce à quoi on doit s'attendre.
Il y a bien l'ordre de l'évaluation des arguments qui n'a pas l'air
d'être défini. Cepedant, on peut considérer tout code se basant sur
celui-ci comme étant potentiellemet buggé.
Mais j ai un petit problem de compréhension sur un script ce script affiche les 10 premiers termes de la suite de fibonacci il marche très bien , mais voila je ne comprend pas totalement pourquoi et comment
a , b, c = 1 ,1,1 while c < 11: ... print b,
... a , b , c = b , b + a , c + 1 ... 1 2 3 5 8 13 21 34 55 89
J'ai l'impression que tu penses que les affectations de la ligne suivante :
... a , b , c = b , b + a , c + 1
s'effectuent dans l'ordre : d'abord a, puis b et enfin c...
Ce n'est pas le cas. Ces affectations s'effectuent _simultanément_. Ainsi, si a=1, b=2 et c=1 (cas après une itération), l'affectation se décompose comme suit :
De façon surprenante, en python, il n'y a qu'une manière de faire chaque chose. La méthode pythonique pour écrire des choses successives, c'est de les mettre les une en dessous des autres. Je pense que la bonne présentation pour écrire ce qui précède est: a, b, c = b, (b + a), (c + 1) Un triplet est la limite ou j'hésite avec la présentation suivante: (a, b, c) = (b, b + a, c + 1) à partir de 4 élément, la seconde écriture est clairement meilleure. le fait est que c'est le tuplet qui est affecté et comme les effets de bords sont toujours limités, c'est ce à quoi on doit s'attendre. Il y a bien l'ordre de l'évaluation des arguments qui n'a pas l'air d'être défini. Cepedant, on peut considérer tout code se basant sur celui-ci comme étant potentiellemet buggé.
Amicalement, Xavier
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !
Tout en étant d'accord avec vous, je le présenterais d'une manière très légèrement différente.
Dans le cas d'une ligne a , b , c = b , b + a , c + 1
Python effectue, dans l'ordre, les choses suivantes : - traitement de la partie droite du signe égal : b, b+a, c+1 : - création d'un objet, dans lequel on met le contenu de b, cet objet est le 1er d'un tuple - création d'un objet, dans lequel on met b+a (2e du tuple) - création d'un objet, dans lequel on met c+1 (3e du tuple) - traitement du signe égal : - affectation de a sur le 1er objet du tuple (affectation "à la Python", c'est à dire que a va pointer sur l'objet) - affectation de b sur le 2e objet - affectation de c sur le 3e objet
Pour faciliter la compréhension, ne pas oublier qu'en Python, on peut très bien avoir des objets non pointés. Par exemple,
2,3,4 (2,3,4)
On voit bien, alors, la création d'un tuple de 3 objets
Et aussi, les 2 lignes suivantes sont équivalentes : a,b,c = (1,2,3) a,b,c = 1,2,3
@-salutations -- Michel Claveau
Bonjour !
Tout en étant d'accord avec vous, je le présenterais d'une manière très
légèrement différente.
Dans le cas d'une ligne
a , b , c = b , b + a , c + 1
Python effectue, dans l'ordre, les choses suivantes :
- traitement de la partie droite du signe égal : b, b+a, c+1 :
- création d'un objet, dans lequel on met le contenu de b, cet
objet est le 1er d'un tuple
- création d'un objet, dans lequel on met b+a (2e du tuple)
- création d'un objet, dans lequel on met c+1 (3e du tuple)
- traitement du signe égal :
- affectation de a sur le 1er objet du tuple (affectation "à la
Python", c'est à dire que a va pointer sur l'objet)
- affectation de b sur le 2e objet
- affectation de c sur le 3e objet
Pour faciliter la compréhension, ne pas oublier qu'en Python, on peut très
bien avoir des objets non pointés. Par exemple,
2,3,4
(2,3,4)
On voit bien, alors, la création d'un tuple de 3 objets
Et aussi, les 2 lignes suivantes sont équivalentes :
a,b,c = (1,2,3)
a,b,c = 1,2,3
Tout en étant d'accord avec vous, je le présenterais d'une manière très légèrement différente.
Dans le cas d'une ligne a , b , c = b , b + a , c + 1
Python effectue, dans l'ordre, les choses suivantes : - traitement de la partie droite du signe égal : b, b+a, c+1 : - création d'un objet, dans lequel on met le contenu de b, cet objet est le 1er d'un tuple - création d'un objet, dans lequel on met b+a (2e du tuple) - création d'un objet, dans lequel on met c+1 (3e du tuple) - traitement du signe égal : - affectation de a sur le 1er objet du tuple (affectation "à la Python", c'est à dire que a va pointer sur l'objet) - affectation de b sur le 2e objet - affectation de c sur le 3e objet
Pour faciliter la compréhension, ne pas oublier qu'en Python, on peut très bien avoir des objets non pointés. Par exemple,
2,3,4 (2,3,4)
On voit bien, alors, la création d'un tuple de 3 objets
Et aussi, les 2 lignes suivantes sont équivalentes : a,b,c = (1,2,3) a,b,c = 1,2,3