• [^] # Re: En Python bref

    Posté par (site web personnel) . En réponse au message Avent du Code, jour 2. Évalué à 3. Dernière modification le 07 décembre 2022 à 14:52.

    Waouh. C'est pour le moins original ça.

     def __invert__(self):
     """~chifumi returns value in [1, 2, 3]"""
     return (self.chifumi % 3) or 3

    Si je comprends bien, ça fait de ~ une opération pour récupérer la valeur normalisée. Bien joué le (valeur % 3) or 3, c'est bien plus lisible que (valeur - 1) % 3 + 1.

     def __pos__(self):
     return ((self.chifumi + 1) % 3) or 3
     def __neg__(self):
     return ((self.chifumi - 1) % 3) or 3

    La valeur qui me vainc et la valeur que je vaincs, si je ne m'abuse.

     def __lt__(self, other):
     return +self == ~other
     def __gt__(self, other):
     return -self == ~other

    Je suis plus inférieur à un autre si la valeur qui me vainc est la même que la valeur normalisée de l'autre. Et mutatis mutandis pour la supériorité. Tu aurais pu utiliser functool.total_ordering().

    Ensuite, le reste est assez simple à comprendre, une fois ces bases posées. La réutilisation des opérateurs est... intéressante. Je ne peux pas dire que je suis fan, c'est un peu bizarre à lire quand même.

    values = dict(
     A=chifumi(1),
     B=chifumi(2),
     C=chifumi(3),
     X=chifumi(1),
     Y=chifumi(2),
     Z=chifumi(3),
    )

    Tiens, j'ignorais la possibilité d'instancier un dictionnaire avec des mots-clefs. C'est amusant, ça aussi.