Partage
  • Partager sur Facebook
  • Partager sur Twitter

forcer une variable à rester entre 2 valeurs

Sujet résolu
    28 juin 2020 à 16:48:12

    bonjour, 

    j'aimerai savoir si il existe un moyen plus simple ou plus court, ou même plus pythonique de faire cela :

    if var > 10: var = 10
    if var < 0: var = 0
    value = var

    Dans mon code, je me retrouve avec plein de fois ses double if de 'recadrage', selon le mini/max attendu en sortie. En entrée la valeur est celle d'un unique encodeur physique qui a donc besoin d'un cadre selon le paramètre contrôlé.

    Du coup je me dis qu'il y a p'être une syntaxe plus élégante ? (ou pas)

    (je n'arrive pas à mettre de mots sur ce que je cherche a faire, pour trouver comment sur le net)

    pouvez-vous m'éclairé sur ce qui est bon ou pas de faire ?

    merci ;)

    -
    Edité par obsolete 28 juin 2020 à 16:49:50

    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2020 à 16:57:23

      var = max(min(var,10),0)
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        28 juin 2020 à 16:59:00

        Merci josmiley, j'ai même pas eut le temps de me faire un café lool

        je vais tester ça de suite ;)

        • Partager sur Facebook
        • Partager sur Twitter
          28 juin 2020 à 17:05:19

          aussi ...
          var = (var,0,10)[(var<0)-(var>10)]

          et aussi ...

          var = var>10 and 10 or var>0 and var or 0


          et aussi ...

          var = sorted((0,10,var))[1]



          -
          Edité par josmiley 28 juin 2020 à 17:13:24

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            28 juin 2020 à 17:16:46

            La version avec max est min est la meilleure imo, mais j'aurais fait dans l'autre sens histoire de garder les deux bornes dans le bon sens (pour la lisibilité) :

            min(max(var, 0), 10) 



            • Partager sur Facebook
            • Partager sur Twitter
              28 juin 2020 à 17:16:55

              ok je vois

              je trouve la 1er méthode, plus parlante a mon gout (et dans l'autre sens comme dis thelinekioubeur) , et moins redondante ('var' dans mon code peut être un peu long en caractère en plus)

              Mais merci pour les exemple ;)

              -
              Edité par obsolete 28 juin 2020 à 17:18:21

              • Partager sur Facebook
              • Partager sur Twitter
                28 juin 2020 à 17:20:43

                thelinekioubeur a écrit:

                La version avec max est min est la meilleure imo, mais j'aurais fait dans l'autre sens histoire de garder les deux bornes dans le bon sens (pour la lisibilité) :

                min(max(var, 0), 10) 
                oui je trouve aussi.
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                  28 juin 2020 à 19:55:22

                  Je ré ouvre pas un sujet, car j'ai une question similaire.

                  j'ai aussi le cas ou je veux boucler sur une plage donné. par exemple:

                  if var == 15: var =0, et l'inverse if var == 0: var =15

                  existe-il quelque chose de similaire à min(max(var,0),15) ?

                  Merci à vous ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 juin 2020 à 20:29:22

                    var ^= 15

                    en fait je ne suis ps sûr d'avoir compris ... que veux-tu dire par boucler sur une plage ?



                    -
                    Edité par josmiley 28 juin 2020 à 20:35:04

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Python c'est bon, mangez-en. 

                      28 juin 2020 à 21:17:07

                      Si ma variable dépasse 15 elle repasse a 0, et si je passe en négatif elle redeviens positif a 15.

                      c'est pour contrôler un affichage, c'est une liste de fonctions, je veux faire défiler la liste et si j’arrive au bout je veux pas être bloqué, mais retourner au début. enfin que la fonction suivant la fonction 15 soit la fonction 0 et ainsi de suite.

                      je regarde ce que tu as ecrit comme code demain, j'ai plus le temps ce soir.

                      Merci ;)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 juin 2020 à 21:24:25

                        var %= 16
                        Ou dans le cadre d'une incrémentation/décrémentation
                        var = (var + n)%16

                        -
                        Edité par josmiley 28 juin 2020 à 23:20:26

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python c'est bon, mangez-en. 

                          29 juin 2020 à 2:09:40

                          obsolete a écrit:
                          Si ma variable dépasse 15 elle repasse a 0, et si je passe en négatif elle redeviens positif a 15.
                          Si elle vaut +17, tu veux +2 ou 0? Si tu as -3, tu veux +13 ou 15?
                          Pour alterner entre deux valeurs val1 et val2:
                          val = (val1 + val2) - val

                          -
                          Edité par PierrotLeFou 29 juin 2020 à 3:01:06

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                            29 juin 2020 à 16:35:46

                            josmiley a écrit:

                            var %= 16

                            Cela fais exactement ce que je cherche merci, mais je comprend pas vraiment comment marche l'opérateur modulo (que je découvre).

                            Je vais cherche sur le sujet pour en savoir plus.

                            Merci ;)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 juin 2020 à 20:09:09

                              Le modulo c'est tout simple : a % b donne le reste de la division de a par b
                              • Partager sur Facebook
                              • Partager sur Twitter

                              forcer une variable à rester entre 2 valeurs

                              × 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