Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opérateur ternaire

Opérateur ternaire en tupple

Sujet résolu
    28 juillet 2021 à 15:24:07

    Bonjour,

    Voici ce que je lis sur l'opérateur ternaire :

    « L’opérateur ternaire en Python peut être utilisé en utilisant des tuples. Il prend les expressions à évaluer et une instruction conditionnelle booléenne. L’expression à renvoyer dépend de la condition booléenne. Si la condition est vraie, la première valeur est renvoyée et si l’expression est fausse, la deuxième valeur est renvoyée. »

    Exemple :

    a,b = 12,43 temp = (a*2,b/2)[a<b] print(temp)

    Production:

    21.5
    Je ne comprends pas ?
    a est bien plus petit que b ! Donc, a<b est vrai : c'est donc la première valeur qui doit être renvoyée, soit a*2 = 24.
    Pourquoi le résultat est-il 21.5, c'est-à-dire la 2e valeur (b/2) ?
    Même mon ordinateur répond 21.5 ! 
    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2021 à 15:35:19

      Bonjour, 

      l'évaluation de a<b retourne True ou False (ici True). Et en Python, False vaut 0 et True vaut 1.

      temp = (a*2,b/2)[a<b]
      
      devient
      
      temp = (a*2,b/2) [1]

      Et donc on renvoie l'élément d'index 1 du tuple temp, soit b/2.

      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2021 à 15:50:35

        Oookaaaaayyyy ! Compris !

        Merci.

        • Partager sur Facebook
        • Partager sur Twitter
          28 juillet 2021 à 16:03:54

          chrisblues59 a écrit:

          Bonjour,

          Voici ce que je lis sur l'opérateur ternaire :

          « L’opérateur ternaire en Python peut être utilisé en utilisant des tuples. Il prend les expressions à évaluer et une instruction conditionnelle booléenne. L’expression à renvoyer dépend de la condition booléenne. Si la condition est vraie, la première valeur est renvoyée et si l’expression est fausse, la deuxième valeur est renvoyée. »


          Tu devrais citer tes sources :) Je trouve ce texte ici et visiblement il y est question de l'émulation de l'opérateur ternaire quand il n'existait pas en Python, c'est à dire avant Python 2.5 ! donc il il a sans doute plus de 15 ans !

          chrisblues59 a écrit:

          a,b = 12,43 temp = (a*2,b/2)[a<b] print(temp) 

          Ton code est mal rentré dans l'interface du  forum, ça devrait être sur trois lignes et avec la coloration syntaxique.
          • Partager sur Facebook
          • Partager sur Twitter
            28 juillet 2021 à 16:52:30

            Oui, en effet, j'ai fait un copié-collé à partir du site que tu as découvert dans "ici".

            Je ne savais pas qu'il datait de si longtemps et je ne savais pas non plus qu'il n'existait pas en python !

            Quant au code mal rentré, je suis désolé, mais là aussi, j'avais fait un copié-collé...

            >>> a, b = 12, 43
            >>> print (a<b)
            True
            >>> (a*2, b/2)[a<b]
            21.5
            >>> 

            Voilà, comme ça, c'est mieux ! :D

            • Partager sur Facebook
            • Partager sur Twitter
              28 juillet 2021 à 18:38:29

              Aujourd'hui encore, il n'exista pas vraiment d'opérateur ternaire, c'est plus un one-liner : x = a if condition else b.

              Aussi l'astuce présentée ici x = (b, a)[condition] a quelques défauts dont le plus génant étant l'évaluation des 2 éléments avant l'affectation alors qu'avec une vraie condition seule la valeur affectée est évaluée.

              -
              Edité par .H.D.1. 28 juillet 2021 à 18:40:00

              • Partager sur Facebook
              • Partager sur Twitter
                28 juillet 2021 à 19:36:31

                chrisblues59 a écrit:

                >>> a, b = 12, 43
                >>> print (a<b)
                True
                >>> (a*2, b/2)[a<b]
                21.5
                >>> 

                Voilà, comme ça, c'est mieux ! :D

                Merci !

                .H.D.1. a écrit:

                Aujourd'hui encore, il n'exista pas vraiment d'opérateur ternaire, c'est plus un one-liner : x = a if condition else b.



                Je ne vois pas en quoi ça n'en fait pas un vrai opérateur ternaire au même titre que celui du C même si en Python, le nom officiel est opérateur conditionnel. Que ce soit un oneliner est parfaitement normal, c'est le propre de tout retour d'un opérateur, c'est d'ailleurs pareil en C.

                • Partager sur Facebook
                • Partager sur Twitter
                  28 juillet 2021 à 19:58:25

                  PascalOrtiz a écrit:

                  Je ne vois pas en quoi ça n'en fait pas un vrai opérateur ternaire au même titre que celui du C même si en Python, le nom officiel est opérateur conditionnel. Que ce soit un oneliner est parfaitement normal, c'est le propre de tout retour d'un opérateur, c'est d'ailleurs pareil en C.

                  Dans le sens où ce n'est pas un opérateur dédié, mais oui c'est admis qu'il s'agit bien de la forme ternaire. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Opérateur ternaire

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown