Début sur Python

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: Début sur Python

Message par fakbill » 03 nov. 2015 21:16

est-ce parce qu'elle vérifie sans cesse que la condition est vérifiée, même quand elle ne l'a pas été une fois
gnignigni??? Je ne comprends pas du tout ton "même quand elle ne l'a pas été une fois"

Code : Tout sélectionner

while True:
    print("prout')
va avoir du mal à s’arrêter.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Charo

Re: Début sur Python

Message par Charo » 03 nov. 2015 21:30

On va peut-être pas repartir dans le débat sur quelle boucle utiliser, si ?
Vu qu'on sait que ça termine, je serais bien plus convaincu par un for qu'un while.
Pour la simple et bonne raison que c'est bien plus simple conceptuellement
Je ne suis pas sûr de la véracité de cette affirmation...

fabkill> Merci pour tes précisions.

Erdnase

Re: Début sur Python

Message par Erdnase » 03 nov. 2015 23:45

si on écrit :

Code : Tout sélectionner

a=0
while a<10:
    a+=1
on est d'accord que la boucle s'arrête ? Donc si on se plante pas, on est sûr que que la while s’arrête ?
l'avantage du for c'est qu'on est pas obligé d'écrire l'incrémentation d'un compteur.
je dirais au final qu'il vaut mieux utiliser une while lorsque la condition de fin est liée au CHANGEMENT d'une variable. Et dès lors qu'on aurait une condition de fin lié au nombre de "bouclage", ou un nombre en terme de quantité, on utilise for. Je me trompe ?

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: Début sur Python

Message par fakbill » 04 nov. 2015 00:14

Je ne te comprends toujours pas.
Bien sûr que ton exemple de boucle s’arrête.

Le while boucle tant qu'une CONDITION est vraie.
Le for boucle sur tous les éléments d'un objet sur lequel on peut itérer. C'est par exemple le cas des string, des list, des dict (avec un subtilité dans ce cas) et j'en passe.

Si tu veux boucler sur les éléments d'une list en python, tu fais
for elem in mylist
et pas (car c'est MOCHE car contraire à l'esprit de python)

Code : Tout sélectionner

for i in range(len(mylist)):
elem = mylist[i]
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Charo

Re: Début sur Python

Message par Charo » 04 nov. 2015 00:19

Erndase s'est sans doute mal exprimé et se demandait pourquoi on devrait utiliser une boucle for "quand on sait que la boucle s'arrête". Non parce qu'en général une boucle infinie c'est pas vraiment ce qu'on recherche. :mrgreen:

Pour moi, la boucle for en python est fort utile quand tu dois explicitement itérer sur un objet… itérable. Réfléchir pendant des heures sur laquelle utiliser me parait contre-productif. Il faut par contre faire attention à écrire un code efficace (for i in range(n): en python 2.xx crée une liste de taille n pour rien, alors soit il faut utiliser xrange qui est un générateur, soit écrire un while). Les générateurs sont une fonctionnalité un peu avancée de python, c'est pour ça que je m'étonne quand on dit que la boucle for est "conceptuellement simple".

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: Début sur Python

Message par fakbill » 04 nov. 2015 00:58

Tu as été élevé au C non? ;)
Un for en python, c'est une itération sur objet itérable. Il est assez rare d'en revenir aux indices en bon python.
Le fait que range(n) instanciait une list au lieu d'un générateur était une erreur de design de python2 qui a été corrigé en python3. Je le redis, le for en python est une boucle sur les éléments d'une objet.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Charo

Re: Début sur Python

Message par Charo » 04 nov. 2015 01:18

fakbill a écrit :Tu as été élevé au C non? ;)
Pas vraiment non…
Et en fait tu répètes ce que je viens de dire.

Erdnase

Re: Début sur Python

Message par Erdnase » 04 nov. 2015 18:19

je suis d'accord avec vous
Je suis habitué à python 2.7 c'est peut être pour ça que je préfère les while (inconsciemment) XD
Ce débat dépasse malheureusement mon petit niveau en python, pour moi, une while s'arrête comme une for. Je suis conscient qu'on ne puisse pas prouver qu'une while s’arrête, mais je le conçois comme ça.
Le fait de préférer une for quand on travaille sur un objet itérable reviens à ce que j'essayais de dire. Mais je m'étais mal exprimé.

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: Début sur Python

Message par fakbill » 04 nov. 2015 18:42

Je suis conscient qu'on ne puisse pas prouver qu'une while s’arrête, mais je le conçois comme ça.
Vous fumez quoi exactement?? Cette phrase ne veux rien dire.
Dans le cas général, c'est le problème de l’arrêt....C'est indécidable en toute généralité mais souvent décidable au cas par cas
QU'est ce que vous avez en tête pour écrire ca???
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Erdnase

Re: Début sur Python

Message par Erdnase » 04 nov. 2015 19:02

En effet j'ai écrit ça. Maintenant que tu le remarque je vois bien que c'est pas très clair. Cette histoire m'embrouille, j'ai besoin d'y voir plus clair
J’émettais seulement le fait que c'est indécidable en effet ... tout en disant que personnellement ce problème n'en était pas un pour moi, parce que je considère que toutes mes boucles s'arrêtent. (ce qui est le cas, non ? mis à part les boucles infinies. )
N'étant pas expert dans le domaine il m'est difficile de bien saisir toute l'histoire. Je suis un peu perdu et si j'écris ici, c'est bien pour chercher à comprendre et non pour dire des choses avec la prétention d'avoir raison. Tout ce que j'ai dis plus haut n'est pas forcément vrai, c'est mon raisonnement personnel.

Répondre