IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment coder une fonction Répéter jusqu'à [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut Comment coder une fonction Répéter jusqu'à
    Bonjour

    Je ne trouve pas dans python la fonction répéter jusqu'à

    j'ai bien essayé avec un while mais ça ne fonctionne pas tout à fait pareil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=0
    while a<10:
        print(a)
        a=a+1

    Comment la coder ?
    Merci de vos conseils
    Cordialement

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ptitjoz Voir le message
    Je ne trouve pas dans python la fonction répéter jusqu'à
    Nomal, il n'y a pas. D'ailleurs je n'ai pas souvenir d'un langage qui implémente le "jusqu'à". Géneralement c'est le "tant que" qui est plébiscité.

    Citation Envoyé par ptitjoz Voir le message
    j'ai bien essayé avec un while mais ça ne fonctionne pas tout à fait pareil
    Ben je ne vois pas pourquoi. Répéter jusqu'à condition c'est équivalent à répéter tant que "non condition".
    Ensuite évidemment il ne faut pas se louper dans la transformation de "condition" en "non condition". Par exemple jusqua (a > 10) c'est tant que (a <= 10). Et pour les expressions plus complexes qui mixtent le "and" et "or" alors il faut connaitre (ou savoir retrouver) les lois mathématiques de De Morgan:
    • non(A et B) = non(A) ou non(B)
    • non(A ou B) = non(A) et non(B)


    Citation Envoyé par ptitjoz Voir le message
    Comment la coder ?
    Comment coder quoi exactement???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 740
    Par défaut
    Salut,

    Citation Envoyé par ptitjoz Voir le message
    Comment la coder ?
    A la limite, on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a = 0
    while True:
         ....
         a += 1
         if a == 10:
              break
    mais, dans ce cas particulier, on préférera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for a in range(10):
         ....
    Citation Envoyé par ptitjoz Voir le message
    Je ne trouve pas dans python la fonction répéter jusqu'à
    Essayez d'améliorer vos connaissances du langage plutôt que vouloir vous rassurer en y retrouvant des constructions connues.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par Sve@r Voir le message
    D'ailleurs je n'ai pas souvenir d'un langage qui implémente le "jusqu'à". Géneralement c'est le "tant que" qui est plébiscité.
    En Pascal, il existe le "repeat... until", et c'est bien pratique, et surtout "parlant". Mais en Python, on fait ce qu'on veut avec "while".

  5. #5
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Bonjour
    oui j'utilisais en pascal le repeat et j'aurais aimé écrire une fonction python pour reproduire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    program boucle_repeat_until;
     
    var a:integer;
     
    begin
        a:=0;
        repeat 
            a:=a+1;
            writeln(a);
        until a=10;
     
    end.
    Je vais donc voir avec while en inversant les conditions selon vos conseils

    Bien à vous

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 966
    Par défaut
    En pascal, il existe effectivement une boucle repeat until où le test est effectué en fin de boucle, ce qui a pour effet qu'on passe obligatoirement une fois dans la boucle.

    Ce même comportement peut être obtenu avec une boucle while.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while True:
         do_something()
         if condition():
            break

    Donc, le code Pascal que tu as posté :
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a:=0;
    repeat 
        a:=a+1;
        writeln(a);
    until a=10;

    Peut se traduire comme ceci :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a = 0
    while True:
        a+=1
        print(a)
        if (a == 10):
            break

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    oui j'utilisais en pascal le repeat et j'aurais aimé écrire une fonction python pour reproduire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    program boucle_repeat_until;
     
    var a:integer;
     
    begin
        a:=0;
        repeat 
            a:=a+1;
            writeln(a);
        until a=10;
     
    end.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=0
    while a != 10:
    	a+=1
    	print(a)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    En Pascal, il existe le "repeat... until"
    oui, en Perl aussi on trouve du until, et dans une pétée d'autres langages à minima une tournure do ... while

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Concernant le while de Python, on peut ajouter 2 particularités intéressantes:

    - c'était évident, mais on peut sortir de la boucle while avec le "if...break" à n'importe quel endroit du bloc d'instructions, et pas seulement à la fin

    - avec "continue", on peut forcer le retour au while, sans exécuter la fin du bloc d'instruction

    Il y a aussi un "else" que je n'ai jamais utilisé, et dont je ne comprends pas l'intérêt...

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Il y a aussi un "else" que je n'ai jamais utilisé, et dont je ne comprends pas l'intérêt...
    Ahah !!!
    Alors avant toute chose, un réflexe à avoir: toujours se dire que si quelque chose existe en Python c'est que ça peut être utile. Ne reste qu'à le trouver
    Le "else" en fin de boucle sert à exécuter un code dans le cas où la boucle a été totalement terminée (c'est à dire pas interrompue avant la fin par un break).
    Par exemple on peut s'en servir pour chercher (la boucle), si on trouve on sort (break) et si on ne trouve pas, donc que la boucle va jusqu'à la fin, alors (else) on indique qu'on n'a pas trouvé.
    Sans ce "else" on ne peut obtenir l'équivalent qu'en utilisant un drapeau.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >>> n=2
    >>> while n < 10:
    ...	x=2
    ...	while x < n:
    ...		if (n%x) == 0:
    ...			print(n, 'égal à ', x, '*', n//x)
    ...			break
    ...		x+=1
    ...	else:
    ...		print(n, 'est un nombre premier')
    ...	n+=1
    ...
    2 est un nombre premier
    3 est un nombre premier
    4 égal à 2 * 2
    5 est un nombre premier
    6 égal à 3 * 2
    7 est un nombre premier
    8 égal à 4 * 2
    9 égal à 3 * 3
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par Sve@r Voir le message
    Le "else" en fin de boucle sert à exécuter un code dans le cas où la boucle a été totalement terminée
    Merci, je découvrais ce "else" il y a quelques jours grâce à ton tuto. (donc jamais utilisé)

    MAIS...

    Python veut être explicite Et pour moi, ce else est justement un non-sens ! Le else va s'exécuter si on parcourt bien toute la boucle
    Il aurait été plus logique d'avoir une structure du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for item in items:
        if truc: break
    else:
        print("PAS parcours de tout")
    finally:
        print("parcours de tout")
    note: pas fan du "finally" (car pas le même sens que les exceptions) mais indique ici que nous sommes allés à la fin de la bouche (eol: est plus explicite)

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Python veut être explicite Et pour moi, ce else est justement un non-sens ! Le else va s'exécuter si on parcourt bien toute la boucle
    Bah oui, peut-être que les codeurs n'ont pas bien saisi la façon dont les utilisateurs allaient percevoir le sens général de cette instruction (moi aussi parfois faut que je m'y reprenne pour savoir si je vais pouvoir la mettre ou pas). On peut la lire comme "si pas interruption alors ..." et faut bien faire avec.

    Citation Envoyé par papajoker Voir le message
    Il aurait été plus logique d'avoir une structure du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for item in items:
        if truc: break
    else:
        print("PAS parcours de tout")
    finally:
        print("parcours de tout")
    Ca peut se réécrire en...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for item in items:
    	if truc:
    		print("PAS parcours de tout")
    		break
    else:
    	print("parcours de tout")
    ... mais j'aime bien ton idée. Peut-être qu'il y a une espèce de ticketing dans lequel tu pourrais la proposer en évolution. Le seul souci c'est que tu inverses le but du "else" (dans la VO il sert à indiquer le "parcours de tout" tandis que toi tu lui fais indiquer le "non parcours de tout") donc ce serait un changement majeur dans Python.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    dans une pétée d'autres langages à minima une tournure do ... while
    On peut trouver des demandes comme la PEP 315


    Citation Envoyé par Sve@r;
    On peut la lire comme "si pas interruption alors ..." et faut bien faire avec.
    La doc est claire, dans ce cas, il faut penser plus "exception"
    Lorsqu'elle utilisée dans une boucle, la clause else est donc plus proche de celle associée à une instruction try que de celle associée à une instruction if
    Casser des années de code, pas de risque !
    Très bon sujet de 2009 (avec proposition de "then:"), existe aussi ce sujet

    ------------
    Note: existe un forum python officiel sur les peps, sujets généralement très intéressants, comme la rubrique "idées" (comme le dev de pathlib).

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    La doc est claire, dans ce cas, il faut penser plus "exception"
    Mouais. Une exception qui n'est exécutée que si tout a été traité ça fait bizarre... Bah tant pis, peut-être un truc qui se voulait utile (et qui peut l'être) mais qui a été mal réfléchi question syntaxe...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le "else" en fin de boucle sert à exécuter un code dans le cas où la boucle a été totalement terminée (c'est à dire pas interrompue avant la fin par un break).
    Merci Sve@r! D'habitude, j'utilise un drapeau pour faire ça, mais ça a l'air plus pratique!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/12/2004, 15h14
  2. Comment coder une tabulation pour cut ?
    Par ggnore dans le forum Linux
    Réponses: 2
    Dernier message: 26/11/2004, 10h31
  3. Comment lancer une fonction
    Par Elois dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 21/04/2004, 19h10
  4. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13
  5. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo