Forum Programmation.python Retourner deux valeurs

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
18
mar.
2021

Bonjour :) ,

J'ai mon algorithme qui marche, mais j'aimerai apporté une modification.
Ma fonction recherche dans un texte dans le message des client tout nombre de 5 à 4 chiffre de entre 60000 - 1000 (ex: 1001) si le client demande la commande 1005 comme exemple et me le retourne.

Mais je voudrai que si après avoir analyser le texte et trouve deux nombre de 5 à 4 chiffre de entre 60000 - 1000 (ex: 1001 et 3005) que cela me retourne tout les deux.

 def detect_order_name(message):
    for text in [message["subject"],message["data"]]:
        order_name = "not found"
        match = re.search(r"\D(\d{4,5})\D","{}{}{}".format("a",text,"a"))
        if match:
            num = int(match.group(1))
            if num < 60000 and num > 1000:
                order_name = str(num)
                break
    return order_name

EDIT : remise en forme du code avec la balise code+python

  • # tuple

    Posté par  . Évalué à 1.

    • [^] # Re: tuple

      Posté par  . Évalué à 1.

      au lieu de me récupérer normalement toutes les valeurs, elle me récupère qu'une seule même s'il y en a plusieurs alors que je retourne bien "order_name" …

    • [^] # Re: tuple

      Posté par  (site Web personnel) . Évalué à 3.

      La question (peut-être un peu mal formulée) me semble être comment passer de 1 à N plutôt que de passer de 1 à 2 exactement. Donc liste plutôt que tuple ?

      Debian Consultant @ DEBAMAX

      • [^] # Re: tuple

        Posté par  . Évalué à 1.

        Oui oui, après avoir n'analyser j'aimerai passer de 1 à N valeur comme vous dîtes.

        • [^] # Re: tuple

          Posté par  . Évalué à 1.

          Ma fonction s’arrête dès qu’elle trouve une valeur convenable.
          Si il y en a plusieurs, elle va sortir la première.

          • [^] # Re: tuple

            Posté par  . Évalué à 3. Dernière modification le 19/03/21 à 08:30.

            revoir l'algorithme pour virer la condition qui fait qu'elle s'arrête de remplir le tuple/liste

            • [^] # Re: tuple

              Posté par  . Évalué à 0.

              Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

      • [^] # Re: tuple

        Posté par  . Évalué à -1.

        Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

    • [^] # Re: tuple

      Posté par  . Évalué à -1.

      Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

  • # Ma version

    Posté par  . Évalué à 3.

    def detect_order_name2(message):
        text = message["subject"] + message["data"]
        order_name = list()
        lstr_order_name = re.findall(r"\d+", text)
        lint_order_name = [int(x) for x in lstr_order_name]
        for num in lint_order_name :
            if num < 60000 and num > 1000:
                order_name.append(num)
        print(order_name)
        if order_name :
            return order_name
        else :
            return "not_found"

    Ainsi, si

    message = {'subject' : 'toe 23 la 7777u tous 5555. 6666', 'autre': '9999', 'data' : 'pold zur 4555 3456 1234567 tr'}

    Alors, cela renvoie :

    [7777, 5555, 6666, 4555, 3456]

    Après, on peut rendre plus pythonique mon code.

    • [^] # Re: Ma version

      Posté par  . Évalué à 0.

      Super Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

  • # Merci :) !

    Posté par  . Évalué à -1.

    Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.