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 :

Ecriture d'un algorithme


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Points : 61
    Points
    61
    Par défaut Ecriture d'un algorithme
    Bonjour,
    je débute en langage Python et je bloque sur un sujet proposé à des lycéens qui apprennent Python. Le sujet est rédigé comme suit :
    Compléter le programme ci-dessous pour la fonction var retourne le booléen True si ad-bc>0 et False dans le cas contraire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def var(a,b,c,d)
          V=...
          return(...)
    Je sais faire en créant une variable V, initialiseé à True et modifiée par un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def var(a,b,c,d):
         V=True
         if ad-bc<0:
              V=False
         return(V)
    Ma question : Comment faut-il écrire l'instruction return(...) si l'on a mis juste V=True avant et que l'on doit retourner False si ad-bc<0, évidemment dans le return.
    Je n'ai pas trouvé d'exemple d'instruction if dans un return, si toutefois cela peut faire l'affaire.
    Je remercie d'avance pour l'aide apportée en souhaitant une bonne semaine à tous.
    Pierre

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 242
    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 242
    Points : 36 699
    Points
    36 699
    Par défaut
    Salut,

    Citation Envoyé par pzorba75 Voir le message
    Je n'ai pas trouvé d'exemple d'instruction if dans un return, si toutefois cela peut faire l'affaire.
    Relisez votre code, à quoi sert d'assigner à V True lorsque la condition est vraie alors que V est déjà True.
    De plus ce n'est pas cohérent avec ce que vous racontez:
    Citation Envoyé par pzorba75 Voir le message
    Je sais faire en créant une variable V, initialiseé à True et modifiée par un test
    Ben non elle n'est pas modifié par votre test puisque çà vaut pareil avant et après.

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

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Relisez votre code, à quoi sert d'assigner à V True lorsque la condition est vraie alors que V est déjà True.
    De plus ce n'est pas cohérent avec ce que vous racontez:

    Ben non elle n'est pas modifié par votre test puisque çà vaut pareil avant et après.

    - W
    Désolé de cette bourde, j'ai modifié le programme en conséquence et ma question reste : Comment en faire avec une instruction V=... suivie de return(...) qui doit se rapporter à V.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def var(a,b,c,d):
         V=True
         if ad-bc<0:
              V=False
         return(V)

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Les variables ad et bc ne sont pas définies, si c'est a*d-b*c il faut l'écrire correctement.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Les variables ad et bc ne sont pas définies, si c'est a*d-b*c il faut l'écrire correctement.
    Tout à fait.

    Pour revenir à votre question, une fonction n'a pas nécessaire un seul return. Vous pouvez très bien faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def var(a, b, c, d):
        if a * d - b * c < 0.0:
            return False
        else:
            return True
    Notez, le else est facultatif, mais aide à la lecture. Vous pourriez faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def var(a, b, c, d):
        if a * d - b * c < 0.0:
            return False
        return True
    Si vous souhaitez conserver une variable intermédiaire vous pouvez aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def var(a, b, c, d):
        res =  a * d - b * c > 0.0
        return res
    Ou plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def var(a, b, c, d):
        return a * d - b * c > 0.0
    Notez les espaces et le nom de la variable res en minuscules. C'est une convention d'écriture que vous trouverez dans le PEP8.

    J

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 242
    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 242
    Points : 36 699
    Points
    36 699
    Par défaut
    Citation Envoyé par pzorba75 Voir le message
    Comment en faire avec une instruction V=... suivie de return(...) qui doit se rapporter à V.
    return (V) fonctionne.
    Mais la vraie question est de savoir pourquoi vous ne tiquez pas sur le NameError qui doit faire planter la fonction avant d'arriver à ce return.

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

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    return (V) fonctionne.
    Mais la vraie question est de savoir pourquoi vous ne tiquez pas sur le NameError qui doit faire planter la fonction avant d'arriver à ce return.

    - W
    Je suis en train d'apprendre Python, en essayant de me placer dans les conditions d'un élève de lycée qui n'a pas d'ordinateur ou de calculatrice (numworks) et qui doit répondre lors d'un contrôle en classe sur une feuille de papier. Sur le fond, cet méthode d'apprentissage ne peut pas aller bien loin, mais c'est ce qui est au programme des élèves de lycée depuis cette année en classe de première. En testant la réponse de Julien N, que je retiens, je me rends compte que la variable V n'est pas nécessaire.
    J'ai appris que return évalue une expression logique, tout simplement.
    Question traitée, problème résolu.
    Merci à tous

  8. #8
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    J'ai appris que return évalue une expression logique
    Pas vraiment. Le mot clé return permet juste de mettre fin à l’exécution de la fonction. On peut renvoyer tout et n'importe quoi avec un return : un booléen, une chaine de caractère, un entier, une liste... même une autre fonction. L'expression logique est ici vérifiée quand on fait res = a * d - b * c > 0.0. res faut alors la réponse à la question "est-ce que a * d - b * c > 0.0 ?". Que l'on peut renvoyer.

    En tout cas, je trouve très bien que vous essayiez vous même d'apprendre dans les même conditions. Rien de tel que de se confronter soit même aux difficultés, les comprendre et les assimiler pour les enseigner.

    J

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 242
    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 242
    Points : 36 699
    Points
    36 699
    Par défaut
    Citation Envoyé par pzorba75 Voir le message
    Sur le fond, cet méthode d'apprentissage ne peut pas aller bien loin, mais c'est ce qui est au programme des élèves de lycée depuis cette année en classe de première.
    Vous confondez méthode d'apprentissage et évaluation des connaissances (ce que vous avez appris)...

    Pour le reste, il y a des ordinateurs dans tous les lycées et rares sont ceux qui n'en disposent pas chez eux pour apprendre à programmer de façon plus conviviale et à son rythme. Et quand çà existe, il faut les aider via des subventions de la région, du département, ou autres et les recycleries existent aussi.

    note: quand j'ai appris à programmer, les ordinateurs étaient rares... Et avoir des examens où on vous demandait d'écrire une fonction sur une feuille de papier assez courant. De toutes façons, "programmer", c'est comme un devoir de français, si vous ne savez pas relire ce que vous avez écrit et vous conforter que le correcteur comprendra ce que vous racontez, çà ne le fera pas.

    Commencez à pianoter sur un ordinateur sans qu'on vous ait présenté les bases n'est pas forcément une bonne chose non plus: programmer est très captivant et essayer des trucs sans trop comprendre jusqu’à ce que çà tombe en marche n'est pas très formateur non plus. Il faut un peu de théorie et les exercices pratiques qui vont avec.

    Citation Envoyé par pzorba75 Voir le message
    Je suis en train d'apprendre Python, en essayant de me placer dans les conditions d'un élève de lycée qui n'a pas d'ordinateur ou de calculatrice (numworks)
    A défaut qu'un professeur corrige votre copie, rien ne vous empêche de demander à l'interpréteur Python ce qu'il pense de votre code.
    Ceci dit, si vous ne savez pas ce qu'est une variable, faire une multiplication,... pas facile de faire l'exercice. Et si vous n'avez pas ouvert un tuto. ou suivi un cours sur Python, vous ne pourrez pas l'inventer.

    Citation Envoyé par pzorba75 Voir le message
    En testant la réponse de Julien N, que je retiens, je me rends compte que la variable V n'est pas nécessaire.
    J'ai appris que return évalue une expression logique, tout simplement.[/QUOTE]

    Ah ben on peut même supprimer le "return":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var = lambda a, b, c, d: a * d - b * c < 0
    mais si on vous demande d'écrire une fonction avec une variable V et un return, vous devez faire avec.

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

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

Discussions similaires

  1. Formalisation graphique des algorithmes
    Par David R. dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 08/12/2012, 11h21
  2. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 15h25
  3. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 23h18
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 13h09
  5. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 18h14

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